DOCKER 部分指令
DOCKER CLI
自己翻译的,如果有错误,麻烦写评论通知
docker pull
Docker pull指令用于从一个docker仓库中获取一个或者多个images。
命令简介
用法
docker pull [options] NAME[:TAG | @DIGEST]
OPTIONS
--all-tags -a 下载镜像的所有标签版
--disable-content-trust 跳过校验
--platform
注
docker pull依赖基本指令docker
命令实例
常规使用
docker pull debian
从Docker Hub上下载一个镜像
Docker Hub是目前最大的注册服务器,注册服务器是Docker的仓库,docker仓库是同一类镜像的一个集合
Docker pull指令可以下载某一或者某一系列的镜像。如果没有指定下载时使用的标签,默认使用latest,即docker pull debian 等同于 docker pull debian:latest
注:此处会有镜像资源下载超时的问题
建议指令:
sudo docker pull daocloud.io/debian
daocloud.io是国内常用的docker仓库
查看本地docker镜像指令:
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian jessie f50f9524513f 5 days ago 125.1 MB
debian latest f50f9524513f 5 days ago 125.1 MB
Docker采用内容镜像寻址。其IMAGE ID是SHA256计算的一个摘要值,具有唯一性,tag是镜像的标签。如上所示的debian镜像,在本地只存在一个副本,但有两个标签名。
中断镜像下载
在docker pull下载时,可以使用ctrl c直接中断下载流程
根据镜像摘要下载docker镜像
通常情况下我们使用镜像名和标签一起下载镜像,如docker pull ubuntu:14.04会下载一个最新的ubuntu 14.04的镜像文件。该指令虽然会下载镜像,但会因为ubuntu 14.04本身的更新,而使镜像在不同时间点上存在细微差别。有时候用户可能需要的正是某一时间点上的docker 镜像,这时该指令就无法做到了。这时我们可以使用文件摘要作为docker pull的标签参数来解决这个问题,这样就能保证每次得到的docker镜像完全一致。
首先我们使用docker pull下载一个最新的ubuntu 14.04的镜像。
$ docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
5a132a7e7af1: Pull completefd2731e4c50c: Pull complete28a2f68d1120: Pull completea3ed95caeb02: Pull completeDigest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04
Docker会在镜像下载结束后,将镜像摘要打印出来,如上镜像摘要是:
sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
当我们需要下载此时刻的固定镜像时,可以这样使用docker pull:
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
该方法支持在dockerfile中使用。
从指定仓库中下载docker镜像
默认情况下docker pull指令会从docker hub上下载镜像。docker 支持指定路径下载,路径指定方式与url相似,仅仅是没有url的协议头(如https://)。
以下是一个简单的实例,指定了下载地址和端口:
docker pull myregistry.local:5000/testing/test-image
Docker仓库会使用docker login验证身份。
从仓库中下载所有镜像:
默认情况下docker pull仅从仓库中下载一个镜像(即标签为lastest的镜像)。但是docker仓库往往存在多个镜像,为了下载全部的镜像,可以使用-a(或者--all-tags)选项。
如以下从docker hub下载所有的fedora镜像
docker pull --all-tags fedora
注意;
虽然会下载多个fedora的镜像,但是由于镜像是由docker layer组成的,因此它实际的大小会比下载多个fedora镜像小,因为docker layer会记录这些镜像的共有layer和自己不同其它镜像的layer。
Docker images
docker images命令可以列出本地主机上已有的镜像。
命令简介
用法
docker images [options] [REPOSITORY[:TAG]]
OPTIONS
--all-tags -a 显示所有镜像(默认不显示中间镜像)
--digests 显示摘要
--filter , -f 根据条件过滤输出
--format 使用pretty_print模式输出
--no-trunc 显示完整的image信息
--quiet , -q 仅列出镜像id
注
docker pull依赖基本指令docker
扩展描述:
默认情况下,docker images仅仅显示image的最上层layers信息,包括仓库,标签和大小。
docker的镜像,存在很多中间层文件,这些中间层文件可以被多个镜像重复利用,并减少硬盘消耗,同时增加docker build指令的速度,默认情况下,不显示中间层信息。
docker的size信息包括了该镜像的所有层的总大小,它的大小等于使用docker save指令保存时生成的tar文件大小。
使用docker images时,一个镜像可能会因为出现在多个仓库,或者拥有多个标签而显示多次,但通常IMAGE ID才是标识一个镜像占用空间的单位,即一个IMAGE ID表示实际占用了一次磁盘空间。
命令实例
常规使用
docker images
列出最近创建或者添加的镜像
根据名字和标签显示镜像
docker images java
docker images java:8
如果没有匹配项显示为空
完整显示镜像的image ID
docker images --no-trunc
显示镜像摘要
Docker的镜像在v2版本之后,支持一个内容地址标示,称为摘要。与摘要算法类似,只要镜像不变,摘要值不会变化。
docker images --digests
摘要可以做为参数出现在docker push或者docker pull等指令中。
镜像过滤条件
docker images支持使用过滤条件选择目标镜像,过滤参数为-f或者--filter。后面可跟形如”key=value”的参数,如果条件比较多,可以多次使用,如:docker image --filter “foo=bar” --filter “bif=baz”
常用的过滤条件:
-
Dangling(布尔属性,为true或者false)
-
Label标签(label=<key> 或者 label=<key>=<value>)
-
Before( <image-name>[:<tag>], <image id> or <image@digest>)选择创建时间在给定镜像前的镜像
-
since( <image-name>[:<tag>], <image id> or <image@digest>)选择镜像创建在给定镜像后的镜像
-
reference(pattern of an image reference)
获取没有标签的镜像
docker images --filter “dangling=true”
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 8abc22fbb042 4 weeks ago 0 B
<none> <none> 48e5f45168b9 4 weeks ago 2.489 MB
<none> <none> bf747efa0e2f 4 weeks ago 0 B
<none> <none> 980fe10e5736 12 weeks ago 101.4 MB
<none> <none> dea752e4e117 12 weeks ago 101.4 MB
<none> <none> 511136ea3c5a 8 months ago 0 B
无标签结点是镜像树上的叶子结点,这些镜像大多是在生成时,将repo:tag标签从iamge ID中取走,导致自动生成<none>:<none>或者untagged标签。在一个正在运行的容器使用无标签镜像会产生警告。
我们可以配置docker rmi 指令一次将所有无标签镜像删除。如:
docker rmi $(docker images -f “dangling=true” -q)
8abc22fbb042
48e5f45168b9
bf747efa0e2f
980fe10e5736
dea752e4e117
511136ea3c5a
Docker search
从docker hub上搜寻镜像
命令简介
用法
docker search [options] TERM
OPTIONS
--automated 仅仅显示自动编译
--filter , -f 根据条件过滤输出
--format 使用pretty_print模式输出
--limit 25 最大的搜寻结果
--no-trunc 显示完整的image信息
--start , -s 仅仅显示至少x个starts
注
docker pull依赖基本指令docker
命令实例
常规使用
docker search busybox
根据镜像名搜寻镜像
完整显示镜像信息,要其至少3starts
docker search --stars=3 --no-trunc busybox
Docker push
上传镜像
命令简介
用法
docker push
Docker rmi
删除一个或者多个镜像
命令简介
用法
docker rmi [options] IMAGE [ IMAGE ... ]
OPTIONS
--force , -f 强制删除镜像
--no-prune 不删除没有标签的parents镜像
注
docker pull依赖基本指令docker
命令实例
用户可以根据ID,tag,digest删除一个镜像。
如果某一仓库中的一个镜像存在多个tag标签,只有删除了所有tag标签,镜像才会从存储中删除。
如果某一镜像同时存在多个仓库中,在删除时必须指定其仓库才能删除镜像,虽然使用-f可以强制删除,但是不建议这么做。
当开始真正删除存储中的镜像记录,而并非删除tag时,指令会显示所有docker layer删除记录。
同一仓库删除:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest1 fd484f19954f 23 seconds ago 7 B
test latest2 fd484f19954f 23 seconds ago 7 B
test latest3 fd484f19954f 23 seconds ago 7 B
$ docker rmi latest1
Untagged: test:latest1
$ docker rmi latest2
Untagged: test:latest2
$ docker rmi latest3
Untagged: test:latest3
Deleted: fdssssdadsadasdasdas
Deleted: dasfsdewwqer21
仅当最后一个标签被删除时,docker rmi才会彻底删除该镜像
同一镜像多仓库:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest fd484f19954f 23 seconds ago 7 B
test2 latest fd484f19954f 23 seconds ago 7 B
test3 latest fd484f19954f 23 seconds ago 7 B
$ docker rmi fd484f19954f
Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories, use -f to force
2013/12/11 05:47:16 Error: failed to remove one or more images
$ docker rmi test1
Untagged: test1:latest
$ docker rmi test2
Untagged: test2:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test3 latest fd484f19954f 23 seconds ago 7 B
$ docker rmi test3
Untagged: test3:latest
Deleted: fdssssdadsadasdasdas
Deleted: dasfsdewwqer21
使用IMAGE ID删除镜像
如果同时使用-f和IMAGE ID,docker会将所有tag标签引用全部删除,直至删除文件系统中的镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest fd484f19954f 23 seconds ago 7 B
test latest fd484f19954f 23 seconds ago 7 B
test2 latest fd484f19954f 23 seconds ago 7 B
$ docker rmi -f fd484f19954f
Untagged: test1:latest
Untagged: test:latest
Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
根据摘要删除无标签的镜像
$ docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
Untagged: localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
Deleted: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125
Deleted: ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2
Deleted: df7546f9f060a2268024c8a230d8639878585defcc1bc6f79d2728a13957871b
Docker commit
根据镜像的容器创建镜像
命令简介
用法
docker commit [options] CONTAINER [ REPOSITORY[:TAG] ]
OPTIONS
--author , -a 作者信息
--change, -c 使用dockerfile指令创建镜像
--message, -m 提交消息
--pause, -p 在提交时暂停容器
--no-prune 不删除没有标签的parents镜像
注
docker pull依赖基本指令docker
命令实例
常规使用:
通常在启动镜像的容器后,一旦在容器中做了更改,比如安装了软件,需要重新commit一个镜像,否则下回重新启动该镜像的容器时,会发现之前的操作全部丢失。此时只有启动上回新生成的镜像才能看到之前的更改
docker commit -m “新安装了软件” -a “lsl” abcdefghijklm test
指令运行结束后,会返回新生存镜像的ID
Docker ps
显示所有的容器(默认仅显示运行的容器)
命令简介
用法
docker ps [options]
OPTIONS
--all, -a 显示所有容器(默认仅显示运行的容器)
--filter , -f 根据条件过滤输出
--format 使用pretty_print模式输出
--last, -n 显示最近创建的那个容器,默认最近1个
--lastest, -l 显示最近创建的容器
--no-trunc 显示完整的image信息
--quiet , -q 仅列出镜像id
--size, -s 显示文件的总大小
注
docker pull依赖基本指令docker
命令实例
常规使用:
$docker ps
仅显示运行中的容器
显示所有状态的容器:
$docker ps -a
对于拥有同样配置的容器,如果仅仅只是端口不一样,在显示时会将他们列在一行中。
容器过滤条件
docker ps支持使用过滤条件选择目标容器,过滤参数为-f或者--filter。后面可跟形如”key=value”的参数,如果条件比较多,可以多次使用,如:docker ps --filter “foo=bar” --filter “bif=baz”
常用的过滤条件:
id
Docker run
基于镜像新建一个容器,并运行指令(启动容器)
命令简介
Docker run执行时会基于一个镜像创建一个可写的容器层,然后使用命令启动容器。因此一般常说,docker run指令等价于先执行docker create,再执行docker start命令。
用法
docker run [options] IMAGE [ COMMAND ] [ARG ...]
OPTIONS
docker run的选项比较多,这里仅仅列出一些常用的,更多请参照官方文档。
--interactive , -i 令镜像的标准输入一直保持打开(多和-t一起使用)
--tty , -t 分配一个终端用于控制镜像(多和-i一起使用)
--rm 当容器运行结束时,自动删除容器
--privileged 使用该指令后,连接容器时会有额外的权限
--detach, -d 以后台守护模式运行容器,并打印容器ID
--add-host 增加通用主机ip映射
--attach, -a
--blkio-weight
--blkio-weight-device
--cap-add
--cap-drop
--cgroup-parent
--cidfile
--cpu-count
--cpu-percent
--env, -e 设置环境变量
--name 指定镜像运行后的容器名,容器名必须唯一
--net="host" docker与物理主机共用网络
--link 该参数指令了一种将两个容器连接在一起的方式。
通常两个隔离的容器,可以通过预先分配的容器ip地址和端口来访问(存在自动分配Ip端口,导致不可达)
还可以通过容器所在的主机的ip和端口(提前做好映射)间接访问另一个容器。
该参数提供了第三个方式访问,通过link参数指定两个容器后,就算不配置ip和端口,这两个容器可以实现如同在同一个操作系统。
--user, -u 指定运行用户名,或者uid
--volume, -v 挂载外部卷到docker
--workdir, -w 指定容器运行时的工作目录
注
docker pull依赖基本指令docker
命令实例
指定docker容器名,并分配一个控制台
$ docker run --name test -it debian(iamge id)
root@d6c0fe130dba:/# exit 13
$ echo $?
13
$ docker ps -a | grep testd6c0fe130dba
debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test
实例使用--name为容器指定了名字为test,-it选项为容器创建了一个控制台,it后面的debian是iamgeid,紧接着的下面会有一个类虚拟机的窗口,注意运行后的主机名换成docker随即分配的字符串。如上随后用exit退出了容器。
Docker container ID (--cidfile)
$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
指定执行后会创建一个容器并打印出test随后退出容器。--cidfile选项,会让容器在运行时创建一个文件,并将容器id写入文件,如果文件存在则会报错。另外,一旦容器退出运行,该文件也会消失。
为运行的docker容器分配一个数据卷
默认情况下,docker无法存储数据,容器关闭启动后,之前运行保存的数据,比如mysql数据,文进修改等,都无法保留,必须将需要保留和修改的数据放在外部数据卷,才可以达到保留和修改的目的。
如:
docker run -v /src/webapp:/opt/webapp -it ubuntu bash
以上指定执行后,会将主机上的/src/webapp目录,挂载到容器的/opt/webapp
若指定的主机目录不存在,docker run指令会负责创建
如:
docker run -v /webapp -it ubuntu bash
以上指令执行后,会自动生成一个数据文件夹,并挂载到容器的/webapp目录下
假如指令没有直接规定使用本机那个目录,挂载到容器的那个目录,则可以通过使用”docker inspect 容器id“命令查看卷是如何故在的。Source 和 destination分别代表本机和容器目录
Docker start
启动一个或者多个停止的容器
命令简介
docker start 可以用于启动处于终止态,已经被docker stop或者docker pause的容器。
用法
docker start [options] CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID
OPTIONS
--attach, -a
注
docker start依赖基本指令docker
命令实例
docker start my_container
Docker stop
使用SIGTERM停止一个或者多个正在运行的容器
用法
docker stop [options] CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID(容器名)
OPTIONS
--time, -t 发送SIGKILL的超时时间,docker stop默认为10s
注
docker stop依赖基本指令docker
命令实例
docker stop my_container
Docker exec
在正在运行的容器中运行指令
命令简介
Docker exec用于在一个正在运行的容器中运行命令,默认使用容器的工作目录运行指令,用户也可以修改容器默认的工作目录。
用法
docker exec [options] CONTAINER COMMAND [ ARG ...]
CONTAINER:即CONTAINER ID
OPTIONS
--detach, -d 以后台守护形式运行指令
--interactive , -i 令镜像的标准输入一直保持打开(多和-t一起使用)
--tty , -t 分配一个终端用于控制镜像(多和-i一起使用)
--env, -e 设置环境变量
--workdir, -w 设置指令在容器中的工作目录
注
docker exec 依赖基本指令docker
命令实例
exec简单实例
控制台1运行一个容器:
docker run --name ubuntu_bash --rm -i -t ubuntu bash
控制台2运行exec:
docker exec -d ubuntu_bash touch /tmp/execWorks
使用exec与容器之间建立控制台:
docker exec -it ubuntu_bash bash
Docker kill
使用SIGKILL信号,立即停止一个或者多个正在运行的容器。
命令简介
docker kill要求容器在接收到信号后立刻终止容器,而docker stop允许容器在一定时间内,按照正常流程结束容器的运行,二者还有一个区别是,docker stop的信号是可以被屏蔽的,而docker kill不允许。
使用-s选项后,docker kill可以如同linux下的kill指令一般给指定容器发送各种信号。
用法
docker stop [options] CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID
OPTIONS
--signale, -s docker kill指令运行用户发送linux允许的信号机制
注
docker kill依赖基本指令docker
命令实例
docker kill my_container
发送信号:
docker kill --signal=SIGHUP my_container
Docker stats
显示正在运行的容器资源数据使用统计
命令简介
docker stats可以获取一个或者多个容器的资源利用(类似linux top),只需要在指令后一一列出容器名或者容器ID,它们之间用空格隔开即可。处于终止态的容器也可以,只是没有信息返回而已。
用法
docker stats [OPTIONS] [CONTAINER ..]
OPTIONS
--all, -a 显示所有容器的资源使用情况
--format 格式化显示
--no-stream
--no-trunc 完整显示每条内容
注
docker statsl依赖基本指令docker
命令实例
$ 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% 110kB / 0B 578kB / 0B 2
CONTAINER ID ,NAME 表示容器名和容器ID
CPU% MEM% 容器的主机CPU和内存使用率
MEM USAGE / LIMIT 容器允许使用的最大内存和已经使用的内存
NET I/O 容器通过网络接收和发送的数据量
BLOCK I/O 容器从主机块设备上读写的数据量
PIDS 容器创建的进程或者线程数
Docker pause
暂停容器中所有的进程
命令简介
用法
docker pause CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID
注
docker pause 依赖基本指令docker
命令实例
docker pause my_container
Docker unpause
恢复容器中所有的进程,为docker pause的逆过程
Docker wait
阻塞运行容器,直到容器运行结束,打印容器退出代码
命令简介
用法
docker wait CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID
注
docker wait 依赖基本指令docker
命令实例
启动一个容器:
docker run -dit --name=my_container ubuntu bash
执行docker wait:
docker wait my_container
在另一个控制台中终止容器
docker stop my_container
在前一控制台中获取结果
docker wait my_container
0
Docker rename
容器重命名
命令简介
用法
docker rename CONTAINER NEW_NAME
注
docker rename 依赖基本指令docker
命令实例
docker rename my_container my_new_container
Docker inspect
可用于查看镜像的详细信息,查看容器的运行信息,比如挂载点。
Docker cp
用于在docker容器和本地文件系统中复制文件或者文件夹
用法
docker cp [options] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
命令实例
将本机文件复制到docker容器中
docker cp MessageComlib/ 45c2942716d5:/lovelsl
45c2942716d5 是docker容器ID
/lovelsl 是docker容器文件夹
Docker load
从标准输入或者指定压缩包,导入一个docker镜像
压缩包支持:gzip,bzip2,xz
与docker save同用
用法:
Docker load [options]
Options
--input -i 指定要读取压缩包,取代默认的标准输入
--quiet -q
命令实例
方式一:
docker load < xxx.tar.gz
方式二:
docker load -i xxx.tar
导入完毕后使用docker images查看导入的镜像
Docker save
将一个docker镜像保存到压缩包中,(默认导入到标准输出流)
用法:
docker save [options] IMAGE [IMAGE ...]
Options
--output -o
命令实例
方式一:
docker save busybox > busybox.tar
方式二:
docker save -o busybox.tar busybox(image id)
docker save -o fedora-latest.tar fedora:latest
docker save myimage:lastes | gzip > myimage.tar.gz
Docker build
使用Dockerfile构建一个镜像
用法:
docker build [options] PATH | URL | -
Options
--tag -t 指定构建的镜像名和标签,格式为:镜像名:标签名
命令实例
方式一:
Docker build .
方式二:
Docker build -t xxx .

浙公网安备 33010602011771号