容器(container)是Docker镜像的运行实例,类似于可执行文件与进程的关系,Docker是容器引擎,相当于系统平台。

运行容器

使用docker run命令管理容器的运行。
示例

  1. [root@qikegu ~]# docker run -it --rm busybox
  2. / #
  3. / #
  4. / #
  5. / #
  6. / # exit

复制
此条命令将运行busybox镜像,然后进入busybox系统的sh终端。
exit命令退出shell,容器自身也将停止运行。也可使用ctrl + p + q,可以退出shell,容器仍将继续运行。

容器列表

docker ps命令列出系统上的容器。
简单用法

  1. docker ps

复制
常用选项

  • -a, --all 显示所有容器(包括已经停止的)

返回值
打印系统中的容器。
例子
打印系统中当前运行的容器。

  1. [root@qikegu ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6dabe342ab99 busybox "sh" 19 seconds ago Up 18 seconds jovial_swirles

复制
显示所有容器(包括已经停止的)

  1. [root@qikegu ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6dabe342ab99 busybox "sh" 5 minutes ago Up 5 minutes jovial_swirles
  4. 0f191fd7d469 busybox "sh" 26 minutes ago Exited (0) 26 minutes ago hopeful_lalande
  5. 8ae26063af0b hello-world "/hello" About an hour ago Exited (0) About an hour ago nostalgic_jepsen
  6. 4e80cdf55081 busybox "sh" About an hour ago Exited (0) About an hour ago heuristic_euler
  7. 2190b6af6286 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago pensive_ganguly
  8. cd5d988325ff jenkins "/bin/tini -- /usr/l…" 40 hours ago Exited (130) 40 hours ago awesome_heyrovsky
  9. 053eaa5cc8e5 hello-world "/hello" 41 hours ago Exited (0) 41 hours ago gifted_booth
  10. b6f8c654159a 2bcb04bdb83f "/bin/bash" 5 weeks ago Exited (127) 5 weeks ago competent_khorana
  11. 8703a9083c4a 2bcb04bdb83f "/bin/bash" 5 weeks ago Exited (0) 5 weeks ago cocky_engelbart

复制

docker history

此命令显示镜像的创建历史。
简单用法

  1. docker history IMAGE

复制
常用选项

  • IMAGE – 指定镜像名称/ID。

返回值
显示镜像的历史。
例子
显示busybox镜像的创建历史。

  1. [root@qikegu ~]# docker history busybox
  2. IMAGE CREATED CREATED BY SIZE COMMENT
  3. 64f5d945efcc 10 days ago /bin/sh -c #(nop) CMD ["sh"] 0B
  4. <missing> 10 days ago /bin/sh -c #(nop) ADD file:e36dd1822f36a8169… 1.2MB

复制

教程中提到的都是命令典型用法,其他用法,可用docker help command查看,例如:docker help rmi

Docker容器与宿主机

Docker引擎是跨平台的,只要宿主机上安装了Docker,docker镜像就能在宿主机里运行,不管其具体系统环境是什么。例如:一个nginx Docker镜像可以运行在安装了docker的任何系统上,无论它是windows还是Linux等等,这是一个极大优势,这意味着部署应用将大大简化。

Docker 容器操作

docker top

使用此命令,显示容器中的进程。
典型用法

  1. docker top CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
打印指定容器中的进程
例子
首先使用docker ps查询运行中的容器(ID),然后使用docker top CONTAINER显示指定容器中的进程:

  1. [root@qikegu ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 2084a03f4c46 busybox "sh" 3 hours ago Up 3 hours distracted_ride
  4. [root@qikegu ~]# docker top 2084a03f4c46
  5. UID PID PPID C STIME TTY TIME CMD
  6. root 6302 6286 0 13:04 pts/0 00:00:00 sh

复制

docker start/stop/restart

此命令用于启动/停止/重启容器。
典型用法

  1. docker start/stop/restart CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
启动/停止/重启容器。
例子
前面我们运行了一个busybox容器,现在我们让它停止运行,然后使用docker ps检查停止运行是否成功。

  1. [root@qikegu ~]# docker stop 2084a03f4c46
  2. 2084a03f4c46
  3. [root@qikegu ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

复制

docker rm

一个容器即使已经退出,仍然会存在,可以使用docker ps -a命令查看。命令docker rm删除容器。
典型用法

  1. docker rm CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
删除指定容器,输出该容器ID。
例子
使用docker ps -a列出所有容器,包括退出运行的,然后使用docker rm b6f8c654159a删除指定容器,最后docker ps -a确认指定容器是否被删除。

  1. [root@qikegu ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 0f191fd7d469 busybox "sh" 5 hours ago Exited (0) 5 hours ago hopeful_lalande
  4. 8ae26063af0b hello-world "/hello" 6 hours ago Exited (0) 6 hours ago nostalgic_jepsen
  5. 4e80cdf55081 busybox "sh" 6 hours ago Exited (0) 6 hours ago heuristic_euler
  6. 2190b6af6286 hello-world "/hello" 6 hours ago Exited (0) 6 hours ago pensive_ganguly
  7. cd5d988325ff jenkins "/bin/tini -- /usr/l…" 45 hours ago Exited (130) 45 hours ago awesome_heyrovsky
  8. 053eaa5cc8e5 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago gifted_booth
  9. b6f8c654159a 2bcb04bdb83f "/bin/bash" 6 weeks ago Exited (127) 6 weeks ago competent_khorana
  10. [root@qikegu ~]# docker rm b6f8c654159a
  11. b6f8c654159a
  12. [root@qikegu ~]# docker ps -a
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. 0f191fd7d469 busybox "sh" 5 hours ago Exited (0) 5 hours ago hopeful_lalande
  15. 8ae26063af0b hello-world "/hello" 6 hours ago Exited (0) 6 hours ago nostalgic_jepsen
  16. 4e80cdf55081 busybox "sh" 6 hours ago Exited (0) 6 hours ago heuristic_euler
  17. 2190b6af6286 hello-world "/hello" 6 hours ago Exited (0) 6 hours ago pensive_ganguly
  18. cd5d988325ff jenkins "/bin/tini -- /usr/l…" 45 hours ago Exited (130) 45 hours ago awesome_heyrovsky
  19. 053eaa5cc8e5 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago gifted_booth

复制

docker stats

此命令输出容器的运行统计信息。
典型用法

  1. docker stats CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
显示容器的CPU和内存利用率等运行信息。
例子
显示容器运行时的cpu、内存等信息。

  1. [root@qikegu ~]# docker stats e7407526d69c

复制
输出

  1. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
  2. e7407526d69c vigorous_cohen 0.00% 56KiB / 991.2MiB 0.01% 656B / 0B 0B / 0B 1

复制

docker attach

此命令用于附加到容器中正在运行的进程。
典型用法

  1. docker attach CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
附加到容器中正在运行的进程。
例子
进入到容器(busybox),附加到正在运行的sh进程。Ctrl + P + Q 退出。

  1. [root@qikegu ~]# docker attach e7407526d69c
  2. / #
  3. / #

复制

docker pause

此命令用于暂停正在运行的容器。
典型用法

  1. docker pause CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
暂停正在运行的容器,输出该容器ID。
例子
docker pause af82cc24d7cc暂停容器,docker ps -a查看,暂停成功。

  1. [root@qikegu ~]# docker pause af82cc24d7cc
  2. af82cc24d7cc
  3. [root@qikegu ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. af82cc24d7cc busybox "sh" 2 minutes ago Up About a minute (Paused) infallible_jennings
  6. ...

复制

docker unpause

此命令启动暂停的容器。
典型用法

  1. docker unpause CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
启动暂停的容器,输出该容器ID。
例子
docker unpause af82cc24d7cc启动容器,docker ps -a查看,启动成功。

  1. [root@qikegu ~]# docker unpause af82cc24d7cc
  2. af82cc24d7cc
  3. [root@qikegu ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. af82cc24d7cc busybox "sh" 6 minutes ago Up 6 minutes infallible_jennings
  6. ...

复制

docker kill

杀死正在运行的容器。
典型用法

  1. docker kill CONTAINER

复制
常用选项

  • CONTAINER – 容器ID,docker ps可以查询

执行结果
杀死正在运行的容器,,输出该容器ID。
例子
杀死正在运行的容器af82cc24d7cc。

  1. [root@qikegu ~]# docker kill af82cc24d7cc
  2. af82cc24d7cc

复制

网络端口的快捷方式

通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar
我可以使用 docker port bf08b7f2cd89 或 docker port wizardly_chandrasekhar 来查看容器端口的映射情况。

bash
  1. test@test:~$ docker port bf08b7f2cd89
  2. 5000/tcp -> 0.0.0.0:5000

    bash
  3. test@test:~$ docker port wizardly_chandrasekhar

  4. 5000/tcp -> 0.0.0.0:5000

查看 WEB 应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

bash
  1. test@test:~$ docker logs -f bf08b7f2cd89
  2. 192.168.239.1 - - [09/May/2016 16:30:37] “GET / HTTP/1.1” 200 -
  3. 192.168.239.1 - - [09/May/2016 16:30:37] “GET /favicon.ico HTTP/1.1” 404 -

-f:docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。


查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

bash
  1. test@test:~$ docker top wizardly_chandrasekhar
  2. UID PID PPID … TIME CMD
  3. root 23245 23228 … 00:00:00 python app.py

检查 WEB 应用程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

bash
  1. test@test:~$ docker inspect wizardly_chandrasekhar
  2. [
  3. {
  4. “Id”: “bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85”,
  5. “Created”: “2018-09-17T01:41:26.174228707Z”,
  6. “Path”: “python”,
  7. “Args”: [
  8. “app.py”
  9. ],
  10. “State”: {
  11. “Status”: “running”,
  12. “Running”: true,
  13. “Paused”: false,
  14. “Restarting”: false,
  15. “OOMKilled”: false,
  16. “Dead”: false,
  17. “Pid”: 23245,
  18. “ExitCode”: 0,
  19. “Error”: “”,
  20. “StartedAt”: “2018-09-17T01:41:26.494185806Z”,
  21. “FinishedAt”: “0001-01-01T00:00:00Z”
  22. },
  23. ……

教程中提到的都是命令典型用法,其他用法,可用docker help command查看,例如:docker help rmi

容器生命周期

下图解释了Docker容器的整个生命周期。
8.   Docker 容器(container) - 图1

  • 最开始,Docker容器将处于创建完成状态。
  • 接下来,当使用Docker run命令启动容器时,Docker容器进入运行状态。
  • docker kill命令用于杀死正在运行的Docker容器。
  • docker pause命令用于暂停正在运行的Docker容器。
  • docker unpause命令用于启动暂停的Docker容器。
  • docker stop命令用于退出正在运行的Docker容器。