二、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 'user@domain.com' -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"    #在日志尾部显示行数,默认为所有日志