- Docker 管理命令
- 容器管理
- 镜像管理
- 网络管理
- 系统管理
- 数据卷管理
- 快照管理
- 插件管理
- 其他
- swarmkit 管理
- 模式管理
- 节点管理
- 秘钥管理
- 服务管理
- 服务栈管理
Docker 的每一级命令都可以使用--help
的参数来查看帮助信息
Docker 一级命令
1 | root@ubuntu:~# docker --help |
在 Docker1.13版本之前, 是没有二级管理命令的, 随着 Docker 的功能越来越多, 命令参数也越来越多, 到1.13版本后, Docker 终于对他们做出了归类, 之前的语法也兼容, 但是 Docker 推荐使用最新的语法格式.
1.13版本后, Docker 对命令做出了如下归类:
- container Manage containers
- image Manage images
- network Manage networks
- node Manage Swarm nodes
- plugin Manage plugins
- secret Manage Docker secrets
- service Manage services
- stack Manage Docker stacks
- swarm Manage Swarm
- system Manage Docker
- volume Manage volumes
容器管理 container
1 | root@ubuntu:~# docker container --help |
attach
进入容器的方式之一, 翻译过来叫”附着”到运行的容器中. 他与exec
有本质的区别, exec 进入容器是在主进程的基础之上, 再开通一个进程实现的进入容器. 而 attach 则意味着进入到容器的主进程中. 产生的后果也不一样, 由于 attach 进入到了主进程, 一旦 Ctrl+C 退出终端, 将导致主进程退出, 从而容器也随之退出. 而 exec 的方式进入容器是单独开启了一个进程, 该进程的产生于销毁并不影响主进程, 所以不会因为终端的退出而导致容器退出.
1 | root@ubuntu:~# docker run -d centos ping 123.57.233.243 |
exec
在一个运行中的容器内执行命令. 就如上面所说, 使用 exec 执行命令意味着在主进程的基础之上, 再启动其他的进程, 其他进程的启动与销毁不会直接影响容器的退出.
exec 的用法很多, 使用频率最高的是进入容器的操作
1 | root@ubuntu:~# docker container exec -it b9704931408c /bin/bash |
也可以运行任何bash命令
1 | root@ubuntu:~# docker container exec 11610baab1ce echo "haha" |
commit
基于一个现有的容器创建新的镜像. commit 多用在做容器迁移的时候, 当容器为由状态时, 我们需要保存现有容器的所有运行状态以保证迁移后的一致性, 这时 commit 就派上了用场.
运行一个初始的镜像, 我们通过 exec 进入到容器, 并做了一些修改, 当需要迁移此容器时, 可以把当前修改过后的容器保存为一个新的镜像. 然后将镜像迁移至新主机, 再 run 起来.
1 | # 修改容器内容 |
注意: 挂载的数据是不会被 commit 到镜像中的. 迁移之后需要用相同的参数启动起来
迁移有两种方式:
- 一种是导入导出的方式(通过 tar.gz 文件)
- 一种是通过 Registry 的方式 push 和 pull
如果是通过 Registry 的方式的话, 需要在 commit 时, 镜像名字中加入 Registry 地址
docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
注意: commit 的过程中, 容器处于 pause 的状态, 类似于 MySQL 的排它锁
cp
通过 cp 命令可以把容器中的文件拷贝到宿主机(把文件拿出来)
1 | root@ubuntu:~# docker container cp --help |
注意: 两种执行方式的语法不同
diff
列出与原始镜像相比,容器中变化的内容.
- A: 增加
- D: 删除
- C: 修改
1 | root@ubuntu:~# docker container diff --help |
export&import/save&load
Docker 的导入导出
https://docs.lvrui.io/2017/02/19/docker的导入导出/
export&import 操作的对象是容器, 导出到一个新的镜像, 该镜像只有一层
save&load 操作对象是镜像, 原镜像层数保留
如果导出容器还需要保留层数, 那就需要使用 commit+save+load 黄金组合啦
inspect
查看容器详细信息
1 | root@ubuntu:~# docker container inspect my-third-nginx |
ls/ps/list
查看 container 列表
- docker ps
- docker container ls
- docker container list
以上三条命令的用法和作用都是一样的, 之间做了别名
最实用的参数-s
可以显示出容器占用空间大小, 括号中的是镜像大小, 前面是可写层(容器)大小
1 | root@ubuntu:~# docker container list -s |
logs
查看容器的前台回显日志. 由于容器必须以阻塞前台的方式运行, 那么我们就可以通过 logs 命令来查看容器前台的回显(在默认是 json-file 日志引擎下)
1 | root@ubuntu:~# docker run -d centos ping 123.57.233.243 |
kill/start/stop/restart/rm/pause/unpause/prune
- kill 给容器发送 kill 信号, 非正常退出容器
- start 启动退出状态的容器
- stop 退出运行状态的容器
- restart 重启容器
- rm 删除退出状态的容器
- pause 暂停运行中的容器(处于阻塞状态)
- unpause 恢复暂停的容器至运行状态
- prune 删除所有 stopped 状态的容器(1.13的新特性, 救世主!)
port
查看端口的映射关系
1 | root@ubuntu:~# docker container port my-third-nginx |
rename
更改容器名称
1 | root@ubuntu:~# docker ps |
stats
实时查看容器资源使用状况
1 | root@ubuntu:~# docker container stats |
top
查看容器的进程信息
1 | root@ubuntu:~# docker container top --help |
update
调整分配给容器的计算资源, 可以更改该容器可以使用的 CPU 计算资源与内存资源等
1 | root@ubuntu:~# docker container update --help |
wait
阻塞容器的运行直到停止为止, 然后打印该容器的退出状态码
1 | # 终端1 |
run
运行一个容器, 这个命令的参数非常多, 可以定制的属性也非常多, 常用参数如下
-e
: 设置环境变量-h
: 设置 hostname-i
: 开放标准输入-t
: 分配伪终端-l
: 打标签-p
: 指定映射出来的端口(可随机分配, 可以指定)-P
: 映射容器内所有开放的端口(端口号随机分配)-v
: 数据卷的挂载--volumes-driver
: 指定存储引擎-w
: 容器运行的工作目录--restart
: 默认为 no, 容器异常退出后禁止自动重启- 设置为
--restart=on-failure:10
, 意味对该容器的非0退出状态进行重启, 最多重启10次 - 设置为
--restart=always
始终重启
- 设置为
--network
: 指定网络类型--name
: 指定容器名称--log-driver
: 指定日志引擎--link
: 网络层连通指定容器--dns
: 指定容器内使用的 DNS 服务器--privileged
: 提权,在容器内获取扩展的执行权限--add-host
: hosts 配置. 例如:--add-host polarsnow:123.57.233.243