docker -- 容器操作


人,真是奇怪,没有外人来证明你,就往往看不出自己的价值。 ——撒哈拉的故事


参考

《docker 开发与实践》


容器

容器是一个打包了应用和服务的环境,这里记录容器的常用标准操作


容器的管理操作

容器的查看

查看正在运行的容器

root@pinsily:~# docker ps

使用参数 a 查看所有容器,即包含未启动的容器

root@pinsily:~# docker ps -a

各字段的含义:

字段 含义
CONTAINER ID 64位16进制数唯一容器标识
INAGE 创建容器时使用的镜像
COMMAND 容器最后运行的命令
CREATED 创建时间
STATUS 容器状态分,运行时为运行时间,停止时为类似于 exited(0) 的错误码,0为正常退出
PORTS 对外开放的端口
NAME 唯一标识的名字

创建容器

create 和 run 命令均可创建容器,区别在于前者创建一个静止状态的容器,后者创建后则启动容器

创建静止状态的容器,使用 ubuntu 16.04 版本,返回 id

root@pinsily:~# docker create ubuntu:16.04

使用 ps -a 命令才能查看到容器

run 命令可以创建交互性和后台型的运行容器

创建交互性容器

root@pinsily:~# docker run -i -t --name=interaction ubuntu:16.04 /bin/bash

选项含义

选项 含义
i 打开容器的标准输入 stdin
t 使用 /bin/bash 建立 terminal
name 命名,否则系统随机

当本地不存在镜像时,docker 会自动从云端中下载,原理图如下:

使用命令 exit 或者 Ctrl+D 可以退出交互式容器

创建后台型容器,不随 terminal 的关闭而退出

root@pinsily:~# docker run -d --name=deamon ubuntu:16.04 /bin/bash -c "while true; do echo hello; sleep 1; done"

选项含义

选项 含义
d 创建后台进程
c 后台执行命令
name 命名,否则系统随机

使用 ps 命令可以查看到该容器正在执行

值得注意的是,当容器执行完命令之后会自动停止,上面的死循环能保持我们能用 ps 查看容器

另外,我们可以通过设置参数 --restart 进行重启, on-failure:5 表示结束状态码非 0 时最多重启 5 次

终止和删除容器

终止和删除都可以使用唯一标识,即名字和ID进行指定容器

注: 使用id的时候只要保证键入的位数能够区分即可

root@pinsily:~# docker stop 79

root@pinsily:~# docker rm 79

一般情况下,运行中的容器不能直接删除,但是可以使用 -f 选项强制删除

删除所有容器(曲线救国)

root@pinsily:~# docker rm $(docker ps -a -q)

$(docker ps -a -q) 列出所有容器的 id


容器内信息获取和命令执行

查看容器日志

对于后台型容器而言

创建一个后台容器

root@pinsily:~# docker run --name=deamon_log ubuntu:16.04 /bin/bash -c 'for((i=0;1;i++));do echo $i; sleep 1; done;'

查看日志

root@pinsily:~# docker logs -f  --tail=5  -t deamon_log

参数含义

参数 含义
-f 实时更新日志
--tail=5 开始只打印最后五条日志
-t 显示日志时间

注:有趣的是,直接使用 window10 cmd ssh 登录服务器操作的时候,不加任何参数,即docker logs deamon_log都会实时刷新,而且还关不掉

查看容器进程

root@pinsily:~# docker top deamon_log

可以看到,上面的容器中有 for 循环和 sleep 进程

查看容器信息

root@pinsily:~# docker inspect deamon_log

容器的信息非常多,可以使用 -f 或者 --format 制定输出信息

查看容器名和运行状态

root@pinsily:~# docker inspect --format '{{.Name}} {{.State.Running}}' deamon_log

/deamon_log true

容器的导入和导出

导出

root@pinsily:~# docker export deamon_log > my_container.tar

导入

root@pinsily:~# docker import - imported:container

-标识本地导入,也可以使用url形式导入,imported:container 表示镜像名和标签