一切福田,不離方寸,從心而覓,感無不通。

Docker命令及参数详解

1. Docker命令行

Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法。但是由于Docker技术的快速发展,此交互式教程已经无法满足Docker用户的实际使用需求,所以让我们一起开始一次真正的命令行学习之旅。首先,Docker的命令清单可以通过运行 docker ,或者 docker help 命令得到:

$ sudo docker

在Docker容器技术不断演化的过程中,Docker的子命令已经达到34个之多,其中核心子命令(例如:run)还会有复杂的参数配置。笔者通过结合功能和应用场景方面的考虑,把命令行划分为4个部分,方便我们快速概览Docker命令行的组成结构:

功能划分 命令
环境信息相关
  1. info
  2. version
系统运维相关
  1. attach
  2. build
  3. commit
  4. cp
  5. diff
  6. export
  7. images
  8. import / save / load
  9. inspect
  10. kill
  11. port
  12. pause / unpause
  13. ps
  14. rm
  15. rmi
  16. run
  17. start / stop / restart
  18. tag
  19. top
  20. wait
日志信息相关
  1. events
  2. history
  3. logs
Docker Hub服务相关
  1. login
  2. pull / push
  3. search

1.1 参数约定

单个字符的参数可以放在一起组合配置,例如

可以用这样的方式等同:

1.2 Boolean

Boolean参数形式如: -d=false。注意,当你声明这个Boolean参数时,比如 docker run -d=true,它将直接把启动的Container挂起放在后台运行。

1.3 字符串和数字

参数如 --name=“” 定义一个字符串,它仅能被定义一次。同类型的如-c=0 定义一个数字,它也只能被定义一次。

1.4 后台进程

Docker后台进程是一个常驻后台的系统进程,值得注意的是Docker使用同一个文件来支持客户端和后台进程,其中角色切换通过-d来实现。这个后台进程是用来管理容器的,使用Docker --help可以得到更详细的功能参数配置, 如下图:

Docker后台进程参数清单如下表:

参数 解释
--api-enable-cors=false 开放远程API调用的 CORS 头信息。这个接口开关对想进行二次开发的上层应用提供了支持。
-b, --bridge="" 挂载已经存在的网桥设备到 Docker 容器里。注意,使用 none 可以停用容器里的网络。
--bip="" 使用 CIDR 地址来设定网络桥的 IP。注意,此参数和 -b 不能一起使用。
-D, --debug=false 开启Debug模式。例如:docker -d -D
-d, --daemon=false 开启Daemon模式。
--dns=[] 强制容器使用DNS服务器。例如: docker -d --dns 8.8.8.8
--dns-search=[] 强制容器使用指定的DNS搜索域名。例如: docker -d --dns-search example.com
-e, --exec-driver="native" 强制容器使用指定的运行时驱动。例如:docker -d -e lxc
-G, --group="docker" 在后台运行模式下,赋予指定的Group到相应的unix socket上。注意,当此参数 --group 赋予空字符串时,将去除组信息。
-g, --graph="/var/lib/docker" 配置Docker运行时根目录
-H, --host=[] 在后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如:

$ docker -H tcp://0.0.0.0:2375 ps 或者

$ export DOCKER_HOST="tcp://0.0.0.0:2375"
$ docker ps

--icc=true 启用内联容器的通信。
--ip="0.0.0.0" 容器绑定IP时使用的默认IP地址
--ip-forward=true 启动容器的 net.ipv4.ip_forward
--iptables=true 启动Docker容器自定义的iptable规则
--mtu=0 设置容器网络的MTU值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。
-p, --pidfile="/var/run/docker.pid" 后台进程PID文件路径。
-r, --restart=true 重启之前运行中的容器
-s, --storage-driver="" 强制容器运行时使用指定的存储驱动,例如,指定使用devicemapper, 可以这样:

docker -d -s devicemapper

--selinux-enabled=false 启用selinux支持
--storage-opt=[] 配置存储驱动的参数
--tls=false 启动TLS认证开关
--tlscacert="/Users/dxiao/.docker/ca.pem" 通过CA认证过的的certificate文件路径
--tlscert="/Users/dxiao/.docker/cert.pem" TLS的certificate文件路径
--tlskey="/Users/dxiao/.docker/key.pem" TLS的key文件路径
--tlsverify=false 使用TLS并做后台进程与客户端通讯的验证
-v, --version=false 显示版本信息

注意,其中带有[] 的启动参数可以指定多次,例如

 

2. Docker命令行探秘

2.1 环境信息相关

info

使用方法: docker info

例子:

使用说明:

这个命令在开发者报告Bug时会非常有用,结合docker vesion一起,可以随时使用这个命令把本地的配置信息提供出来,方便Docker的开发者快速定位问题。

version

使用方法: docker version

使用说明:

显示Docker的版本号,API版本号,Git commit, Docker客户端和后台进程的Go版本号。

2.2 系统运维相关

attach

使用方法: docker attach [OPTIONS] CONTAINER

例子:

 

使用说明:

使用这个命令可以挂载正在后台运行的容器,在开发应用的过程中运用这个命令可以随时观察容器內进程的运行状况。开发者在开发应用的场景中,这个命令是一个非常有用的命令。

build

使用方法:docker build [OPTIONS] PATH | URL | –

例子:

使用说明:

这个命令是从源码构建新Image的命令。因为Image是分层的,最关键的Base Image是如何构建的是用户比较关心的,Docker官方文档给出了构建方法,请参考这里。

commit

使用方法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

例子:

使用说明:

这个命令的用处在于把有修改的container提交成新的Image,然后导出此Imange分发给其他场景中调试使用。Docker官方的建议 是,当你在调试完Image的问题后,应该写一个新的Dockerfile文件来维护此Image。commit命令仅是一个临时创建Imange的辅助 命令。

cp

使用方法: cp CONTAINER:PATH HOSTPATH

使用说明:

使用cp可以把容器內的文件复制到Host主机上。这个命令在开发者开发应用的场景下,会需要把运行程序产生的结果复制出来的需求,在这个情况下就可以使用这个cp命令。

diff

使用方法:docker diff CONTAINER

例子:

 

使用说明:

diff会列出3种容器内文件状态变化(A – Add, D – Delete, C – Change )的列表清单。构建Image的过程中需要的调试指令。

export

使用方法:docker export CONTAINER

例子:

 

使用说明:

把容器系统文件打包并导出来,方便分发给其他场景使用。

images

使用方法:docker images [OPTIONS] [NAME]

例子:

使用说明:

Docker Image是多层结构的,默认只显示最顶层的Image。不显示的中间层默认是为了增加可复用性、减少磁盘使用空间,加快build构建的速度的功能,一般用户不需要关心这个细节。

import / save / load

使用方法:

使用说明:

这一组命令是系统运维里非常关键的命令。加载(两种方法: import, load),导出(一种方法: save)容器系统文件。

inspect

使用方法:

 

例子:

 

使用说明:

查看容器运行时详细信息的命令。了解一个Image或者Container的完整构建信息就可以通过这个命令实现。

kill

使用方法:

 

使用说明:

杀掉容器的进程。

port

使用方法:

 

使用说明:

打印出Host主机端口与容器暴露出的端口的NAT映射关系

pause / unpause

使用方法:

 

使用说明:

使用cgroup的freezer顺序暂停、恢复容器里的所有进程。详细freezer的特性,请参考官方文档。

ps

使用方法:

 

例子:

 

使用说明:

docker ps打印出正在运行的容器,docker ps -a打印出所有运行过的容器。

rm

使用方法:

 

例子:

 

使用说明:

删除指定的容器。

rmi

使用方法:

 

例子:

使用说明:

指定删除Image文件。

run

使用方法:

 

例子:

 

使用说明:

这个命令是核心命令,可以配置的参数多达28个参数。详细的解释可以通过docker run --help列出。官方文档中提到的 Issue 2702:"lxc-start: Permission denied – failed to mount" could indicate a permissions problem with AppArmor. 在最新版本的Dcoker中已经解决。

start / stop / restart

使用方法:

 

使用说明:

这组命令可以开启(两个:start, restart),停止(一个:stop)一个容器。

tag

使用方法:

 

使用说明:

组合使用用户名,Image名字,标签名来组织管理Image。

top

使用方法:

 

使用说明:

显示容器內运行的进程。

wait

使用方法:

 

使用说明:

阻塞对指定容器的其他调用方法,直到容器停止后退出阻塞。

2.3 日志信息相关

events

使用方法:

 

使用说明:

打印容器实时的系统事件。

history

使用方法:

例子:

 

使用说明:

打印指定Image中每一层Image命令行的历史记录。

logs

使用方法:

 

使用说明:

批量打印出容器中进程的运行日志。

2.4 Dcoker Hub服务相关

login

使用方法:

 

使用说明:

登录Hub服务。

pull / push

使用方法:

 

使用说明:

通过此命令分享Image到Hub服务或者自服务的Registry服务。

search

使用方法:

 

使用说明:

通过关键字搜索分享的Image。

3. 总结

通过以上Docker命令行的详细解释,可以强化对Docker命令的全面理解。考虑到Docker命令行的发展变化非常快,读者可以参考官方的命令行解释文档更新相应的命令行解释。另外,通过以上Docker命令行的分析,可以知道Docker命令行架构设计的特点在于客户端和服务端的运行文件是同一个文件,内部实现代码应该是重用的设计。笔者希望开发者在开发类似的命令行应用时参考这样的设计,减少前后台容错的复杂度。

 

from:https://blog.csdn.net/adparking/article/details/118851906