一篇文章学会Docker命令小结

目录

  • 简介
  • 镜像仓库
    • login
    • pull
    • push
    • search
  • 本地镜像管理
    • images
    • rmi
    • tag
    • build
    • history
    • save
    • load
    • import
  • 容器操作
    • ps
    • inspect
    • top
    • attach
    • events
    • logs
    • wait
    • export
    • port
    • stats
  • 容器生命周期管理
    • run
    • start/stop/restart
    • kill
    • rm
    • pause/unpause
    • create
    • exec
    • update
  • 容器rootfs命令
    • commit
    • cp
    • diff
    • rename
  • docker管理命令
    • Docker选项

      简介Docker的命令分为使用命令和管理命令 , 而本文对Docker的使用命令和管理命令进行了汇总和样例提示 , 以便于他人学习和本人回顾使用 。
      Docker不仅提供了在各个环节下使用的命令 , 还提供了DockerAPI供我们使用Http来和Docker进行交互 , 从而开发我们自己的Docker 。
      由于命令太多 , 下面给出一个大致的清单供大家对所有命令有一个初步了解 , 然后就是哪里不会点哪里 。
      管理命令: container 管理容器 image管理镜像 network 管理网络 node管理Swarm节点 plugin 管理插件 secret 管理Docker secrets service 管理服务 stack管理Docker stacks swarm管理Swarm集群 system 查看系统信息 volume 管理卷如:docker container ls 显示所有容器 普通命令:// 开发应该熟练掌握的: images 查看镜像列表 rmi删除镜像 save将指定镜像保存成 tar 归档文件 load从存档或者STDIN加载镜像 build从一个DockerFile构建镜像 commit 从容器创建一个镜像create 创建一个容器 run创建一个新的容器并运行一个命令 rename 重命名容器 start启动容器 stop停止容器 restart 重启容器 rm删除容器 logs获取一个容器的日志 exec在正在运行的容器中运行命令 cp从容器和主机文件系统之间拷贝文件ps查看容器列表// 运维应该熟练掌握的:login登陆docker镜像仓库 logout 退出docker镜像仓库 search 从Docker Hub搜索镜像 pull从镜像仓库拉取镜像 push将本地的镜像上传到镜像仓库,要先登陆到镜像仓库 tag标记本地镜像 , 将其归入某一仓库 export 将容器的文件系统导出为tar存档 import 从归档文件中创建镜像info显示系统范围的信息 version 显示Docker的版本信息 stats显示(实时)容器资源使用情况的统计信息 inspect 显示Docker对象的低级信息(查看对象详情) diff显示容器文件系统上的更改(查看容器变化) events 显示从服务器获取实时事件(可查看docker的改动) port显示端口映射或容器的特定映射列表(端口查看) top显示一个容器中运行的进程(查看进程) history 显示镜像的历史记录attach 进入一个运行的容器 pause暂停一个或多个容器中的所有进程 unpause 恢复容器中所有的进程 killkill运行中的容器 wait阻塞直到容器停止 , 然后打印退出代码update 更新容器配置
      镜像仓库
      logindockerlogin : 登陆到一个Docker镜像仓库 , 如果未指定镜像仓库地址 , 默认为官方仓库 Docker Hub
      docker logout : 登出一个Docker镜像仓库 , 如果未指定镜像仓库地址 , 默认为官方仓库 Docker Hub
      语法:
      docker login/logout (-$) [SERVER]
      -u登陆的用户名
      -p登陆的密码
      实例:
      登陆到Docker Hub
      docker login -u 用户名 -p 密码登出Docker Hub
      docker logout
      pulldockerpull : 从镜像仓库中拉取或者更新指定镜像
      语法:
      docker pull (-$) NAME[:TAG|@DIGEST]
      -a,all拉取所有 tagged 镜像
      --disable-content-trust忽略镜像的校验,默认开启
      实例:
      从Docker Hub下载java最新版镜像 。
      docker pull java从Docker Hub下载REPOSITORY为java的所有镜像 。
      docker pull -a java
      pushdocker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
      语法:
      docker push (-$) NAME[:TAG]
      --disable-content-trust忽略镜像的校验,默认开启
      实例:
      上传本地镜像myapache:v1到镜像仓库中
      docker push myapache:v1推送镜像库到私有源
      docker push 192.168.0.100:5000/ubuntu
      searchdocker search : 从Docker Hub查找镜像
      语法:
      docker search (-$) TERM
      -automated只列出 automated build类型的镜像;
      --no-trunc显示完整的镜像描述;
      -s列出收藏数不小于指定值的镜像 。
      实例:
      从Docker Hub查找所有镜像名包含java , 并且收藏数大于10的镜像
      docker search -s 10 javarunoob@runoob:~$ docker search -s 10 javaNAMEDESCRIPTIONSTARS OFFICIAL AUTOMATEDjavaJava is a concurrent, class-based... 1037 [OK] anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC ... 115[OK]develar/java46[OK]isuper/java-oracle This repository contains all java... 38[OK]lwieske/java-8 Oracle Java 8 Container - Full + ... 27[OK]nimmis/java-centos This is docker images of CentOS 7... 13[OK]
      本地镜像管理
      imagesdocker images : 列出本地镜像 。
      语法:
      docker images (-$) [REPOSITORY[:TAG]]
      -a列出本地所有的镜像(含中间映像层 , 默认情况下 , 过滤掉中间映像层)
      --digests显示镜像的摘要信息
      -f显示满足条件的镜像
      --format指定返回值的模板文件
      --no-trunc显示完整的镜像信息
      -q只显示镜像ID 。
      实例:
      查询出无用的镜象
      docker images -f dangling=true列出本地镜像中REPOSITORY为alpine的镜像列表 。
      docker images alpine[root@master ~]# docker images alpineREPOSITORYTAGIMAGE IDCREATEDSIZEalpine3.9cdf98d1859c1 3 months ago 5.53MBalpinelatestcdf98d1859c1 3 months ago 5.53MB
      rmidocker rmi : 删除本地一个或多少镜像 。
      语法:
      docker rmi (-$)
      -f,--force强制删除镜像
      --no-prune不移除该镜像的过程镜像 , 默认移除
      实例:
      删除所有镜像
      docker rmi $(docker images -q)强制删除镜像名称中包含"doss-api"的镜像
      docker rmi --force $(docker images | grep doss-api | awk '{print $3}')批量删除无用镜象(三种方式都可以 , 想强制删除可在rmi后加-f)
      docker rmi $(docker images | grep "^" | awk "{print $3}")docker images | grep none | awk '{print $3}' | xargs docker rmidocker rmi $( docker images -f dangling=true)
      tagdocker tag : 标记本地镜像 , 将其归入某一仓库 。
      语法:
      docker tag (-$) IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]实例:
      将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像 。
      docker tag ubuntu:15.10 runoob/ubuntu:v3root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3root@runoob:~# docker images runoob/ubuntu:v3REPOSITORYTAGIMAGE IDCREATEDSIZErunoob/ubuntu v34e3b13c8a266 3 months ago 136.3 MB
      builddocker build 命令用于使用 Dockerfile 创建镜像 。
      语法:
      docker build (-$) PATH | URL | -
      --build-arg=[]设置镜像创建时的变量
      --cpu-shares设置 cpu 使用权重
      --cpu-period限制 CPU CFS周期
      --cpu-quota限制 CPU CFS配额
      --cpuset-cpus指定使用的CPU id
      --cpuset-mems指定使用的内存 id
      --disable-content-trust忽略校验 , 默认开启
      -f指定要使用的Dockerfile路径
      --force-rm设置镜像过程中删除中间容器
      --isolation使用容器隔离技术
      --label=[]设置镜像使用的元数据
      -m设置内存最大值
      --memory-swap设置Swap的最大值为内存+swap , "-1"表示不限swap
      --no-cache创建镜像的过程不使用缓存
      --pull尝试去更新镜像的新版本
      --quiet, -q安静模式 , 成功后只输出镜像 ID
      --rm设置镜像成功后删除中间容器
      --shm-size设置/dev/shm的大小 , 默认值是64M
      --ulimitUlimit配置 。
      --tag, -t镜像的名字及标签 , 通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签 。
      --network默认 default 。在构建期间设置RUN指令的网络模式
      实例:
      使用当前目录的 Dockerfile 创建镜像 , 标签为 runoob/ubuntu:v1 。
      docker build -t runoob/ubuntu:v1 .使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像 。
      docker build github.com/creack/docker-firefox也可以通过 -f Dockerfile 文件的位置:
      docker build -f /path/to/a/Dockerfile .在 Docker 守护进程执行 Dockerfile 中的指令前 , 首先会对 Dockerfile 进行语法检查 , 有语法错误时会返回:
      【一篇文章学会Docker命令小结】docker build -t test/myapp . Sending build context to Docker daemon 2.048 kB Error response from daemon: Unknown instruction: RUNCMD
      historydocker history : 查看指定镜像的创建历史 。
      语法:
      docker history (-$) IMAGE
      -H以可读的格式打印镜像大小和日期 , 默认为true;
      --no-trunc显示完整的提交记录;
      -q仅列出提交记录ID 。

      savedocker save : 将指定镜像保存成 tar 归档文件 。
      语法:
      docker save (-$) IMAGE [IMAGE...]
      -o输出到的文件 。
      实例:
      导出镜像
      docker save -o /root/mytomcat7.tar.gz docker.io/tomcat:7.0.77-jre7或
      docker save docker.io/tomcat:7.0.77-jre7 >/root/mytomcat7.tar.gz
      loaddocker load : 导入使用 docker save 命令导出的镜像 。
      语法:
      docker load (-$)
      -i指定导出的文件 。
      -q精简输出信息 。
      实例
      导入镜像
      docker load -i ubuntu.tardocker load < ubuntu.tardocker load < /root/mytomcat7.tar.gz
      importdocker import : 从归档文件中创建镜像 。
      语法:
      docker import (-$) file|URL|- [REPOSITORY[:TAG]]
      -c,--change将Dockerfile指令应用于创建的映像
      -m,--message为导入的镜像设置说明信息
      --platform如果服务器具有多平台功能 , 则设置平台
      实例
      从镜像归档文件my_ubuntu_v3.tar创建镜像 , 命名为runoob/ubuntu:v4
      runoob@runoob:~$ docker import my_ubuntu_v3.tar runoob/ubuntu:v4 sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39runoob@runoob:~$ docker images runoob/ubuntu:v4REPOSITORYTAGIMAGE IDCREATEDSIZErunoob/ubuntu v463ce4a6d6bc3 20 seconds ago 142.1 MB
      容器操作
      psdockerps : 列出容器
      语法:
      docker ps (-$)
      -a, --all显示所有容器(默认显示正在运行)
      -n显示最后创建的n个容器(包括所有状态)(默认值-1)
      示例:docker ps -n2
      -l,--latest显示最新创建的容器(包括所有状态)
      -q, --quiet只显示数字id
      -s, --size显示总文件大小
      --no-trunc不截断输出
      -f, --filter根据提供的条件过滤输出
      过滤条件如下:
      Filter | Description
      ---|---
      id| 容器的ID
      name| 容器的Name
      label| 表示键或键值对的任意字符串 。表示为=
      exited| 表示容器退出代码的整数 。只有对所有人有用 。
      status| created,restarting,running,removing,paused,exited,dead之一
      ancestor| 筛选指定镜像的容器 , 例如[:],, or
      before or since | 筛选在给定容器ID或名称之前或之后创建的容器
      volume| 运行已挂载给定卷或绑定挂载的容器的筛选器 。
      network | 过滤器运行连接到给定网络的容器 。
      publish or expose | 筛选发布或公开给定端口的容器,例如[/] or /[]
      health| 根据容器的健康检查状态过滤容器 , 例如starting, healthy, unhealthy or none.
      isolation | 仅Windows守护进程 , 例如default, process, or hyperv.
      is-task | 筛选服务的“任务”容器 。布尔选项(true or false)
      示例:
      docker ps -f name=^'modality'
      docker ps --filter name=nginx
      docker ps -a --filter exited=0
      docker ps --filter status=running
      docker ps --filter expose=3306
      --format使用Go模板漂亮地打印容器
      过滤条件如下:
      Placeholder | Description
      ---|---
      .ID| 容器的ID
      .Image| 镜像的ID
      .Command| 引用命令
      .CreatedAt| 创建容器的时间
      .RunningFor | 自容器启动以来的运行时长
      .Ports| 暴露的端口
      .Status| 容器状态
      .Size| 容器的磁盘大小
      .Names| 容器的名称
      .Labels| 分配给容器的所有标签
      .Label| 此容器的特定标签的值,例如`{{.Label "com.docker.swarm.cpu"}}`
      .Mounts| 容器挂载的卷
      .Networks| 容器所用的网络名称
      示例:
      docker ps --format "{{.ID}}: {{.Names}}: {{.Command}}"常用监控命令:
      查询最近5个容器
      docker ps -a -n=5监控容器数量
      docker ps -a -q | wc -l正在运行的容器的数量
      docker ps -q | wc -l非运行状态的容器的数量
      docker ps -a | grep -v 'Up ' | grep -v'CONTAINER' | wc -l
      inspectdocker inspect : 获取容器/镜像的元数据 。
      语法:
      docker inspect (-$) NAME|ID [NAME|ID...]
      -f使用给定的Go模板格式化输出
      -s如果类型是容器 , 则显示总文件大小
      --type为指定类型返回JSON 。
      实例:
      查看容器重启次数
      docker inspect -f "{{ .RestartCount }}" name查看容器最后一次的启动时间
      docker inspect -f "{{ .State.StartedAt }}" name列出所有端口绑定
      docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID获取正在运行的容器mymysql的 IP
      runoob@runoob:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql172.17.0.3注:更多示例可点击上方官网链接查看
      topdocker top :查看容器中运行的进程信息 , 支持 ps 命令参数 。
      语法:
      docker top CONTAINER [ps OPTIONS]容器运行时不一定有/bin/bash终端来交互执行top命令 , 而且容器还不一定有top命令 , 可以使用docker top来实现查看container中正在运行的进程 。
      实例:
      查看容器mymysql的进程信息 。
      runoob@runoob:~/mysql$ docker top mymysqlUID PID PPID CSTIME TTY TIMECMD999 40347 40331 1800:58 ? 00:00:02 mysqld查看所有运行容器的进程信息 。
      for i in docker ps |grep Up|awk '{print $1}';do echo&&docker top $i; done

      attachdocker attach :连接到正在运行中的容器,并将本地标准输入、输出和错误流附加到正在运行的容器中(个人理解 , 既实现链接后使用命令控制容器)
      语法:
      docker attach (-$) CONTAINER
      --detach-keys覆盖用于分离容器的键序列
      --no-stdin不附加STDIN
      --sig-proxy代理所有接收到的进程信号(默认为true)
      要attach上去的容器必须正在运行 , 可以同时连接上同一个container来共享屏幕(与screen命令的attach类似) 。
      官方文档中说attach后可以通过CTRL-C来detach , 但实际上经过我的测试 , 如果container当前在运行bash , CTRL-C自然是当前行的输入 , 没有退出;如果container当前正在前台运行进程 , 如输出nginx的access.log日志 , CTRL-C不仅会导致退出容器 , 而且还stop了 。这不是我们想要的 , detach的意思按理应该是脱离容器终端 , 但容器依然运行 。好在attach是可以带上--sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器 。
      实例:
      容器mynginx将访问日志指到标准输出 , 连接到容器查看访问信息 。
      runoob@runoob:~$ docker attach --sig-proxy=false mynginx192.168.239.1 - - [10/Jul/2016:16:54:26 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"注:(使用exit退出后容器也跟着停止运行), 更多示例和详细讲解可点击上方官网链接或是用--help命令查看
      eventsdocker events : 从服务器获取实时事件
      语法:
      docker events (-$)
      -f,--filter根据条件过滤事件
      --format使用给定的Go模板格式化输出
      --since从指定的时间戳后显示所有事件
      --until流水时间显示到指定的时间为止
      实例:
      显示docker 2016年7月1日后的所有事件 。
      docker events --since="1467302400"runoob@runoob:~/mysql$ docker events --since="1467302400"2016-07-08T19:44:54.501277677+08:00 network connect 66f958fd13dc4314ad20034e576d5c5eba72e0849dcc38ad9e8436314a4149d4 (container=b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64, name=bridge, type=bridge)2016-07-08T19:44:54.723876221+08:00 container start b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64 (image=nginx:latest, name=elegant_albattani)显示docker 镜像为mysql:5.6 2016年7月1日后的相关事件 。
      docker events -f "image"="mysql:5.6" --since="1467302400"runoob@runoob:~/mysql$ docker events -f "image"="mysql:5.6" --since="1467302400" 2016-07-11T00:38:53.975174837+08:00 container start 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)2016-07-11T00:51:17.022572452+08:00 container kill 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql, signal=9)注:更多示例和详细讲解可点击上方官网链接或是用--help命令查看
      logsdocker logs : 获取容器的日志
      docker logs (-$) name
      --details显示提供给日志的额外细节
      -f,--follow跟踪日志输出
      --since显示从时间戳(例如2013-01-02T13:23:37)或相对(例如42分钟42秒)之后的日志
      -t , --timestamps显示时间戳 类似 tail -f
      --tail在日志的末尾输出指定行数日志(默认所有日志)
      --until显示在时间戳(例如2013-01-02T13:23:37)或相对(例如42分钟42秒)之前的日志
      实例:
      查看容器mynginx从2016年7月1日后的最新10条日志
      docker logs --since="2016-07-01" --tail=10 mynginx实时查看docker容器日志
      docker logs -f -t --tail 行数 容器名实时查看docker容器名为s12的最后10行日志
      docker logs -f -t --tail 10 s12注:更多示例和详细讲解可点击上方官网链接或是用--help命令查看
      waitdocker wait : 阻塞运行直到容器停止 , 然后打印出它的退出代码 。
      语法:
      docker wait (-$) CONTAINER [CONTAINER...]实例
      docker wait CONTAINER
      exportdocker export :将文件系统作为一个tar归档文件导出到STDOUT
      语法:
      docker export [OPTIONS] CONTAINER
      -o,--output将输入内容写到文件 。
      实例:
      实例1:将容器名为red_panda的容器保存为tar文件
      docker export red_panda > latest.tar或者
      docker export --output="latest.tar" red_panda实例2:将id为a404c6c174a2的容器按日期保存为tar文件 。
      runoob@runoob:~$ docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2runoob@runoob:~$ ls mysql-`date +%Y%m%d`.tarmysql-20160711.tar
      portdocker port :列出指定的容器的端口映射 , 或者查找将PRIVATE_PORT NAT到面向公众的端口 。
      语法:
      docker port CONTAINER [PRIVATE_PORT[/PROTO]]实例:
      查看容器ID为cbe08f2a4406的端口映射情况 。
      runoob@runoob:~$ docker port cbe08f2a44063306/tcp -> 0.0.0.0:13306
      statsdocker stats : 显示容器资源使用情况统计信息的实时流
      语法:
      docker stats (-$) [CONTAINER...]
      -a,--all显示所有容器(默认显示刚刚运行)
      --format使用Go模板的漂亮打印图像
      --no-stream禁用流式统计信息并仅提取第一个结果
      --no-trunc不要截断输出
      实例:
      运行docker stats在针对Linux后台程序运行的所有容器 。
      $ docker statsCONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDSb95a83497c91awesome_brattain0.28%5.629MiB / 1.952GiB 0.28%916B / 0B147kB / 0B967b2525d8ad1foobar0.00%1.727MiB / 1.952GiB 0.09%2.48kB / 0B4.11MB / 0B2e5c383697914test-1951.1.kay7x1lh1twk9c0oig50sd5tr 0.00%196KiB / 1.952GiB0.01%71.2kB / 0B770kB / 0B14bda148efbc0random.1.vnc8on831idyr42slu578u3cr0.00%1.672MiB / 1.952GiB 0.08% 如果未使用指定格式字符串--format , 则会显示以下列 。
      列名描述CONTAINER ID 和 Name容器的ID和名称CPU % 和 MEM %容器正在使用的主机CPU和内存的百分比MEM USAGE / LIMIT容器正在使用的总内存 , 以及允许使用的内存总量NET I/O容器通过其网络接口发送和接收的数据量BLOCK I/O容器从主机上的块设备读取和写入的数据量PIDs容器创建的进程或线程数
      注:更多示例可点击上方官网链接查看
      容器生命周期管理
      rundocker run :创建一个新的容器并运行一个命令
      注:由于该命令的选项高达99项 , 所以本节只选用了常用的一些选项 , 详情可参见官网
      语法:
      docker run (-$) IMAGE [COMMAND] [ARG...]
      -a, --attach=[]指定标准输入输出内容类型 , 可选 STDIN/STDOUT/STDERR 三项 , 用于登录容器(必须是以docker run -d启动的容器)
      -d后台运行容器 , 并返回容器ID , 默认为false
      -i打开STDIN , 以交互模式运行容器 , 通常与 -t 同时使用 , 默认为false
      -P, --publish-all=false 随机端口映射 , 容器内部端口随机映射到主机的各端口
      -p, --publish=[]指定容器暴露的端口 , 格式为:主机(宿主)端口:容器端口
      -t,--tty为容器重新分配一个伪输入终端TTY , 从而可以支持终端登录 , 通常与 -i 同时使用默认为false
      --name=""指定容器名字 , links特性需要使用名字
      -u, --user=""指定容器的用户
      -w指定容器的工作目录
      -c设置容器CPU权重 , 在CPU共享场景使用
      -e, --env=[]指定环境变量 , 容器中可以使用该环境变量
      -m指定容器的内存上限
      -h指定容器的主机名
      -v, --volume=[]给容器挂载存储卷 , 挂载到容器的某个目录
      --volumes-from=[]给容器挂载其他容器上的卷 , 挂载到容器的某个目录
      --cap-add=[]添加权限
      --cap-drop=[]删除权限
      --cidfile=""运行容器后 , 在指定文件中写入容器PID值 , 监控系统用法
      --cpuset=""设置容器可使用哪些CPU , 此参数可以用来容器独占CPU
      --device=[]添加主机设备给容器 , 相当于设备直通
      --dns=[]指定容器的dns服务器
      --dns-search=[]指定容器的dns搜索域名 , 写入到容器/etc/resolv.conf文件
      --entrypoint=""覆盖image的入口点
      --env-file=[]指定环境变量文件 , 文件格式为每行一个环境变量
      --expose=[]开放一个端口或一组端口 , 即修改镜像的暴露端口
      --link=[]指定容器间的关联 , 使其链接到另一个容器 , 从而使用其他容器的IP、env等信息
      --lxc-conf=[]指定容器的配置文件 , 只有在指定--exec-driver=lxc时使用
      --net="bridge"指定容器的网络连接类型:
      bridge 使用docker daemon指定的网桥
      host//容器使用主机的网络
      container:NAME_or_ID >//使用其他容器的网路共享IP和PORT等网络资源
      none 容器使用自己的网络(类似--net=bridge)
      --privileged=false指定容器是否为特权容器 , 特权容器拥有所有的权限
      --restart="no"指定容器停止后的重启策略:
      no:容器退出时不重启(默认策略)
      on-failure:容器故障退出(返回值非零)时重启
      on-failure:3 , 在容器非正常退出时重启容器 , 最多重启3次
      always:容器退出时总是重启
      unless-stopped: 在容器退出时总是重启容器 , 但是不考虑在Docker守护进程启动时就已经停止了的容器
      --rm=false指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
      --sig-proxy=true设置由代理接受并处理信号 , SIGCHLD , SIGSTOP和SIGKILL不代
      扩展说明: 容器的退出状态码
      • docker run的退出状态码如下:
      • 0 , 表示正常退出
        • 非0 , 表示异常退出(退出状态码采用chroot标准) ?125 , Docker守护进程本身的错误
        • 126 , 容器启动后 , 要执行的默认命令无法调用
        • 127 , 容器启动后 , 要执行的默认命令不存在
        • 其他命令状态码 , 容器启动后正常执行命令 , 退出命令时该命令的返回状态码作为容器的退出状态码
      实例:
      使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx 。
      docker run --name mynginx -d nginx:latest使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口 。
      docker run -P -d nginx:latest使用镜像 nginx:latest , 以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data 。
      docker run -p 80:80 -v /data:/data -d nginx:latest绑定容器的 8080 端口 , 并将其映射到本地主机 127.0.0.1 的 80 端口上 。
      docker run -p 127.0.0.1:80:8080/tcp ubuntu bash使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令 。
      runoob@runoob:~$ docker run -it nginx:latest /bin/bashroot@b8573233d675:/#
      start/stop/restartdocker start :启动一个或多个已经被停止的容器
      docker stop :停止一个运行中的容器
      docker restart :重启容器
      语法:
      docker start (-$) CONTAINER [CONTAINER...]
      --attach , -a连接STDOUT / STDERR并转发信号
      --checkpoint从此检查点恢复
      --checkpoint-dir使用自定义检查点存储目录
      --detach-keys覆盖用于分离容器的键序列
      --interactive , -i附上容器的STDIN
      docker stop (-$) CONTAINER [CONTAINER...]
      --time , -t在杀死之前等待停止的秒数,默认10秒
      docker restart (-$) CONTAINER [CONTAINER...]
      --time , -t在杀死之前等待停止的秒数,默认10秒

      killdocker kill :杀掉一个运行中的容器 。
      语法:
      docker kill (-$) CONTAINER [CONTAINER...]
      -s,--signal向容器发送一个信号, 强制中断 -s代表指定SIGINT信号类型 , 默认“kill”
      实例:
      杀掉运行中的容器mynginx
      runoob@runoob:~$ docker kill -s KILL mynginxmynginx杀死所有正在运行的容器
      docker kill $( docker ps -p -a )注:此小节的-s牵扯到Linux的信号 , 如需了解详情 , 可点击此处查看
      rmdocker rm :删除一个或多少容器
      语法:
      docker rm (-$) CONTAINER [CONTAINER...]
      -f--force=false通过SIGKILL信号强制删除一个运行中的容器
      -l--link=false移除容器间的网络连接 , 而非容器本身 , 保留底层容器
      -v--volumes=false删除与容器关联的卷
      实例:
      移除容器nginx01对容器db01的连接 , 连接名db
      docker rm -l db删除容器nginx01,并删除容器挂载的数据卷
      docker rm -v nginx01强制删除所有容器
      docker rm -f 'docker ps -a -q'删除非运行的容器
      docker rm docker ps -a -f status=exited删除异常退出的容器
      docker rm docker ps -a | grep Exited | awk'{print $1}'一条命令实现停用并删除容器
      docker stop $(docker ps -q) & docker rm $( docker ps -aq )批量删除最近5个容器
      docker rm $(docker ps -aq -n=5)移除指定镜像创建的容器
      docker rm $(docker ps -a | grep "watch-the-fun/jdk:8" | awk '{print $1}')命令拆分解释:
      |为管道符 , 主要作用为将前一命令的执行结果做为参数传入后一个命令
      docker ps -a查询所有创建的容器(包含未启动)
      grep "watch-the-fun/jdk:8"过滤镜像名为watch-the-fun/jdk:8的记录
      awk '{print $1}'按行查找记录中的第1列 , 该列为容器的id
      $()用作命令替换
      注:更多示例和详细讲解可点击上方官网链接或是用--help命令查看
      pause/unpausedocker pause :暂停容器中所有的进程 。
      docker unpause :恢复容器中所有的进程 。
      语法:
      docker pause CONTAINER [CONTAINER...]docker unpause CONTAINER [CONTAINER...]实例:
      暂停数据库容器db01提供服务
      docker pause db01恢复数据库容器db01提供服务
      docker unpause db01
      createdocker create :创建一个新的容器但不启动它
      用法同 docker run
      语法:
      docker create (-$) IMAGE [COMMAND] [ARG...]语法同 docker run
      实例:
      使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
      runoob@runoob:~$ docker create --name myrunoob nginx:latest09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
      execdocker exec :在运行的容器中执行命令
      语法:
      docker exec (-$) CONTAINER COMMAND [ARG...]
      -d,--detach分离模式: 在后台运行命令
      -i,--interactive即使没有连接 , 也要保持STDIN打开
      -t,--tty分配一个伪终端(TTY)
      --detach-keys覆盖用于分离容器的键序列
      -e,--env设置环境变量
      --privileged为命令提供扩展权限
      --user , -u用户名或UID(格式: [:])
      -w,--workdir容器内的工作目录
      实例:
      实例1:在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
      runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.shhttp://www.runoob.com/实例2:在容器 mynginx 中开启一个交互模式的终端:
      runoob@runoob:~$ docker exec -it mynginx /bin/bashroot@b1a0703e41e7:/#注:也可以通过 docker ps -a 命令查看已经在运行的容器 , 然后使用容器 ID 进入容器
      实例3:第一列的 9df70f9a0714 就是容器 ID 。
      通过 exec 命令对指定的容器执行 bash:
      # docker exec -it 9df70f9a0714 /bin/bash注:该命令是以交互式的方式进入某个容器(使用exit退出后容器不停止运行) , 更多详解参见官网
      updatedocker update : 更新一个或多个容器的配置
      语法:
      docker update (-$) CONTAINER [CONTAINER...]
      --blkio-weight阻止IO(相对权重) , 介于10和1000之间 , 或0阻止(默认为0)
      --cpu-period限制CPU CFS(完全公平计划程序)期间
      --cpu-quota限制CPU CFS(完全公平调度程序)配额
      --cpu-rt-period限制CPU实时周期(以微秒为单位)
      --cpu-rt-runtime以微秒为单位限制CPU实时运行时间
      --cpu-shares , -cCPU份额(相对权重)
      --cpusCPU数量
      --cpuset-cpus允许执行的CPU(0-3,0,1)
      --cpuset-mems允许执行的MEM(0-3,0,1)
      --kernel-memory内核内存限制
      --memory , -m内存限制
      --memory-reservation内存软限制
      --memory-swap交换限制等于内存加交换:' - 1以启用无限制交换
      --restart重新启动容器退出时应用的策略
      实例:
      更新容器的cpu-shares
      要将容器的cpu-shares限制为512 , 请首先标识容器名称或ID 。您可以使用它docker ps来查找这些值 。您还可以使用从docker run命令返回的ID。然后 , 执行以下操作:
      docker update --cpu-shares 512 abebf7571666使用cpu-shares和内存更新容器
      要为多个容器更新多个资源配置:
      docker update --cpu-shares 512 -m 300M abebf7571666 hopeful_morse注:更多示例可点击上方官网链接查看
      容器rootfs命令
      commitdocker commit :从容器创建一个新的镜像 。
      语法:
      docker commit (-$) CONTAINER [REPOSITORY[:TAG]]
      -a,--author=""作者
      -c,--change使用Dockerfile指令来创建镜像
      -m,--message=""简要说明
      -p,--pause=true在提交期间暂停容器
      实例:
      将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息 。
      runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057runoob@runoob:~$ docker images mymysql:v1REPOSITORYTAGIMAGE IDCREATEDSIZEmymysqlv137af1236adef15 seconds ago329 MB
      cpdocker cp :用于容器与主机之间的数据拷贝 。
      语法:
      docker cp (-$) CONTAINER:SRC_PATH DEST_PATH|-docker cp (-$) SRC_PATH|- CONTAINER:DEST_PATH
      -a,--archive存档模式(复制所有uid / gid信息)
      -L,--follow-link保持源目标中的链接
      实例:
      实例1:将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
      docker cp /www/runoob 96f7f14e99ab:/www/实例2:将主机/www/runoob目录拷贝到容器96f7f14e99ab中 , 目录重命名为www
      docker cp /www/runoob 96f7f14e99ab:/www实例3:将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
      docker cp 96f7f14e99ab:/www /tmp/
      diffdocker diff : 检查容器文件系统上文件或目录的更改
      语法:
      docker diff CONTAINER扩展说明
      自容器创建以来 , 列出容器文件系统中已更改的文件和目录 。跟踪三种不同类型的变化:
      符号描述A添加了文件或目录D文件或目录已删除C文件或目录已更改
      实例:
      查看容器mymysql的文件结构更改
      runoob@runoob:~$ docker diff mymysqlA /logsA /mysql_dataC /runC /run/mysqldA /run/mysqld/mysqld.pidA /run/mysqld/mysqld.sockC /tmp
      renamedocker rename : 重命名一个容器
      语法:
      docker rename CONTAINER NEW_NAME
      docker管理命令Docker除了提供上面的使用命令外 , 还提供了一系列的管理命令 , 分别如下
      builder管理构建
      config管理Docker配置
      container管理容器
      engine管理docker引擎
      image管理镜像
      network管理网络
      node管理Swarm节点
      plugin管理插件
      secret管理Docker secrets
      service管理服务
      stack管理Docker堆栈
      swarm管理Swarm集群
      system查看系统信息
      trust管理对Docker镜像的信任
      volume管理卷
      我们不必对上述的这些所有命令都了如指掌 , 因为那太浪费时间了 , 但我们可以知道他们都有什么作用 , 在需要时去官网查看就可以了
      下面列出了一下我们常用到的管理命令:
      查看网络列表
      docker network ls查看swarm service列表
      docker service ls删除所有未被 tag 标记和未被容器使用的镜像
      $ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y删除所有未被容器使用的镜像:
      docker image prune -a删除所有停止运行的容器:
      docker container prune删除所有未被挂载的卷:
      docker volume prune删除所有网络:
      docker network prune删除 docker 所有资源:
      docker system prune修剪镜像:
      docker system prune -a
      Docker选项docker (-$)
      --api-enable-cors=false在远程API中启用CORS 头
      -b, --bridge=""桥接网络 使用“none” 禁用容器网络
      --bip=""网桥模式
      -d, --daemon=false守护者模式
      -D, --debug=falsedebug 模式
      --dns=[]强制 docker 使用指定 dns 服务器
      --dns-search=[]强制 docker 使用指定 dns 搜索域
      -e, --exec-driver="native"强制 docker 运行时使用指定执行驱动器
      --fixed-cidr=""固定IP的IPv4子网(例:10.20.0.0/16)必须镶套在桥子网中(由-b or --bip定义)
      -G, --group="docker"当在守护模式中运行时 , 组指向-H指定的unix套接字 。使用""禁用组设置 。
      -g, --graph="/var/lib/docker"容器运行的根目录路径
      -H, --host=[]套接字绑定到守护模式 。使用一个或多个tcp://主机:端口 , unix:///路径/到/套 , fd://*或fd://socketfd.
      --icc=trueinter-container跨容器通信
      --insecure-registry=[]使用指定的注册表启用不安全通信(没有HTTPS的证书验证和启用HTTP回退)(例如 , localhost:5000或10.20.0 /16)
      --ip="0.0.0.0"绑定容器端口时使用的IP地址
      --ip-forward=true使用net.ipv4.ip_forward转发
      --ip-masq=true使IP伪装成桥的IP范围
      --iptables=true启用Docker添加iptables规则
      --mtu=0设置容器网络mtu
      -p, --pidfile="/var/run/docker.pid"指定守护进程pid文件位置
      --registry-mirror=[]指定一个首选的镜像仓库(加速地址)
      -s, --storage-driver=""强制 docker 运行时使用指定存储驱动
      --selinux-enabled=false开启 selinux 支持
      --storage-opt=[]设置存储驱动选项
      --tls=false开启 tls
      --tlscacert="/root/.docker/ca.pem"只信任提供CA签名的证书
      --tlscert="/root/.docker/cert.pem"tls 证书文件位置
      --tlskey="/root/.docker/key.pem"tls key 文件位置
      --tlsverify=false使用 tls 并确认远程控制主机
      -v, --version=false输出 docker 版本信息
      以上就是本文的全部内容 , 希望对大家的学习有所帮助 , 也希望大家多多支持考高分网 。