目录
- 简介
- 镜像仓库
- 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覆盖用于分离容器的键序列要attach上去的容器必须正在运行 , 可以同时连接上同一个container来共享屏幕(与screen命令的attach类似) 。
--no-stdin不附加STDIN
--sig-proxy代理所有接收到的进程信号(默认为true)
官方文档中说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并转发信号docker stop (-$) CONTAINER [CONTAINER...]
--checkpoint从此检查点恢复
--checkpoint-dir使用自定义检查点存储目录
--detach-keys覆盖用于分离容器的键序列
--interactive , -i附上容器的STDIN
--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}')命令拆分解释:
|为管道符 , 主要作用为将前一命令的执行结果做为参数传入后一个命令注:更多示例和详细讲解可点击上方官网链接或是用--help命令查看
docker ps -a查询所有创建的容器(包含未启动)
grep "watch-the-fun/jdk:8"过滤镜像名为watch-the-fun/jdk:8的记录
awk '{print $1}'按行查找记录中的第1列 , 该列为容器的id
$()用作命令替换
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 版本信息
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
