二、Docker指令集 #由于有一部分指令用到了dockerfile,所以不懂的话,请首先查看dockerfile配置指南一节 attach: docker attach 允许进入或者直接操作容器 语法:docker attach [OPTIONS] CONTAINER 配置指令: --help 查看帮助 --no-stdin=false --sig-proxy=true 用法示例: [root@localhost ~]# ID=$(docker run -d centos /usr/bin/top -b) [root@localhost ~]# docker attach $ID top - 06:10:43 up 66 days, 5:00, 0 users, load average: 0.27, 0.08, 0.10 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 3.7 us, 3.7 sy, 0.0 ni, 88.0 id, 4.7 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 16123532 total, 1002016 free, 9646844 used, 5474672 buff/cache KiB Swap: 32766968 total, 32103200 free, 663768 used. 6010068 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 51692 1904 1456 R 0.0 0.0 0:00.01 top build: 从指定路径(URL,dockerfile)创建一个新的镜像 语法:docker build [OPTIONS] PATH | URL | - 配置指令: -f --file=PATH/Dockerfile #指定dockerfile文件路径,dockerfile语法和内容,请参考Docker配置指南(三):Dockerfile --rm=true|false #默认为true,在构建完成后,删除依赖中间容器 --force-rm=true|false #默认为false,如果为true,构建无论成功都会强制删除中间容器 --no-cache=true|false #创建镜像时默认不使用缓存 --help #查看帮助 --pull=true|false #默认为false,为true则总是试图获取最新的镜像 -q --quiet=true|false #默认为false,为true时不显示详细输出 -t, --tag="" #构建成功后,新的镜像会携带此标记 -m, --memory=MEMORY #指定使用物理内存上限 --memory-swap=MEMORY-SWAP #含swap的总内存上限,-1不使用swap -c, --cpu-shares=0 #配置docker容器cpu的权重,默认为0,权重相同。有关资源分配方面的资料,感兴趣的可以自己查看docker的资源分配原理(基于Cgroup)。 --cpu-period=0 #指定容器对CPU的使用要在多长时间内做一次重新分配,和--cpu-quota一样,是一个完全公平的调度方法 --cpu-quota=0 #指定在这个周期内,最多可以有多少时间用来跑这个容器,同--cpu-shares不同,这种配置比较固定,容器使用的CPU资源是不会超过这个值的,没有弹性。 --cpuset-cpus=CPUSET-CPUS #允许使用的CPU编号(0-3或0,1两种写法) --cpuset-mems=CPUSET-MEMS #只在NUMA系统有效 --cgroup-parent=CGROUP-PARENT #使用已创建的容器cgroup路径,如果不存在,则会新创建 用法示例:docker build Dockerfile_PATH | URL commit: 提交已改动的镜像 语法:[-a|--author[=AUTHOR]] [--help] [-c|--change[= []]] [-m|--message[=MESSAGE]] [-p|--pause*[=*true]] CONTAINER [REPOSITORY[:TAG]] 配置指令: --help #查看帮助 -a --author="" #作者 -c --change=[] #在提交镜像时使用指定的dockerfile指令,支持类型有:CMD|ENTRYPOINT|ENV|EXPOSE|ONBUILD|USER|VOLUME|WORKDIR -m --message="" #提交说明信息 -p --pause==true|false #默认为true,在commit的时候暂停服务 用法示例: docker commit -a '[email protected]' -m 'some massages' CONTAINER_ID REPOSITORY:TAG cp: 将文件或目录从容器内拷贝到宿主机,使用"-"可以将数据输出为一个tar文件 语法:docker cp [--help] CONTAINER:PATH HOSTDIR|- 配置指令: --help #查看帮助 用法示例: docker cp CONTAINER_ID:PATH HOSTDIRPATH create: 创建一个新的容器 语法: docker create [-a|--attach[=[]]] [--add-host[=[]]] [--blkio-weight[=[BLKIO-WEIGHT]]] [-c|--cpu-shares[=0]] [--cap-add[=[]]] [--cap-drop[=[]]] [--cidfile[=CIDFILE]] [--cpu-period[=0]] [--cpuset-cpus[=CPUSET-CPUS]] [--cpuset-mems[=CPUSET-MEMS]] [--cpu-quota[=0]] [--device[=[]]] [--dns-search[=[]]] [--dns[=[]]] [-e|--env[=[]]] [--entry- point[=ENTRYPOINT]] [--env-file[=[]]] [--expose[=[]]] [-h|--hostname[=HOSTNAME]] [--help] [-i|--interactive[=false]] [--ipc[=IPC]] [-l|--label[=[]]] [--label-file[=[]]] [--link[=[]]] [--lxc-conf[=[]]] [--log-driver[=[]]] [--log-opt[=[]]] [-m|--memory[=MEMORY]] [--memory-swap[=MEMORY-SWAP]] [--mac-address[=MAC-ADDRESS]] [--name[=NAME]] [--net[="bridge"]] [--oom-kill-disable[=false]] [-P|--publish-all[=false]] [-p|--publish[=[]]] [--pid[=[]]] [--uts[=[]]] [--privileged[=false]] [--read-only[=false]] [--restart[=RESTART]] [--security-opt[=[]]] [-t|--tty[=false]] [-u|--user[=USER]] [-v|--volume[=[]]] [--volumes-from[=[]]] [-w|--workdir[=WORKDIR]] [--cgroup-parent[=CGROUP-PATH]] IMAGE [COMMAND] [ARG...] 配置指令: -a, --attach=[] #附加到stdin,stdout或stderr --add-host=[] #自定义一个主机到IP的映射 --blkio-weight=0 #block IO权重,可配置范围是10-1000 -c, --cpu-shares=0 #CPU相对权重 --cap-add=[] #添加Linux capabilities --cap-drop=[] #去除linux capabilities --cidfile="" #将container id写入到文件 --cgroup-parent --cpu-peroid=0 --cpuset-cpus="" --cpuset-mems="" -cpu-quota=0 -m, --memory="" --memory-swap="" #这几个选项在build指令中已经有介绍 --device=[] #为容器添加一个主机设备 (e.g. --device=/dev/sdc:/dev/xvdc:rwm) -dns-search=[] #设置自定义DNS搜索域 (如果不想使用此功能,使用此配置: --dns-search=. ) --dns=[] #设置DNS服务器 -e, --env=[] #设置环境变量 --entrypoint="" #请参考Docker配置指南(三):Dockerfile --env-file=[] #在以行分隔的文件中读取变量 --expose=[] #暴露一个或范围内的端口 -h, --hostname="" #设置容器的主机名 --help #查看帮助 -i, --interactive=true|false #默认为false,即使没有连接也保持标准输入开启 --ipc="" #默认是为容器创建一个私有 的命令空间; ’container:<name|id>’: 复用其它容器的共享内存、消息队列和信号 ’host’: 在容器内使用主机的共享内存、消息队列和信号;注意:主机模式将会给容器完全访问共享内存的权限,因此被认为是不安全的 -l, --label=[] #添加一个键值对格式的标签 --label-file=[] #从一个文件中读取标签,每一个EOL分隔一个标签 --link=[] #以别名或者ID的方式添加一个到其它容器的链接 --lxc-conf=[] #lxc自定义配置,如--lxc-conf=[lxc.cgroup.cpuset.cpus = 0,1] --log-driver="|json-file|syslog|journald|none" #设置日志驱动,默认为json-file,docker logs命令只支持json-file日志驱动 --log-opt=[] #设置日志配置选项 --mac-address="" #设置MAC地址 --name="" #为容器分配一个名称 --net="bridge" #为容器配置网络模式,主要有以下几种模式: ’bridge’: 为容器创建一个新的桥接网络 ’none’: 不为容器配置网络 ’container:<name|id>’: 复用其它容器的网络 ’host’: 在容器内使用主机的网络堆栈,同样,这种主机模式将会给容器完全访问本地系统服务的权限,因此被认为是不安全的 --oom-kill-disable=true|false #一种linux的内存优化机制,当申请内存后使用时,发现空间不足,则会触发这种机制,大致以先进先出和其存活时长为判断依据,将这部分内存释放后再分配 -P, --publish-all=true|false #默认为false,发布所有端口暴露到主机上网络接口的随机端口 -p, --publish=[] #发布一个或多个容器的端口到主机上,格式为:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort --pid=host #设置容器PID模式,host是指在容器内使用主机的PID命名空间 --uts=host #设置容器UTS模式,host是指在容器内使用主机的UTS命名空间 --privileged=true|false #默认为false,给予此容器扩展权限 --read-only=true|false #默认为false,给予此容器只读权限 --restart="no" #当容器退出时重启策略(no, on-failure[:max-retry], always) --security-opt=[] #安全配置 -t, --tty=true|false #默认为false,分配一个伪tty -u, --user="" #用户名或是用户ID -v, --volume=[] #绑定半挂载一个卷(例如, from the host: -v /host:/container, from Docker: -v /container) --volumes-from=[] #从指定的容器挂载卷 -w, --workdir="" #指定容器工作目录 diff: 检查容器上文件系统的变化 语法:docker diff [--help] CONTAINER events: 从服务器获取实时消息 语法:docker events [--help] [-f|--filter[=[]]] [--since[=SINCE]] [--until[=UNTIL]] 配置指令: --help #查看帮助 -f --filter=[] #指定过滤条件 --since="" #指定开始时间戳 --until="" #指定结束时间戳 exec: 在一个运行中的容器内执行命令 语法:docker exec [-d|--detach[=false]] [--help] [-i|--interactive[=false]] [-t|--tty[=false]] [-u|--user[=USER]] CONTAINER COMMAND [ARG...] 配置指令: -d --detach=true|false #默认false,分离模式,在后台执行命令 --help #查看帮助 -i, -interactive=true|false #默认为false,即使没有连接也保持标准输入开启 -t, --tty=true|false #默认为false,分配一个伪tty -u, --user="" #设置用户名或UID,也可以扩展配置GROUP或者GID,类似于:user:group history: 查看镜像历史(创建,修改) 语法:docker history [--help] [--no-trunc[=false]] [-q|--quiet[=false]] IMAGE 配置指令: --help #查看帮助 -H --human=true|false #默认为true,人性化显示 --no-trunc=true|false #默认为false,不要截断输出,配置为true会显示完整的镜像信息 -q --quiet=true|false #默认为false,配置为true时只显示ID信息 images: 列出所有镜像 语法:docker images [--help] [-a|--all[=false]] [--digests[=false]] [-f|--filter[=[]]] [--no-trunc[=false]] [-q|--quiet[=false]] [REPOSITORY] 配置指令: -a, --all=true|false #默认为false,默认只显示中间层镜像 --digests=true|false #默认为false,为true时显示摘要信息 -f --filter=[] #过滤输出条件,比如可以根据标签查找 --help #查看帮助 --no-trunc=true|false #默认为false,不要截断输出,配置为true会显示完整的镜像信息 -q --quiet=true|false #默认为false,配置为true时只显示ID信息 import: 从一个tar包创建镜像 语法:docker import [-c|--change[= []]] [--help**] URL|- [REPOSITORY[:TAG]] 配置指令: -c=[] #指定dockerfile配置指令,支持类型有"CMD|ENTRYPOINT|ENV|EXPOSE|ONBUILD|USER|VOLUME|WORKDIR" 用法示例: docker import http://example.com/exampleimage.tgz example/imagerepo #从一个远程地址导入 cat exampleimage.tgz | docker import - example/imagelocal #从一个本地文件导入 tar -c . | docker import -c="ENV DEBUG true" exampleimagedir #从一个本地目录导入,并传入dockerfile指令 info: 输出系统侧信息 语法:docker info [--help] inspect: 输出更底层的docker镜像或容器信息,返回的是一个json格式的字符串 语法:docker inspect [--help] [-f|--format[=FORMAT]] CONTAINER|IMAGE [CONTAINER|IMAGE...] 配置指令: --help #查看帮助 -f, --format="" #可以根据返回内容进行过滤,不过需要使用go语言格式 kill: 使用kill标记杀掉一个正在运行的容器,默认为SIGKILL 语法:docker kill [--help] [-s|--signal[="KILL"]] CONTAINER [CONTAINER...] 配置指令: --help #查看帮助 -s, --signal="KILL" #使用指定kill信号 load: 加载一个打包好的镜像 语法:docker load [--help] [-i|--input[=INPUT]] --help #查看帮助 -i, --input="" #从一个tar包中的档案信息读取 login: 注册或登录到一个docker仓库/注册中心 语法:docker login [-e|--email[=EMAIL]] [--help] [-p|--password[=PASSWORD]] [-u|--username[=USERNAME]] [SERVER] 配置指令: -e, --email="" #邮箱 --help #查看帮助 -p, --password="" #用户名 -u, --username="" #密码 logout: 从一个docker仓库/注册中心登出 语法:docker logout [SERVER] logs: 取出一个容器的日志 语法:docker logs [-f|--follow[=false]] [--help] [--since[=SINCE]] [-t|--timestamps[=false]] [--tail[="all"]] CONTAINER 配置指令: --help #查看帮助 -f, --follow=true|false #默认为false,跟踪日志输出 --since="" #显示从指定时间戳开始的日志 -t, --timestamps=true|false #默认为false,显示时间戳 --tail="all" #在日志尾部显示行数,默认为所有日志