目录
前言
查询相关
容器相关
1. 容器启动
2. 容器关闭
3. 重启容器
4. 暂停容器
5. 删除容器
6. docker run参数汇总
镜像相关
1. 镜像推送至仓库
2. docker image load使用
3. docker image import使用
4. dokcer image参数汇总
容器的命令操作分为三大块,分别为:Common Commands,Management Commands,Swarm Commands。本章主要介绍容器的启动,停止,镜像的上传,下载,这几个方面来说docker的操作命令。
1. 查看所有容器(显示启动和未启动的)
docker ps -a
[root@clinet ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9600ac1329ba nginx "/docker-entrypoint.…" 41 minutes ago Exited (137) 3 minutes ago nginx_1
7e18dace050a nginx "/docker-entrypoint.…" 45 minutes ago Exited (0) 2 minutes ago beautiful_bhaskara
c59a4416e418 nginx "/docker-entrypoint.…" 53 minutes ago Up 53 minutes 80/tcp nginx_container
9090f333a406 nginx "/docker-entrypoint.…" 3 days ago Exited (0) 3 days ago hardcore_heisenberg
[root@clinet ~]#
2. 查看已启动的容器(只显示已启动的)
docker ps
[root@clinet ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c59a4416e418 nginx "/docker-entrypoint.…" 54 minutes ago Up 54 minutes 80/tcp nginx_container
[root@clinet ~]#
CONTAINER ID :每启动一个容器都会随机生成一个id;
IMAGE :启动容器所用的镜像名称;
COMMAND : 启动容器后在容器内部前台运行的进程,当容器内前台运行的进程结束后,该容器就会退出(不再是up状态);
CREATED :容器创建了多长时间;STATUS :容器的状态,分别有up(运行),exited(退出),paused(暂停);
PORTS :容器内监听的端口,当使用-p参数给容器端口映射之后,会显示映射端口和容器内端口;
NAMES :容器的名称,默认随机创建名称,可以使用--name 指定名称
3. 查询docke等相关信息
docker info
[root@clinet ~]# docker info
Client:Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.10.2Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.16.0Path: /usr/libexec/docker/cli-plugins/docker-composescan: Docker Scan (Docker Inc.)Version: v0.23.0Path: /usr/libexec/docker/cli-plugins/docker-scanServer:Containers: 5Running: 2Paused: 0Stopped: 3Images: 2Server Version: 23.0.1Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 2456e983eb9e37e47538f59ea18f2043c9a73640runc version: v1.1.4-0-g5fd4c4dinit version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-1160.76.1.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 1.777GiBName: clinetID: MC6B:5JJX:53U5:BGLV:SM2E:IMX3:W2IS:DQ7M:JTAE:SA6Z:QL2J:ALVSDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://mqkiky4e.mirror.aliyuncs.com/Live Restore Enabled: falseWARNING: API is accessible on http://0.0.0.0:3276 without encryption.Access to the remote API is equivalent to root access on the host. Referto the 'Docker daemon attack surface' section in the documentation formore information: https://docs.docker.com/go/attack-surface/
[root@clinet ~]#
4. 查询指定容器的详细信息
docker inspect 容器名称/容器id
[root@clinet ~]# docker inspect nginx_2
[{"Id": "9f90418a59bd2cc36bff61cab7360e7b672d152329a8517fda6696dfe4e0b7ba","Created": "2023-03-18T09:39:31.502861773Z","Path": "/docker-entrypoint.sh","Args": ["nginx","-g","daemon off;"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 5867,"ExitCode": 0,"Error": "","StartedAt": "2023-03-18T09:39:32.038676669Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:904b8cb13b932e23230836850610fa45dce9eb0650d5618c2b1487c2a4f577b8","ResolvConfPath": "/var/lib/docker/containers/9f90418a59bd2cc36bff61cab7360e7b672d152329a8517fda6696dfe4e0b7ba/resolv.conf","HostnamePath": "/var/lib/docker/containers/9f90418a59bd2cc36bff61cab7360e7b672d152329a8517fda6696dfe4e0b7ba/hostname","HostsPath": "/var/lib/docker/containers/9f90418a59bd2cc36bff61cab7360e7b672d152329a8517fda6696dfe4e0b7ba/hosts","LogPath": "/var/lib/docker/containers/9f90418a59bd2cc36bff61cab7360e7b672d152329a8517fda6696dfe4e0b7ba/9f90418a59bd2cc36bff61cab7360e7b672d152329a8517fda6696dfe4e0b7ba-json.log","Name": "/nginx_2","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {"80/tcp": [{"HostIp": "","HostPort": "8080"}]},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"ConsoleSize": [25,118],"CapAdd": null,"CapDrop": null,"CgroupnsMode": "host","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": [],"BlkioDeviceWriteBps": [],"BlkioDeviceReadIOps": [],"BlkioDeviceWriteIOps": [],"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/2336f15442f95701825b180a9ac0ab325d74c8d8dad4205a8b8a0a716dfd9974-init/diff:/var/lib/docker/overlay2/f6fb37fd4809d0d5117986799d12cb9ec609246413024b4a906c4070e4e38c05/diff:/var/lib/docker/overlay2/39e10f3ca43f3532ce10d40449eb46a3781880fbd3335c7083760ab85c38a102/diff:/var/lib/docker/overlay2/2ff9c5cc2fd76d8e2ded68d59092cd72aa3e1da309e71093b4cce514877d6ebe/diff:/var/lib/docker/overlay2/de238ec7feb4d53664db7156e8fcba50709a78566129c9fac7a33d76a837e939/diff:/var/lib/docker/overlay2/e11e90aa79a17f149a69c64bb10c582df04b46c68a5270ce9a650f996f48780e/diff:/var/lib/docker/overlay2/51c3c88754ee4a5b4076fb7fc94116475587bacfcf0e8dc2980bb9424df76346/diff","MergedDir": "/var/lib/docker/overlay2/2336f15442f95701825b180a9ac0ab325d74c8d8dad4205a8b8a0a716dfd9974/merged","UpperDir": "/var/lib/docker/overlay2/2336f15442f95701825b180a9ac0ab325d74c8d8dad4205a8b8a0a716dfd9974/diff","WorkDir": "/var/lib/docker/overlay2/2336f15442f95701825b180a9ac0ab325d74c8d8dad4205a8b8a0a716dfd9974/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "9f90418a59bd","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.23.3","NJS_VERSION=0.7.9","PKG_RELEASE=1~bullseye"],"Cmd": ["nginx","-g","daemon off;"],"Image": "nginx","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers "},"StopSignal": "SIGQUIT"},"NetworkSettings": {"Bridge": "","SandboxID": "8f33f102953eb65c059ea29baeacf685db50aa4f2bc6c908bc85d4b5314006b8","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {"80/tcp": [{"HostIp": "0.0.0.0","HostPort": "8080"}]},"SandboxKey": "/var/run/docker/netns/8f33f102953e","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "f4f033a0135d2d8d94ad422e287660325998c9b40d6f8b0b150bdbf2497484f6","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:03","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "5e392fc5fa9cb25d19386a7acb4f2746218fcc99a11c8b5a421614e6df0a24a0","EndpointID": "f4f033a0135d2d8d94ad422e287660325998c9b40d6f8b0b150bdbf2497484f6","Gateway": "172.17.0.1","IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:03","DriverOpts": null}}}}
]
[root@clinet ~]# ^C
[root@clinet ~]#
5. 查看docker版本信息
docker version
[root@clinet ~]# docker info
Client:Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.10.2Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.16.0Path: /usr/libexec/docker/cli-plugins/docker-composescan: Docker Scan (Docker Inc.)Version: v0.23.0Path: /usr/libexec/docker/cli-plugins/docker-scanServer:Containers: 5Running: 2Paused: 0Stopped: 3Images: 2Server Version: 23.0.1Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 2456e983eb9e37e47538f59ea18f2043c9a73640runc version: v1.1.4-0-g5fd4c4dinit version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-1160.76.1.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 1.777GiBName: clinetID: MC6B:5JJX:53U5:BGLV:SM2E:IMX3:W2IS:DQ7M:JTAE:SA6Z:QL2J:ALVSDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://mqkiky4e.mirror.aliyuncs.com/Live Restore Enabled: falseWARNING: API is accessible on http://0.0.0.0:3276 without encryption.Access to the remote API is equivalent to root access on the host. Referto the 'Docker daemon attack surface' section in the documentation formore information: https://docs.docker.com/go/attack-surface/
[root@clinet ~]#
6. 查看已下载镜像
docker images / docker image ls
[root@clinet ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 904b8cb13b93 2 weeks ago 142MB
mysql latest 3218b38490ce 15 months ago 516MB
[root@clinet ~]#
[root@clinet ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 904b8cb13b93 2 weeks ago 142MB
mysql latest 3218b38490ce 15 months ago 516MB
[root@clinet ~]#
语法:
docker run 启动一个容器
示例1: 启动一个nginx容器,让其在后台运行。
[root@clinet ~]# docker run -d --name nginx_container nginx
c59a4416e41898c2015f729906e0693e6aaa065c386e8af45f414f80a3a3e320
[root@clinet ~]#
-d : 表示启动的容器放在后台,此时容器启动后会范围容器id
--name : 表示给指定创建容器的名称为nginx_container ,不加该参数默认随机创建名称。
nginx : 表示使用的镜像名称,也可以写为 [名称]:[版本号],加版本号则为latest
示例2:启动一个nginx容器,让其在前台运行
[root@clinet ~]# docker run -it --name nginx_1 nginx /bin/bash
root@9600ac1329ba:/#
root@9600ac1329ba:/#
-it : 表示启动一个容器后给他分配一个终端,此时就是在容器的终端内。
/bin/bash :表示分配的终端shell为/bin/bash;有的容器是shell是/bin/sh。
注意:
当我们前台启动一个容器后,我们会在容器的终端内,此时我们要是exit退出容器的终端,该容器就会正常退出(不在是up状态是exited状态
示例3: 进入一个后台启动的容器的终端shell中。
[root@clinet ~]# docker exec -it nginx_1 /bin/bash
root@9600ac1329ba:/#
root@9600ac1329ba:/#
exec :进入一个启动的容器中,容器需要是running状态。
-it :表示分配的终端shell为/bin/bash;有的容器是shell是/bin/sh。
/bin/bash :表示分配的终端shell为/bin/bash;有的容器是shell是/bin/sh。
示例1: 强制关闭一个启动的容器
[root@clinet ~]# docker kill nginx_2
nginx_2
[root@clinet ~]#
强制关闭的容器在docker ps -a查看到的status状态栏为exited 137,异常退出的状态码。
示例2:正常关闭一个容器
[root@clinet ~]# docker stop nginx_container
nginx_container
[root@clinet ~]#
正常关闭的容器在docker ps -a查看到的status状态栏为exited 0,正常常退出的状态码。
示例1. start启动容器
[root@clinet ~]# docker start nginx_2
nginx_2
[root@clinet ~]#
示例2. restart重启容器
[root@clinet ~]# docker restart nginx_2
nginx_2
[root@clinet ~]#
示例1. pasued暂停容器
[root@clinet ~]# docker restart nginx_2
nginx_2
[root@clinet ~]#
docker ps -a 查看的status状态为pasued
示例2. unpasue取消暂停
[root@clinet ~]# docker unpause nginx_2
nginx_2
[root@clinet ~]#
示例1. 删除一个已经停止的容器
[root@clinet ~]# docker rm nginx_1
nginx_1
[root@clinet ~]#
示例2:删除一个还在运行的容器
[root@clinet ~]# docker rm -f nginx_2
nginx_2
[root@clinet ~]#
-f :强制删除正在运行的容器(使用SIGKILL)
-d: 让容器在后台运行(detached mode),并返回容器的 ID。
-it: 将容器的 STDIN 和 STDOUT 绑定到当前的终端,并使用交互模式(interactive mode)。
-p: 将容器内部的端口映射到主机上,格式为 :。
-v: 将主机上的目录挂载到容器内部,格式为 :。
--name: 为容器指定一个名称。
--rm: 容器退出时自动删除容器。
--env: 设置容器内部的环境变量,格式为 =。
--network: 指定容器使用的网络,可以是默认的 bridge 网络或自定义网络。
--link: 将容器连接到另一个容器,以便它们之间可以进行通信。
--restart: 指定容器退出后应该如何重启,例如 always 表示总是重启,on-failure 表示只有在退出代码不为 0 时才重启等等。
--entrypoint: 指定容器启动时要运行的命令,覆盖 Dockerfile 中指定的 CMD。
--user: 指定容器中运行的用户。
--workdir: 指定容器的工作目录。
--memory: 限制容器使用的内存量。
--cpu-shares: 设置容器使用 CPU 的权重。
--env-file: 从文件中读取环境变量并传递给容器。
--label: 给容器添加元数据标签,方便管理和搜索。
--detach-keys: 定义一个分离键,可以使用这个键来从交互式模式下退出容器并保持容器在后台运行。
--privileged: 给容器赋予所有的 Linux 内核权限。
--security-opt: 指定容器的安全选项,例如 seccomp 等。
--stop-timeout: 设置容器停止的超时时间。
--mount: 挂载一个文件系统,可以指定一个本地目录或远程存储。
--shm-size: 设置 /dev/shm 的大小,这是共享内存文件系统。--add-host: 添加主机名和 IP 地址到容器的 /etc/hosts 文件中。
--cap-add 和 --cap-drop: 分别添加和删除容器的 Linux 内核功能,例如可以限制容器访问主机上的设备等。
--cpu-period 和 --cpu-quota: 限制容器使用 CPU 的时间片和配额。
--health-cmd 和 --health-interval: 指定容器健康检查的命令和间隔。
--isolation: 指定容器的隔离级别,可以是 default、process 或 hyperv。
--log-driver 和 --log-opt: 指定容器的日志驱动和选项,例如可以将容器日志输出到文件或远程日志收集器等。
--tmpfs: 挂载一个 tmpfs 文件系统到容器内部,用于存储临时文件。
--add-host: 添加主机名和 IP 地址到容器的 /etc/hosts 文件中。
--cap-add 和 --cap-drop: 分别添加和删除容器的 Linux 内核功能,例如可以限制容器访问主机上的设备等。
--cpu-period 和 --cpu-quota: 限制容器使用 CPU 的时间片和配额。
--health-cmd 和 --health-interval: 指定容器健康检查的命令和间隔。
--isolation: 指定容器的隔离级别,可以是 default、process 或 hyperv。
--log-driver 和 --log-opt: 指定容器的日志驱动和选项,例如可以将容器日志输出到文件或远程日志收集器等。
--tmpfs: 挂载一个 tmpfs 文件系统到容器内部,用于存储临时文件。
还有很多其他的参数,可以使用 docker run --help 查看完整的参数列表。
docker image push命令用于将本地的Docker镜像推送到Docker镜像仓库。使用该命令需要将本地的镜像打上标签,指定要推送的仓库地址和名称,同时需要登录到Docker仓库。
docker image push命令的基本语法:
docker image push [OPTIONS] NAME[:TAG]
NAME和TAG分别是要推送的镜像名称和标签.
以下是使用docker image push命令的步骤:
step1: 找到要推送的本地镜像的名称和标签。您可以使用docker image ls命令列出本地镜像,然后找到要推送的镜像及其标签。例如,如果要推送my-image镜像的v1.0标签,其完整名称应为my-username/my-repo:v1.0。
docker image tag my-image my-username/my-repo:v1.0
step2: 登录Docker镜像仓库,使用docker login命令登录Docker账号。
$ docker login
Username:
Password:
step3:使用docker image push命令将本地镜像推送到Docker镜像仓库
$ docker image push my-username/my-repo:v1.0
如果您要推送的镜像名称包含默认的Docker Hub registry(即Docker Hub),则可以省略该registry的名称。例如,如果您要推送的镜像名称为my-username/myimage,则可以使用以下命令:
$ docker image push my-username/myimage:v1.0
docker image load命令用于从一个tar归档文件或标准输入中加载一个或多个Docker镜像。该命令将归档文件中的镜像加载到本地Docker引擎中,可以使用docker image ls命令来查看这些镜像。
docker image load命令的基本语法:
docker image load [OPTIONS]
OPTIONS包括以下选项:
-i, --input:从指定的归档文件中加载镜像。-q, --quiet:不显示加载镜像的详细信息。
示例: 假设您有一个名为my-images.tar的归档文件,其中包含了两个Docker镜像,可以使用以下命令将这些镜像加载到本地Docker引擎中:
docker image load -i my-images.tar
在上面的示例中,
-i选项用于指定要加载的归档文件,my-images.tar是归档文件的名称。加载镜像时,Docker将显示每个镜像的名称、标签、大小等信息。请注意,
docker image load命令会将归档文件中的所有镜像都加载到本地Docker引擎中。如果归档文件中包含的镜像已经存在于本地Docker引擎中,则将覆盖已有的镜像。
docker image import命令用于从文件或标准输入中导入一个文件系统作为一个新的Docker镜像。该命令将文件系统中的内容打包成一个Docker镜像,并将其保存在本地Docker引擎中。可以使用docker image ls命令来查看这个新的镜像。
基础语法:
docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS包括以下选项:
--change:应用Dockerfile中的指令。--message:设置导入的镜像的描述信息。
file|URL|-参数指定要导入的文件系统的路径或URL,或者使用-表示从标准输入中读取文件系统。REPOSITORY和TAG参数用于指定要创建的新镜像的名称和标签。
示例:假设您有一个名为my-file-system.tar的文件系统,您想要将其导入为一个名为my-image的Docker镜像,可以使用以下命令:
docker image import my-file-system.tar my-image:latest
在上面的示例中,
my-file-system.tar是文件系统的名称,my-image:latest是要创建的新镜像的名称和标签。请注意,导入的文件系统不包括任何运行时状态,如进程、环境变量等。它仅包括文件系统本身的内容。如果需要在导入的镜像中运行应用程序,您可能需要通过其他方式将应用程序和相关文件导入到镜像中。
docker image build:从Dockerfile构建镜像。
docker image history:显示镜像的历史记录,包括每个历史层的创建时间、作者、命令等信息。
docker image import:将来自tar归档文件的内容导入到一个文件系统镜像中。
docker image inspect:显示有关一个或多个镜像的详细信息,包括标签、创建时间、作者、命令、配置等信息。
docker image load:从一个tar归档文件或标准输入中加载一个镜像。
docker image ls:列出本地的镜像列表。
docker image prune:删除未使用的本地镜像。
docker image pull:从镜像仓库拉取镜像。
docker image push:将本地镜像推送到镜像仓库。
docker image rm:删除一个或多个本地镜像。
docker image save:将一个或多个镜像保存为一个tar归档文件。
docker image tag:为一个镜像打上一个或多个标签。
关于docker run,image,swarm的相关参数和使用我们在后续docker系列文章中还会详细说明。