服务器 
首页 > 服务器 > 浏览文章

一篇文章学会Docker命令小结

(编辑:jimmy 日期: 2024/11/18 浏览:3 次 )

简介

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 恢复容器中所有的进程
 kill  kill运行中的容器
 wait  阻塞直到容器停止,然后打印退出代码
 
 update 更新容器配置

镜像仓库

login

dockerlogin : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

语法:

docker login/logout (-$) [SERVER]

    -u                          登陆的用户名

    -p                          登陆的密码

实例:

登陆到Docker Hub

docker login -u 用户名 -p 密码

登出Docker Hub

docker logout

pull

dockerpull : 从镜像仓库中拉取或者更新指定镜像

语法:

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

push

docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

语法:

docker push (-$) NAME[:TAG]

    --disable-content-trust     忽略镜像的校验,默认开启

实例:

上传本地镜像myapache:v1到镜像仓库中

docker push myapache:v1

推送镜像库到私有源

docker push 192.168.0.100:5000/ubuntu

search

docker search : 从Docker Hub查找镜像

语法:

docker search (-$) TERM

    -automated                  只列出 automated build类型的镜像;

    --no-trunc                  显示完整的镜像描述;

    -s                          列出收藏数不小于指定值的镜像。

实例:

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像

docker search -s 10 java
runoob@runoob:~$ docker search -s 10 java
NAME   DESCRIPTION    STARS OFFICIAL AUTOMATED
java   Java is a concurrent, class-based... 1037 [OK] 
anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC ... 115  [OK]
develar/java       46   [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]

本地镜像管理

images

docker 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 alpine
REPOSITORY  TAG   IMAGE ID  CREATED  SIZE
alpine  3.9   cdf98d1859c1 3 months ago 5.53MB
alpine  latest  cdf98d1859c1 3 months ago 5.53MB

rmi

docker 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 rmi
docker rmi $( docker images -f dangling=true)

tag

docker tag : 标记本地镜像,将其归入某一仓库。

语法:

docker tag (-$) IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

实例:

将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。

docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images runoob/ubuntu:v3
REPOSITORY  TAG   IMAGE ID  CREATED  SIZE
runoob/ubuntu v3   4e3b13c8a266 3 months ago 136.3 MB

build

docker 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

    --ulimit                    Ulimit配置。

    --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 build -t test/myapp .
 Sending build context to Docker daemon 2.048 kB
 Error response from daemon: Unknown instruction: RUNCMD

history

docker history : 查看指定镜像的创建历史。

语法:

docker history (-$) IMAGE

    -H              以可读的格式打印镜像大小和日期,默认为true;

    --no-trunc      显示完整的提交记录;

    -q              仅列出提交记录ID。

save

docker 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

load

docker load : 导入使用 docker save 命令导出的镜像。

语法:

docker load (-$)

    -i              指定导出的文件。

    -q              精简输出信息。

实例

导入镜像

docker load -i ubuntu.tar
docker load < ubuntu.tar
docker load < /root/mytomcat7.tar.gz  

import

docker 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:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39
runoob@runoob:~$ docker images runoob/ubuntu:v4
REPOSITORY  TAG   IMAGE ID  CREATED  SIZE
runoob/ubuntu v4   63ce4a6d6bc3 20 seconds ago 142.1 MB

容器操作

ps

dockerps : 列出容器

语法:

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   | 表示键或键值对的任意字符串。表示为<key>或<key>=<value>
                    exited  | 表示容器退出代码的整数。只有对所有人有用。
                    status  | created,restarting,running,removing,paused,exited,dead之一
                    ancestor| 筛选指定镜像的容器,例如<image-name>[:<tag>],<image id>, or <image@digest>
                    before or since | 筛选在给定容器ID或名称之前或之后创建的容器
                    volume  | 运行已挂载给定卷或绑定挂载的容器的筛选器。
                    network | 过滤器运行连接到给定网络的容器。
                    publish or expose | 筛选发布或公开给定端口的容器,例如<port>[/<proto>] or <startport-endport>/[<proto>]
                    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

inspect

docker 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}}' mymysql
172.17.0.3

注:更多示例可点击上方官网链接查看

top

docker top :查看容器中运行的进程信息,支持 ps 命令参数。

语法:

docker top CONTAINER [ps OPTIONS]

容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。

实例:

查看容器mymysql的进程信息。

runoob@runoob:~/mysql$ docker top mymysql
UID PID PPID C  STIME TTY TIME  CMD
999 40347 40331 18  00:58 "_blank" href="https://docs.docker.com/engine/reference/commandline/attach/">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 mynginx
192.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命令查看

events

docker 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命令查看

logs

docker 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命令查看

wait

docker wait : 阻塞运行直到容器停止,然后打印出它的退出代码。

语法:

docker wait (-$) CONTAINER [CONTAINER...]

实例

docker wait CONTAINER

export

docker 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 a404c6c174a2
runoob@runoob:~$ ls mysql-`date +%Y%m%d`.tar
mysql-20160711.tar

port

docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。

语法:

docker port CONTAINER [PRIVATE_PORT[/PROTO]]

实例:

查看容器ID为cbe08f2a4406的端口映射情况。

runoob@runoob:~$ docker port cbe08f2a4406
3306/tcp -> 0.0.0.0:13306

stats

docker stats : 显示容器资源使用情况统计信息的实时流

语法:

docker stats (-$) [CONTAINER...]

    -a,--all                显示所有容器(默认显示刚刚运行)   
    --format                使用Go模板的漂亮打印图像    
    --no-stream             禁用流式统计信息并仅提取第一个结果    
    --no-trunc              不要截断输出

实例:

运行docker stats在针对Linux后台程序运行的所有容器。

$ docker stats
CONTAINER ID  NAME         CPU %    MEM USAGE / LIMIT  MEM %    NET I/O    BLOCK I/O   PIDS
b95a83497c91  awesome_brattain      0.28%    5.629MiB / 1.952GiB 0.28%    916B / 0B   147kB / 0B   9
67b2525d8ad1  foobar         0.00%    1.727MiB / 1.952GiB 0.09%    2.48kB / 0B   4.11MB / 0B   2
e5c383697914  test-1951.1.kay7x1lh1twk9c0oig50sd5tr 0.00%    196KiB / 1.952GiB  0.01%    71.2kB / 0B   770kB / 0B   1
4bda148efbc0  random.1.vnc8on831idyr42slu578u3cr  0.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 容器创建的进程或线程数

注:更多示例可点击上方官网链接查看

容器生命周期管理

run

docker 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标准) "htmlcode">
      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/bash
      root@b8573233d675:/#

      start/stop/restart

      docker 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秒

      kill

      docker kill :杀掉一个运行中的容器。

      语法:

      docker kill (-$) CONTAINER [CONTAINER...]

          -s,--signal                 向容器发送一个信号, 强制中断 -s代表指定SIGINT信号类型,默认“kill”

      实例:

      杀掉运行中的容器mynginx

      runoob@runoob:~$ docker kill -s KILL mynginx
      mynginx

      杀死所有正在运行的容器

      docker kill $( docker ps -p -a )
      

      注:此小节的-s牵扯到Linux的信号,如需了解详情,可点击此处查看

      rm

      docker 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/unpause

      docker pause :暂停容器中所有的进程。

      docker unpause :恢复容器中所有的进程。

      语法:

      docker pause CONTAINER [CONTAINER...]
      docker unpause CONTAINER [CONTAINER...]
      

      实例:

      暂停数据库容器db01提供服务

      docker pause db01

      恢复数据库容器db01提供服务

      docker unpause db01

      create

      docker create :创建一个新的容器但不启动它

      用法同 docker run

      语法:

      docker create (-$) IMAGE [COMMAND] [ARG...]
      

      语法同 docker run

      实例:

      使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob

      runoob@runoob:~$ docker create --name myrunoob nginx:latest  
      09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
      

      exec

      docker exec :在运行的容器中执行命令

      语法:

      docker exec (-$) CONTAINER COMMAND [ARG...]
      

          -d,--detach                 分离模式: 在后台运行命令

          -i,--interactive            即使没有连接,也要保持STDIN打开

          -t,--tty                    分配一个伪终端(TTY)    
          --detach-keys               覆盖用于分离容器的键序列    
          -e,--env                    设置环境变量    
          --privileged                为命令提供扩展权限    
          --user , -u                 用户名或UID(格式:<name | uid> [:<group | gid>])    
          -w,--workdir                容器内的工作目录

      实例:

      实例1:在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:

      runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
      http://www.runoob.com/
      

      实例2:在容器 mynginx 中开启一个交互模式的终端:

      runoob@runoob:~$ docker exec -it mynginx /bin/bash
      root@b1a0703e41e7:/#
      

      注:也可以通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID 进入容器

      实例3:第一列的 9df70f9a0714 就是容器 ID。

      通过 exec 命令对指定的容器执行 bash:

      # docker exec -it 9df70f9a0714 /bin/bash
      

      注:该命令是以交互式的方式进入某个容器(使用exit退出后容器不停止运行),更多详解参见官网

      update

      docker 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 , -c       CPU份额(相对权重)    
          --cpus                  CPU数量

          --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命令

      commit

      docker 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:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
      runoob@runoob:~$ docker images mymysql:v1
      REPOSITORY   TAG     IMAGE ID   CREATED    SIZE
      mymysql    v1     37af1236adef  15 seconds ago  329 MB
      

      cp

      docker 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/

      diff

      docker diff : 检查容器文件系统上文件或目录的更改

      语法:

      docker diff CONTAINER
      

      扩展说明

      自容器创建以来,列出容器文件系统中已更改的文件和目录。跟踪三种不同类型的变化:

      符号 描述 A 添加了文件或目录 D 文件或目录已删除 C 文件或目录已更改

      实例:

      查看容器mymysql的文件结构更改

      runoob@runoob:~$ docker diff mymysql
      A /logs
      A /mysql_data
      C /run
      C /run/mysqld
      A /run/mysqld/mysqld.pid
      A /run/mysqld/mysqld.sock
      C /tmp

      rename

      docker 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"htmlcode">
      
      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=false                       debug 模式
         
          --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=true                              inter-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 版本信息

      以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:Linux系统中CPU占用率较高问题排查思路与解决方法
下一篇:在Linux中查看及终止正在运行的后台程序方法