容器(container)是Docker镜像的运行实例,类似于可执行文件与进程的关系,Docker是容器引擎,相当于系统平台。
运行容器
使用docker run命令管理容器的运行。
示例
[root@qikegu ~]# docker run -it --rm busybox/ #/ #/ #/ #/ # exit
复制
此条命令将运行busybox镜像,然后进入busybox系统的sh终端。exit命令退出shell,容器自身也将停止运行。也可使用ctrl + p + q,可以退出shell,容器仍将继续运行。
容器列表
docker ps命令列出系统上的容器。
简单用法
docker ps
复制
常用选项
-a,--all显示所有容器(包括已经停止的)
返回值
打印系统中的容器。
例子
打印系统中当前运行的容器。
[root@qikegu ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6dabe342ab99 busybox "sh" 19 seconds ago Up 18 seconds jovial_swirles
复制
显示所有容器(包括已经停止的)
[root@qikegu ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6dabe342ab99 busybox "sh" 5 minutes ago Up 5 minutes jovial_swirles0f191fd7d469 busybox "sh" 26 minutes ago Exited (0) 26 minutes ago hopeful_lalande8ae26063af0b hello-world "/hello" About an hour ago Exited (0) About an hour ago nostalgic_jepsen4e80cdf55081 busybox "sh" About an hour ago Exited (0) About an hour ago heuristic_euler2190b6af6286 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago pensive_gangulycd5d988325ff jenkins "/bin/tini -- /usr/l…" 40 hours ago Exited (130) 40 hours ago awesome_heyrovsky053eaa5cc8e5 hello-world "/hello" 41 hours ago Exited (0) 41 hours ago gifted_boothb6f8c654159a 2bcb04bdb83f "/bin/bash" 5 weeks ago Exited (127) 5 weeks ago competent_khorana8703a9083c4a 2bcb04bdb83f "/bin/bash" 5 weeks ago Exited (0) 5 weeks ago cocky_engelbart
docker history
此命令显示镜像的创建历史。
简单用法
docker history IMAGE
复制
常用选项
- IMAGE – 指定镜像名称/ID。
返回值
显示镜像的历史。
例子
显示busybox镜像的创建历史。
[root@qikegu ~]# docker history busyboxIMAGE CREATED CREATED BY SIZE COMMENT64f5d945efcc 10 days ago /bin/sh -c #(nop) CMD ["sh"] 0B<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
使用此命令,显示容器中的进程。
典型用法
docker top CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
打印指定容器中的进程
例子
首先使用docker ps查询运行中的容器(ID),然后使用docker top CONTAINER显示指定容器中的进程:
[root@qikegu ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2084a03f4c46 busybox "sh" 3 hours ago Up 3 hours distracted_ride[root@qikegu ~]# docker top 2084a03f4c46UID PID PPID C STIME TTY TIME CMDroot 6302 6286 0 13:04 pts/0 00:00:00 sh
docker start/stop/restart
此命令用于启动/停止/重启容器。
典型用法
docker start/stop/restart CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
启动/停止/重启容器。
例子
前面我们运行了一个busybox容器,现在我们让它停止运行,然后使用docker ps检查停止运行是否成功。
[root@qikegu ~]# docker stop 2084a03f4c462084a03f4c46[root@qikegu ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker rm
一个容器即使已经退出,仍然会存在,可以使用docker ps -a命令查看。命令docker rm删除容器。
典型用法
docker rm CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
删除指定容器,输出该容器ID。
例子
使用docker ps -a列出所有容器,包括退出运行的,然后使用docker rm b6f8c654159a删除指定容器,最后docker ps -a确认指定容器是否被删除。
[root@qikegu ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0f191fd7d469 busybox "sh" 5 hours ago Exited (0) 5 hours ago hopeful_lalande8ae26063af0b hello-world "/hello" 6 hours ago Exited (0) 6 hours ago nostalgic_jepsen4e80cdf55081 busybox "sh" 6 hours ago Exited (0) 6 hours ago heuristic_euler2190b6af6286 hello-world "/hello" 6 hours ago Exited (0) 6 hours ago pensive_gangulycd5d988325ff jenkins "/bin/tini -- /usr/l…" 45 hours ago Exited (130) 45 hours ago awesome_heyrovsky053eaa5cc8e5 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago gifted_boothb6f8c654159a 2bcb04bdb83f "/bin/bash" 6 weeks ago Exited (127) 6 weeks ago competent_khorana[root@qikegu ~]# docker rm b6f8c654159ab6f8c654159a[root@qikegu ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0f191fd7d469 busybox "sh" 5 hours ago Exited (0) 5 hours ago hopeful_lalande8ae26063af0b hello-world "/hello" 6 hours ago Exited (0) 6 hours ago nostalgic_jepsen4e80cdf55081 busybox "sh" 6 hours ago Exited (0) 6 hours ago heuristic_euler2190b6af6286 hello-world "/hello" 6 hours ago Exited (0) 6 hours ago pensive_gangulycd5d988325ff jenkins "/bin/tini -- /usr/l…" 45 hours ago Exited (130) 45 hours ago awesome_heyrovsky053eaa5cc8e5 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago gifted_booth
docker stats
此命令输出容器的运行统计信息。
典型用法
docker stats CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
显示容器的CPU和内存利用率等运行信息。
例子
显示容器运行时的cpu、内存等信息。
[root@qikegu ~]# docker stats e7407526d69c
复制
输出
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDSe7407526d69c vigorous_cohen 0.00% 56KiB / 991.2MiB 0.01% 656B / 0B 0B / 0B 1
docker attach
此命令用于附加到容器中正在运行的进程。
典型用法
docker attach CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
附加到容器中正在运行的进程。
例子
进入到容器(busybox),附加到正在运行的sh进程。Ctrl + P + Q 退出。
[root@qikegu ~]# docker attach e7407526d69c/ #/ #
docker pause
此命令用于暂停正在运行的容器。
典型用法
docker pause CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
暂停正在运行的容器,输出该容器ID。
例子docker pause af82cc24d7cc暂停容器,docker ps -a查看,暂停成功。
[root@qikegu ~]# docker pause af82cc24d7ccaf82cc24d7cc[root@qikegu ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaf82cc24d7cc busybox "sh" 2 minutes ago Up About a minute (Paused) infallible_jennings...
docker unpause
此命令启动暂停的容器。
典型用法
docker unpause CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
启动暂停的容器,输出该容器ID。
例子docker unpause af82cc24d7cc启动容器,docker ps -a查看,启动成功。
[root@qikegu ~]# docker unpause af82cc24d7ccaf82cc24d7cc[root@qikegu ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaf82cc24d7cc busybox "sh" 6 minutes ago Up 6 minutes infallible_jennings...
docker kill
杀死正在运行的容器。
典型用法
docker kill CONTAINER
复制
常用选项
- CONTAINER – 容器ID,
docker ps可以查询
执行结果
杀死正在运行的容器,,输出该容器ID。
例子
杀死正在运行的容器af82cc24d7cc。
[root@qikegu ~]# docker kill af82cc24d7ccaf82cc24d7cc
网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar。
我可以使用 docker port bf08b7f2cd89 或 docker port wizardly_chandrasekhar 来查看容器端口的映射情况。
bash
- test@test:~$ docker port bf08b7f2cd89
-
bash
test@test:~$ docker port wizardly_chandrasekhar
- 5000/tcp -> 0.0.0.0:5000
查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
bash
- test@test:~$ docker logs -f bf08b7f2cd89
- Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- 192.168.239.1 - - [09/May/2016 16:30:37] “GET / HTTP/1.1” 200 -
- 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
- test@test:~$ docker top wizardly_chandrasekhar
- UID PID PPID … TIME CMD
- root 23245 23228 … 00:00:00 python app.py
检查 WEB 应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
bash
- test@test:~$ docker inspect wizardly_chandrasekhar
- [
- {
- “Id”: “bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85”,
- “Created”: “2018-09-17T01:41:26.174228707Z”,
- “Path”: “python”,
- “Args”: [
- “app.py”
- ],
- “State”: {
- “Status”: “running”,
- “Running”: true,
- “Paused”: false,
- “Restarting”: false,
- “OOMKilled”: false,
- “Dead”: false,
- “Pid”: 23245,
- “ExitCode”: 0,
- “Error”: “”,
- “StartedAt”: “2018-09-17T01:41:26.494185806Z”,
- “FinishedAt”: “0001-01-01T00:00:00Z”
- },
- ……
教程中提到的都是命令典型用法,其他用法,可用
docker help command查看,例如:docker help rmi
容器生命周期
下图解释了Docker容器的整个生命周期。
- 最开始,Docker容器将处于创建完成状态。
- 接下来,当使用
Docker run命令启动容器时,Docker容器进入运行状态。 docker kill命令用于杀死正在运行的Docker容器。docker pause命令用于暂停正在运行的Docker容器。docker unpause命令用于启动暂停的Docker容器。docker stop命令用于退出正在运行的Docker容器。
