docker-入门教程

轩辕经国
2023-12-01

一、docker ps命令(容器操作)

  1. 以上命令表示对docker容器(container)的操作。
  2. 容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。
  3. 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
1. 查询正在运行的容器信息

docker ps,等同于docker container ls

2. 查询所有容器信息

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
3. 查询所有容器信息,并且显示其大小

docker ps -a -sdocker 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)
3. 查询最新创建的一个容器信息

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
4. 查询最新创建的前n个容器信息

docker ps -n,若要显示大小,则加上-sdocker 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
5. 只显示容器ID

docker ps -q,清理容器时十分实用,后面会提到

示例:显示所有的容器ID

-> % docker ps -q -a
7e5e854a7ba7
726bbb1e3453
6. 显示完整输出

默认输出会存在截断,使用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
7. 搜索容器

docker ps -fdocker ps --filter
当容器过多时,需要按条件过滤(搜索)(支持根据容器 ID、容器名称、…、等多种条件搜索)

  1. 选项后跟的都是键值对 key=value (可不带引号),如果有多个过滤条件,就多次使用 filter 选项。例如:

docker ps --filter id=a1b2c3 --filter name=bingohuang

  1. 相同条件之间的关系是或,不同条件之间的关系是与。例如:

docker ps --filter name=bingo --filter name=huang --filter status=running

以上过滤条件会找出 name 包含 bingo 或 huang 并且 status 为 running 的容器。

  1. id 和 name,支持正则表达式,使用起来非常灵活。

  2. 模糊匹配,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
  1. 精确匹配
    docker ps --filter name=^/bingohuang$
    以上命令可以 精确匹配 name 为 bingohuang 的容器。注意,容器实际名称,开头是有一个正斜线 / ,可用 docker inspect 一看便知。

  2. 最后, 举一个复杂点的例子,用于清理名称包含 bingohuang,且状态为 exited 或 dead 的容器:

docker rm $(docker ps -q --filter name=.*bingohuang.* --filter status=exited --filter status=dead2>/dev/null)

  1. Format 格式化显示

如果想自定义显示容器字段,可以用格式化选项 --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)

  1. 查看所有镜像
docker images

docker image ls
  1. 移除镜像
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] .
 类似资料: