EP0 Docker命令(更新中)

190 阅读15分钟

EP0 Docker命令(更新中)

完整且最新的命令参考官方文档

Docker引擎基础命令

查看版本号[version]

显示系统信息

语法

docker version

说明

显示有关 Docker 安装的系统范围信息。包括内核版本、容器数量、镜像数量等。


帮助命令[help]

显示命令帮助

语法

docker help
docker COMMAND --help
docker COMMAND --h

说明

  • 可以通过docker help查看docker可执行的命令
  • 可以通过docker COMMAND --help,-h查看命令的参数以及说明

镜像(image)命令

镜像列表[images]

查看本机镜像列表

语法

docker images [OPTIONS] [REPOSITORY[:TAG]]

说明

docker images默认展示所有顶级image,包含镜像名称、tag、ID、创建时间和大小. docker的中间层(每个docker镜像都是像积木一样拼接起来的,每个镜像的基础镜像称为中间层,具体可以看docker原理)默认不展示.

选项

  -a, --all             显示所有镜像
      --digests         显示描述信息
  -f, --filter filter   过滤输出结果
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           只显示id

[REPOSITORY[:TAG]]

docker images命令接受一个可选参数[REPOSITORY[:TAG]],该参数将列表限制为匹配该参数的image。如果只输入REPOSITORY没有输入TAG, docker images命令会列出给定存储库中的所有图像。 eg:

% docker images nginx
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        1.21      605c77e624dd   4 months ago   141MB
nginx        latest    605c77e624dd   4 months ago   141MB

% docker images nginx:1.21
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        1.21      605c77e624dd   4 months ago   141MB

搜索镜像[search]

从docker镜像仓库搜索镜像

语法

docker search [OPTIONS] TERM

说明

从docker镜像仓库搜索镜像.

选项

  -f, --filter filter   过滤结果
      --format string   格式化
      --limit int       最大结果数量(default 25)
      --no-trunc        不截断输出

-f,--filter

过滤flag格式是键值对。如果有多个过滤器,则传递多个flag(例如--filter is-automated=true --filter stars=3) 当前支持的过滤条件有:

  • stars (int - 镜像的star数量大于等于该值)
  • is-automated (boolean - true or false) - 镜像是否自动化
  • is-official (boolean - true or false) - 是否官方镜像

eg.

% docker search -f stars=168 nginx
NAME                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx               Official build of Nginx.                        16839     [OK]
linuxserver/nginx   An Nginx container, brought to you by LinuxS…   168

% docker search -f is-official=false -f is-automated=true  nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
bitnami/nginx                      Bitnami nginx Docker Image                      129                  [OK]
bitnami/nginx-ingress-controller   Bitnami Docker Image for NGINX Ingress Contr…   18                   [OK]

拉取镜像[pull]

从docker镜像仓库拉取镜像

语法

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

说明

从docker镜像仓库拉取镜像.

选项

  -a, --all-tags                从存储库拉取某镜像的所有tag
      --disable-content-trust   跳过镜像验证
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   不显示详细输出

示例

% docker pull nginx:1.21
1.21: Pulling from library/nginx
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:1.21
docker.io/library/nginx:1.21

查看镜像版本号

镜像版本号在docker search命令中无法查看,需要访问docker hub查看,操作如下:

  1. 访问docker hub image.png
  2. 搜索镜像名称

image.png

  1. 进入镜像详情即可查看版本号 image.png

删除镜像[rmi]

删除一个或多个镜像

语法

docker rmi [OPTIONS] IMAGE[:TAG]|ID [IMAGE[:TAG]|ID ...]

说明

从主机节点删除一个或多个映像。如果图像有多个tag,使用这个带有tag参数的命令只会删除tag。如果该标记是镜像的唯一tag,则将同时删除镜像和tag。
这不会从远程仓库中删除镜像。 一般情况不能删除正在运行的容器的镜像,除非使用-f选项。要查看主机上的所有镜像,使用docker images命令。

选项

  -f, --force      强制删除镜像(可以删除正在运行的镜像,不建议使用)
      --no-prune   Do not delete untagged parents

eg.

% docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
nacos/nacos-server   v2.0.4    e6a65052d0b1   2 months ago   1.08GB
nginx                1.21      605c77e624dd   4 months ago   141MB
nginx                latest    605c77e624dd   4 months ago   141MB
tomcat               latest    fb5657adc892   5 months ago   680MB
redis                latest    7614ae9453d1   5 months ago   113MB
nacos/nacos-mysql    5.7       72037eccf264   2 years ago    373MB

% docker rmi 605c77e624dd
Error response from daemon: conflict: unable to delete 605c77e624dd (must be forced) - image is referenced in multiple repositories

# 如果一个镜像在host有多个版本(相同imageId)那么将无法删除镜像;此时如果要删除镜像需要通过tag依次删除镜像或使用`-f` 参数

% docker rmi -f 605c77e624dd
Untagged: nginx:1.21
Untagged: nginx:latest
Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85

# 一个镜像多个tag时,使用`-f`删除会同时删除该镜像所有的tag

保存镜像[save]

保存一个或多个镜像到tar存档(默认保存到标准输出流)

语法

docker save [OPTIONS] IMAGE [IMAGE...]

说明

将镜像保存到标准输出流或文件(tar)文件中,一般用于备份或没有网络的情况下共享镜像.

选项

  -o, --output string   保存到文件而不是输出流

eg.

% docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
nacos/nacos-server   v2.0.4    e6a65052d0b1   2 months ago   1.08GB
tomcat               latest    fb5657adc892   5 months ago   680MB
redis                latest    7614ae9453d1   5 months ago   113MB
nacos/nacos-mysql    5.7       72037eccf264   2 years ago    373MB

% docker save -o /Users/chenrui/work/temp/redis.latest.tar redis:latest

# 保存最新版本的redis到本地的tar文件

加载镜像[load]

从本地文件加载镜像

语法

docker load [OPTION]

说明

从tar归档文件(即使使用gzip、bzip2或xz压缩)或文件或标准输入流加载映像或存储库。它可以恢复镜像和TAG。

选项

  -i, --input string   从tar文件加载而不是输入流
  -q, --quiet          不显示详细输入

eg.

% docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
nacos/nacos-server   v2.0.4    e6a65052d0b1   2 months ago   1.08GB
tomcat               latest    fb5657adc892   5 months ago   680MB
nacos/nacos-mysql    5.7       72037eccf264   2 years ago    373MB

% docker load -i /Users/chenrui/work/temp/redis.latest.tar
2edcec3590a4: Loading layer [==================================================>]  83.86MB/83.86MB
9b24afeb7c2f: Loading layer [==================================================>]  338.4kB/338.4kB
4b8e2801e0f9: Loading layer [==================================================>]  4.274MB/4.274MB
529cdb636f61: Loading layer [==================================================>]   27.8MB/27.8MB
9975392591f2: Loading layer [==================================================>]  2.048kB/2.048kB
8e5669d83291: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: redis:latest

% docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
nacos/nacos-server   v2.0.4    e6a65052d0b1   2 months ago   1.08GB
tomcat               latest    fb5657adc892   5 months ago   680MB
redis                latest    7614ae9453d1   5 months ago   113MB
nacos/nacos-mysql    5.7       72037eccf264   2 years ago    373MB

推送镜像[push]

将镜像推送到仓库

语法

docker push [OPTIONS] NAME[:TAG]

说明

使用docker镜像推送将您的镜像共享到docker Hub注册表或自托管的注册表。

选项

  -a, --all-tags                将所有打了标签的镜像推送到仓库中
      --disable-content-trust   跳过镜像签名
  -q, --quiet                   抑制详细输出

构建[build]

通过Dockerfile构建镜像

语法

docker build [OPTIONS] PATH | URL | -

选项

      --add-host list           添加一个自定义的主机到ip映射(host:ip)
      --build-arg list          设置构建ARG
      --cache-from strings      Images to consider as cache sources
      --cgroup-parent string    容器的可选父 cgroup
      --compress                使用 gzip 压缩构建上下文
      --cpu-period int          限制 CPU CFS(完全公平调度器)周期
      --cpu-quota int           限制 CPU CFS(完全公平调度器)配额
  -c, --cpu-shares int          CPU 份额(相对权重)
      --cpuset-cpus string      允许执行的 CPU (0-3, 0,1)
      --cpuset-mems string      允许执行的 MEM (0-3, 0,1)
      --disable-content-trust   跳过图像验证
  -f, --file string             Dockerfile 的名称(默认为 'PATH/Dockerfile')
      --force-rm                始终移除中间容器
      --iidfile string          将图像 ID 写入文件
      --isolation string        容器隔离技术
      --label list              为图像设置元数据
  -m, --memory bytes            内存限制
      --memory-swap bytes       交换限制等于内存加上交换:'-1' 启用无限交换
      --network string          在构建期间为 RUN 指令设置网络模式
      --no-cache                构建镜像时不要使用缓存
      --pull                    始终尝试拉取更新版本的图像
  -q, --quiet                   成功时禁止构建输出并打印图像 ID
      --rm                      成功构建后移除中间容器
      --security-opt strings    安全选项
      --shm-size bytes          /dev/shm 的大小
  -t, --tag list                名称和可选的“名称:标签”格式的标签
      --target string           将目标构建阶段设置为构建。
      --ulimit ulimit           限制选项

容器(container)命令

运行[run]

运行新的容器

语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

说明

docker run命令首先在指定的镜像上创建一个可写的容器层,然后使用指定的命令启动它。也就是说,docker run等价于docker create然后docker start {id}。停止的容器可以使用docker start重新启动,并且它之前的所有更改都保持不变。查看docker ps -a来查看所有容器的列表。

选项

  -a, --attach                         附加到STDIN、STDOUT或STDERR
  -d, --detach                         在后台运行容器并打印容器ID

  -e, --env list                       设置环境变量
  -h, --hostname string                容器主机名

  -i, --interactive                    即使没有attached,也要保持 STDIN 打开状态
      --ip string                      设置容器的ip4地址
      --link list                      与其他容器链接
  -m, --memory bytes                   内存限制
      --name string                    设置容器的名称
      --network network                将容器连接到一个网络
  -p, --publish list                   向宿主发布容器的端口
  -P, --publish-all                    将所有暴露的端口发布到随机端口
      --restart string                 当容器退出时应用的重新启动策略(默认为“no”)
      --rm                             在容器退出时自动删除它
  -t, --tty                            为容器分配一个伪 tty 终端并绑定到容器的标准输入上,之后用户就可以通过终端来控制容器了,一般-t都是与-i一起出现的,也就是-it。
  -v, --volume list                    绑定挂载卷
  -w, --workdir string                 容器内的工作目录

* 仅包含常用选项参数,所有参数可查阅官方文档

查看日志[logs]

获取容器日志

语法

docker logs [OPTIONS] CONTAINER

说明

docker日志命令批量检索在执行时出现的日志。

该命令仅对使用json文件或日志记录驱动程序启动的容器有效。

选项

  -f, --follow         跟踪日志输出
  -n, --tail string    从日志末尾开始显示的行数(默认为“all”)
  -t, --timestamps     显示时间戳

查看容器元数据[inspect]

返回Docker对象的元数据

语法

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

说明

Docker inspect提供了由Docker控制的构造的详细信息。

默认情况下,docker inspect将以JSON数组呈现结果。

选项

--format , -f		Format the output using the given Go template
--size , -s		    Display total file sizes if the type is container
--type		        Return JSON for specified type

查看容器进程[top]

显示容器的运行进程

语法

docker top CONTAINER [ps OPTIONS]

性能监控[stats]

显示实时的容器资源使用统计数据流

语法

docker stats [OPTIONS] [CONTAINER...]

说明

docker stats命令返回运行容器的实时数据流。若要将数据限制在一个或多个特定容器中,请指定一个由空格分隔的容器名称或id列表。您可以指定一个停止的容器,但是停止的容器不返回任何数据。

选项

  -a, --all             显示所有容器(默认显示正在运行)
      --format string   Pretty-print images using a Go template
      --no-stream       禁用流统计,只提取第一个结果
      --no-trunc        不截断输出

连接到正在运行中的容器[attach]

将本地标准输入、输出和错误流附加到正在运行的容器

语法

docker attach [OPTIONS] CONTAINER

说明

要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不会关闭容器。

选项

      --detach-keys string   Override the key sequence for detaching a container
      --no-stdin             不附加STDIN(标准输入)
      --sig-proxy            代理进程接收到的所有信号(默认为true)

复制[cp]

在容器和本地文件系统之间复制文件/文件夹

语法

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

选项

  -a, --archive       存档模式(复制所有uid/gid信息)
  -L, --follow-link   始终跟随SRC_PATH中的符号链接

启动/停止/重启[start/stop/restart]

启动/停止/重启容器

语法

docker start CONTAINER
docker stop CONTAINER
docker restart CONTAINER

删除容器[rm]

移除一个或多个容器

语法

 docker rm [OPTIONS] CONTAINER [CONTAINER...]

选项

  -f, --force     强制删除正在运行的容器(使用SIGKILL)
  -l, --link      删除指定的链接
  -v, --volumes   删除与容器关联的匿名卷

容器列表[ps]

容器列表

语法

docker ps [OPTIONS]

说明

说明

选项

  -a, --all             显示所有容器(默认显示正在运行)
  -f, --filter filter   根据提供的条件过滤输出
  -n, --last int        显示最近创建的容器(包括所有状态)(默认值-1)
  -l, --latest          显示最新创建的容器(包括所有状态)
      --no-trunc        不截断输出
  -q, --quiet           只显示容器id
  -s, --size            显示总文件大小

提交[commit]

根据容器的更改创建一个新映像

语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

选项

  -a, --author string    作者
  -c, --change list      对创建的镜像应用Dockerfile指令
  -m, --message string   提交消息
  -p, --pause            在提交期间暂停容器(默认为true)

导出容器[export]

将容器文件系统导出为tar归档文件

语法

docker export [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

说明

docker export命令不导出与容器相关联的卷的内容。如果卷挂载在容器中现有目录的顶部,docker export将导出底层目录的内容,而不是卷的内容。

选项

  --output , -o         写入文件,而不是标准输出

导入容器[import]

从压缩包中导入内容以创建文件系统映像

语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

说明

你可以指定URL或-(破折号)直接从STDIN中获取数据。URL可以指向一个归档文件(.tar、.tar.gz、.tgz、.bzip、.tar.gz、。. xz或.txz)包含一个文件系统或Docker主机上的单个文件。如果指定了一个归档文件,Docker会相对于/(根目录)将其解压到容器中。如果指定单个文件,则必须指定主机内的完整路径。要从远程位置导入,请指定一个以http://或https://协议开始的URI。

——change选项将Dockerfile指令应用于创建的镜像。支持的Dockerfile指令:CMD|ENTRYPOINT|ENV|EXPOSE|ONBUILD|USER|VOLUME|WORKDIR

选项

--change , -c		在创建的镜像上应用Dockerfile指令
--message , -m		为导入的图像设置提交消息
--platform		如果服务器支持多平台,请设置平台

卷(volume)命令

创建卷[create]

创建一个卷

语法

docker volume create [OPTIONS] [VOLUME]

说明

创建一个新卷,容器可以使用该卷并在其中存储数据。如果未指定名称,Docker将生成一个随机名称。

选项

  -d, --driver string   指定卷驱动程序名称(默认为"local")
      --label list      设置卷的元数据
  -o, --opt map         设置驱动程序特定选项 (default map[])

卷列表[ls]

查看卷列表

语法

docker volume ls [OPTIONS]

说明

列出 Docker 已知的所有卷。

选项

--filter,-f		提供过滤器值(例如 'dangling=true')
--format		使用 Go 模板打印精美的卷
--quiet,-q		只显示卷名

卷详情[inspect]

查看卷详情

语法

docker volume inspect [OPTIONS] VOLUME [VOLUME...]

说明

返回卷的信息。默认情况下,该命令以JSON数组呈现所有结果。

选项

--filter,-f		提供过滤器值(例如 'dangling=true')

删除卷[rm]

删除卷

语法

docker volume rm [OPTIONS] VOLUME [VOLUME...]

说明

删除一个或多个卷。

选项

--force , -f		强制删除

清理卷[prune]

清理卷

语法

docker volume prune [OPTIONS]

说明

清理所有未使用的卷

选项

--filter		   提供过滤器值(例如 'label=<label>')
--force , -f		强制删除