docker container ls
命令可以代替docker ps
命令docker ps --help
可以查询ps命令的用法详情:
-> % docker ps --help
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display numeric IDs
-s, --size Display total file sizes
docker ps
,等同于docker container ls
,
docker ps -a
,-a可以显示非运行时的容器,若不加则显示正在运行的容器
示例:
-> % docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e5e854a7ba7 hello-world "/hello" 22 minutes ago Exited (0) 22 minutes ago upbeat_kapitsa
726bbb1e3453 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago sad_dijkstra
docker ps -a -s
或docker ps -s -a
,可以获得 2 个数值:一个是容器真实增加的大小,一个是整个容器的虚拟大小
示例:
-> % docker ps -a -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
7e5e854a7ba7 hello-world "/hello" 23 minutes ago Exited (0) 23 minutes ago upbeat_kapitsa 0B (virtual 1.84kB)
726bbb1e3453 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago sad_dijkstra 0B (virtual 1.84kB)
docker ps -l
,若显示大小,则使用 docker ps -l -s
示例:
-> % docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e5e854a7ba7 hello-world "/hello" 25 minutes ago Exited (0) 25 minutes ago upbeat_kapitsa
docker ps -n
,若要显示大小,则加上-s
,docker ps -n 1 等同于 docker ps -l
示例:查询最近创建的5个容器信息
-> % docker ps -n 5
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e5e854a7ba7 hello-world "/hello" 27 minutes ago Exited (0) 27 minutes ago upbeat_kapitsa
726bbb1e3453 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago sad_dijkstra
docker ps -q
,清理容器时十分实用,后面会提到
示例:显示所有的容器ID
-> % docker ps -q -a
7e5e854a7ba7
726bbb1e3453
默认输出会存在截断,使用docker ps --no-trunc
可以不截断输出
示例:显示所有容器的不截断信息:
-> % docker ps --no-trunc -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e5e854a7ba7053ccfdd0bc8b89655f344d9a740463374c5dde92c8cb89e985b hello-world "/hello" 41 minutes ago Exited (0) 41 minutes ago upbeat_kapitsa
726bbb1e345322fcddb219dfe8fb468f82692ae192a9b3416d419a463b048978 hello-world "/hello" 4 hours ago Exited (0) 4 hours ago sad_dijkstra
docker ps -f
或docker ps --filter
当容器过多时,需要按条件过滤(搜索)(支持根据容器 ID、容器名称、…、等多种条件搜索)
docker ps --filter id=a1b2c3 --filter name=bingohuang
docker ps --filter name=bingo --filter name=huang --filter status=running
以上过滤条件会找出 name 包含 bingo 或 huang 并且 status 为 running 的容器。
id 和 name,支持正则表达式,使用起来非常灵活。
模糊匹配,docker ps --filter name=.*bingohuang.*
匹配 name 包含 bingohuang 的容器,和 --filter name=bingohuang
一个效果。
示例1:查找id包含7e5e854a7ba7
且 名称包含upbeat
的所有容器信息
-> % docker ps -a -f id=7e5e854a7ba7 -f name=upbeat
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e5e854a7ba7 hello-world "/hello" About an hour ago Exited (0) About an hour ago upbeat_kapitsa
示例2:查找name包含upbeat
或包含sad
的所有容器信息
-> % docker ps -a -f name=upbeat -f name=sad
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e5e854a7ba7 hello-world "/hello" About an hour ago Exited (0) About an hour ago upbeat_kapitsa
726bbb1e3453 hello-world "/hello" 4 hours ago Exited (0) 4 hours ago sad_dijkstra
精确匹配
docker ps --filter name=^/bingohuang$
以上命令可以 精确匹配 name 为 bingohuang 的容器。注意,容器实际名称,开头是有一个正斜线 / ,可用 docker inspect 一看便知。
最后, 举一个复杂点的例子,用于清理名称包含 bingohuang,且状态为 exited 或 dead 的容器:
docker rm $(docker ps -q --filter name=.*bingohuang.* --filter status=exited --filter status=dead2>/dev/null)
如果想自定义显示容器字段,可以用格式化选项 --format 。
请自行查阅
参考:https://www.cnblogs.com/fuyuteng/p/8847331.html
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
视频教程:
https://www.bilibili.com/video/av27122140/?p=1
mac桌面版入门教程:
https://docs.docker.com/docker-for-mac/
完整的教程:
https://juejin.im/post/5c6e02a76fb9a04a0e2dc8cd
二、镜像操作(image)
docker images
或
docker image ls
docker image rm xxx[名称/IMAGE ID]
或
docker rmi xxx[名称/IMAGE ID]
注意:
如果Dockerfile
中没有指定CMD命令,则会执行From镜像(父镜像)的中Dockerfile
的CMD命令
docker镜像使用,终端交互运行容器,对镜像打tag、搜索、推送到镜像仓库:
https://www.runoob.com/docker/docker-image-usage.html
其他命令大全:
docker container kill终止容器运行。
docker container kill [containerID]
容器停止运行之后,并不会消失,用下面的命令删除容器文件。
docker container rm [containerID]
也可以使用docker container run命令的–rm参数,在容器终止运行后自动删除容器文件。
docker container run --rm -p 8000:3000 -it koa-demo /bin/bash
docker container run --rm -p 8000:3000 -it koa-demo:0.0.1
docker container run -d --rm -p 3000:3000 --name='postwoman' 257fc3c769ba
第一个端口是本机的,第二个是容器内的
docker 的主要用法就是上面这些,此外还有几个命令,也非常有用。
(1)docker container start
前面的docker container run命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用docker container start命令,它用来启动已经生成、已经停止运行的容器文件。
docker container start [containerID]
(2)docker container stop
前面的docker container kill命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而docker container stop命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。
container stop [containerID]
这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。
(3)docker container logs
docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。
docker container logs [containerID]
(4)docker container exec
docker container exec命令用于进入一个正在运行的 docker 容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。
docker container exec -it [containerID] /bin/bash
docker exec -it $(docker ps --filter name=order |awk '{print $1}' |head -2|tail -1) bash
(5)docker container cp
docker container cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。
docker container cp [containID]:[/path/to/file] .