Docker容器镜像管理、制作
什么是容器?
容器技术是继大数据和云计算之后又一炙手可热的技术,而且未来相当一段时间内都会非常流行。
对 IT 行业来说,这是一项非常有价值的技术。而对 IT 从业者来说,掌握容器技术是市场的需要,也是提升自我价值的重要途径。
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
Docker安装的重要工具
bash
# devicemapper 存储驱动已经在 docker 18.09 版本中被废弃, 所以在后续的安Docker装中无需安装
devicemapper支持。
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
vim
[root@localhost ~]# yum-config-manager --add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/dockerce.repo
[root@localhost ~]# yum makecache
Docker CE Stable - x86_64
57 kB/s | 66 kB 00:01
CentOS Stream 8 - BaseOS
8.3 kB/s | 3.9 kB 00:00
CentOS Stream 8 - AppStream
9.8 kB/s | 4.4 kB 00:00
Metadata cache created.
# 安装软件
[root@docker ~]# yum install -y docker-ce
# 配置服务
[root@docker ~]# systemctl enable docker.service --now
# 验证安装 查看docker版本
[root@docker ~]# docker --version
Docker version 26.1.3, build b72abbb
# 验证docker状态
[root@docker ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor
preset: disabled)
Active: active (running) since Wed 2025-09-03 13:51:07 CST; 36s ago
Docs: https://docs.docker.com
Main PID: 1813 (dockerd)
Tasks: 10
Memory: 135.7M
CGroup: /system.slice/docker.service
└─
1813 /usr/bin/dockerd -H fd:// --
containerd=/run/containerd/containerd.sock
bash
# 清空环境命令
[root@docker ~]# docker rm -f $(docker ps -aq) #删除所有容器
[root@docker ~]# docker rmi -f hello-world #删除镜像hello-world
容器与虚拟机
容器由两部分组成:
- 应用程序本身
- 依赖:比如应用程序需要的库或其他软件
容器在 Host 操作系统的用户空间中运行,与操作系统的其他进程隔离。这一点显著区别于的虚拟机。
传统的虚拟化技术,比如 VMWare, KVM, Xen,目标是创建完整的虚拟机。为了运行应用,除了部署应用本身及其依赖(通常几十 MB),还得安装整个操作系统(几十 GB)。
下图展示了二者的区别。

Why - 为什么需要容器?
容器使软件具备了超强的可移植能力。
Docker 的特性

容器的优势
对于开发人员 - Build Once, Run Anywhere
容器意味着环境隔离和可重复性。开发人员只需为应用创建一次运行环境,然后打包成容器便可在其他机器上运行。另外,容器环境与所在的 Host 环境是隔离的,就像虚拟机一样,但更快更简单。
对于运维人员 - Configure Once, Run Anything
只需要配置好标准的 runtime 环境,服务器就可以运行任何容器。这使得运维人员的工作变得更高效,一致和可重复。容器消除了开发、测试、生产环境的不一致性。
容器与虚拟机比较

Docker介绍
Docker提供了各种容器管理工具 (如分发、版本、移植等),让用户无需关注底层的操作,可以更简单明了地管理和使用容器;其次, Docker引入分层文件系统构建和高效的镜像机制降低了迁移难度,极大地提升了用户体验。用户操作Docker容器就像操作应用自身一样简单。
简单地讲,可以将Docker容器理解为一种轻量级的沙盒 (sandbox)。 每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。
Docker核心概念
Docker的大部分操作都围绕着它的三大核心概念------镜像、容器和仓库而展开。
Docker架构详解
完整的Docker由以下几部分构成:
- (1) 守护进程(Daemon): Docker守护进程(dockerd)侦听Docker API请求并管理Docker对象,,如图像、容器、网络和卷。守护进程还可以与其他守护进程通信来管理Docker服务。
- (2) REST API: 主要与Docker Daemon进行交互,比如Docker Cli或者直接调用REST API;
- (3) 客户端(Docker Client): 它是与Docker交互的主要方式通过命令行接口(CLI)客户端(docker命令),客户机将命令通过REST API发送给并执行其命令;
- (4) Register Repository 镜像仓库: Docker注册表存储Docker镜像,可以采用Docker Hub是公共注册仓库,或者采用企业内部自建的Harbor私有仓库;
- (5) Image 镜像: 映像是一个只读模板,带有创建Docker容器的指令。映像通常基于另一个映像,还需要进行一些额外的定制,你可以通过Docker Hub公共镜像仓库进行拉取对应的系统或者应用镜像;
- (6) Container 容器: 容器是映像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将一个容器连接到一个或多个网络,将存储附加到它,甚至根据它的当前状态创建一个新映像。
- (7) Services : Docker引擎支持集群模式服务允许您跨多个Docker守护进程()扩展管理容器,服务允许您定义所需的状态,例如在任何给定时间必须可用的服务副本的数量。默认情况下,服务在所有工作节点之间进行负载平衡。对于使用者来说Docker服务看起来是一个单独的应用程序;
Docker 的核心组件包括:
- Docker 客户端 - Client
- Docker 服务器 - Docker daemon
- Docker 镜像 - Image
- Registry
- Docker 容器 - Container

镜像
hello-world - 最小的镜像
hello-world 是 Docker 官方提供的一个镜像,通常用来验证 Docker 是否安装成功。
我们先通过 docker pull 从 Docker Hub 下载它。
bash
[root@docker ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:91fb4b041da273d5a3273b6d587d62d518300a6ad268b28628f74997b93171b2
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
bash
# 查看镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 16 months ago 13.3kB
# 通过 docker run 运行
[root@docker ~]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
base镜像
bash
[root@docker ~]# docker images centos:7
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 3 years ago 204MB
镜像大小不到 300MB。
base 镜像提供的是最小安装的 Linux 发行版。
镜像的分层结构
Docker 支持通过扩展现有镜像,创建新的镜像。
可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层

最大的一个好处就是 - 共享资源。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
构建镜像
对于 Docker 用户来说,最好的情况是不需要自己创建镜像。几乎所有常用的数据库、中间件、应用软件等都有现成的 Docker 官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用。
Docker 提供了两种构建镜像的方法:
- docker commit 命令
- Dockerfile 构建文件
docker commit
docker commit 命令是创建新镜像最直观的方法,其过程包含三个步骤:
- 运行容器
- 修改容器
- 将容器保存为新的镜像
举个例子:在 ubuntu base 镜像中安装 vim并保存为新镜像。
- 第一步, 运行容器
bash
[root@docker ~]# docker run -it ubuntu
root@8dbdff6d3d88:/#
-it 参数的作用是以交互模式进入容器,并打开终端。8dbdff6d3d88 是容器的内部 ID。
- 安装 vim
确认 vim 没有安装
bash
root@8dbdff6d3d88:/# vim
bash: vim: command not found
安装 vim。
bash
root@8dbdff6d3d88:/# apt-get update
root@8dbdff6d3d8:/# apt-get install -y vim
1. Africa 2. America 3. Antarctica 4. Arctic 5. Asia 6. Atlantic 7.
Australia 8. Europe 9. Indian 10. Pacific 11. Etc
Geographic area: 5
Please select the city or region corresponding to your time zone.
1. Aden 12. Bangkok 23. Dili 34. Istanbul 45.
Krasnoyarsk 56. Novosibirsk 67. Samarkand 78. Tokyo
2. Almaty 13. Barnaul 24. Dubai 35. Jakarta 46.
Kuala_Lumpur 57. Omsk 68. Seoul 79. Tomsk
3. Amman 14. Beirut 25. Dushanbe 36. Jayapura 47. Kuching
58. Oral 69. Shanghai 80. Ulaanbaatar
4. Anadyr 15. Bishkek 26. Famagusta 37. Jerusalem 48. Kuwait
59. Phnom_Penh 70. Singapore 81. Urumqi
5. Aqtau 16. Brunei 27. Gaza 38. Kabul 49. Macau
60. Pontianak 71. Srednekolymsk 82. Ust-Nera
6. Aqtobe 17. Chita 28. Harbin 39. Kamchatka 50. Magadan
61. Pyongyang 72. Taipei 83. Vientiane
7. Ashgabat 18. Choibalsan 29. Hebron 40. Karachi 51. Makassar
62. Qatar 73. Tashkent 84. Vladivostok
8. Atyrau 19. Chongqing 30. Ho_Chi_Minh 41. Kashgar 52. Manila
63. Qostanay 74. Tbilisi 85. Yakutsk
9. Baghdad 20. Colombo 31. Hong_Kong 42. Kathmandu 53. Muscat
64. Qyzylorda 75. Tehran 86. Yangon
10. Bahrain 21. Damascus 32. Hovd 43. Khandyga 54. Nicosia
65. Riyadh 76. Tel_Aviv 87. Yekaterinburg
11. Baku 22. Dhaka 33. Irkutsk 44. Kolkata 55.
Novokuznetsk 66. Sakhalin 77. Thimphu 88. Yerevan
Time zone: 69
- 保存为新镜像
打开一个新窗口中查看当前运行的容器。
bash
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
8dbdff6d3d88 ubuntu "/bin/bash" 2 minutes ago Up 2 minutes
cool_darwin
上面查看结果的解释如下:
8dbdff6d3d88 是新创建容器的ID
cool_darwin 是 Docker 为我们的容器随机分配的名字。
执行 docker commit 命令将容器保存为镜像。
bash
[root@docker ~]# docker commit cool_darwin ubuntu-with-vim #cool_darwin是容器
名,ubuntu-with-vim是新建的镜像名
sha256:ba18ae460c068f9bdba060350e64dcec4bc4af05b9918602ee34e6350d0369a4
新镜像命名为 ubuntu-with-vim 。
查看新镜像的属性。
bash
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-with-vim latest acefd029083b 27 minutes ago 189MB
ubuntu latest edbfe74c41f8 5 weeks ago 78.1MB
从 size 上看到镜像因为安装了软件而变大了。
从新镜像启动容器,验证 vim 已经可以使用。
[root@docker ~]# docker run -it ubuntu-with-vim #ubuntu-with-vim是新创建的镜像名
root@4d071cf3014f:/# which vim
/usr/bin/vim
root@4d071cf3014f:/# vim file1
Dockerfile构建镜像
Dockerfile 是一个文本文件,记录了镜像构建的所有步骤。
Dockerfile内容基础知识:
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层并对镜像进行提交
第一个 Dockerfile
运行 docker build 命令构建镜像并详细分析每个细节
bash
[root@docker ~]# cd /root #生产环境一般新建一个目录, 里面写
Dockerfile, 一个项目
[root@docker ~]# vim Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y vim
[root@docker ~]# docker build -t ubuntu-with-vim-dockerfile .

① 当前目录为 /root。
② Dockerfile 准备就绪。
③ 运行 docker build 命令, -t 将新镜像命名为 ubuntu-with-vim-dockerfile ,命令末尾的 . 指明build context 为当前目录。 Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置。
④ 从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Dockerdaemon。 build context 为镜像构建提供所需要的文件或目录。Dockerfile 中的 ADD、 COPY 等命令可以将 build context 中的文件添加到镜像。此例中, build context为当前目录 /root ,该目录下的所有文件和子目录都会被发送给 Docker daemon。所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 / 、 /usr 作为 build context,否则构建过程会相当缓慢甚至失败。
⑤ Step 1:执行 FROM ,将 ubuntu 作为 base 镜像。
⑥ Step 2:执行 RUN ,安装 vim
⑦ 镜像构建成功。
⑧ 镜像重命名为ubuntu-with-vim-dockerfile
通过 docker images 查看镜像信息。
bash
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-with-vim-dockerfile latest bbc08145d011 10 minutes ago 189MB
ubuntu-with-vim latest acefd029083b 27 minutes ago 189MB
ubuntu latest edbfe74c41f8 5 weeks ago 78.1MB
调试Dockerfile
包括 Dockerfile 在内的任何脚本和程序都会出错。有错并不可怕,但必须有办法排查,所以本节讨论如何 debug Dockerfile。
先回顾一下通过 Dockerfile 构建镜像的过程:
- 从 base 镜像运行一个容器。
- 执行一条指令,对容器做修改。
- 执行类似 docker commit 的操作,生成一个新的镜像层。
- Docker 再基于刚刚提交的镜像运行一个新容器。
- 重复 2-4 步,直到 Dockerfile 中的所有指令执行完毕。
从这个过程可以看出,如果 Dockerfile 由于某种原因执行到某个指令失败了,我们也将能够得到前一个指令成功执行构建出的镜像,这对调试 Dockerfile 非常有帮助。我们可以运行最新的这个镜像定位指令失败的原因。
我们来看一个调试的例子。 Dockerfile 内容如下:

执行 docker build :
bash
[root@docker ~]# ls #查看下有没有Dockerfile和testfile
Dockerfile testfile
[root@docker ~]# vim Dockerfile #编辑Dockerfile, 写入上图的内容
FROM busybox
RUN touch tmpfile
RUN /bin/bash -c "echo continue to build..."
COPY testfile /
[root@docker ~]# docker build -t image-debug . #基于刚才写的Dockerfile构建镜像
image-debug

Dockerfile 在执行第三步 RUN 指令时失败。我们可以利用busybox的镜像进行调试,方式是通过
docker run -it 启动镜像的一个容器。

手工执行 RUN 指令很容易定位失败的原因是 busybox 镜像中没有 bash, busybox中用的是sh。虽然这是个极其简单的例子,但它很好地展示了调试 Dockerfile 的方法
bash
# 找出错误原因, 修改错误
[root@docker ~]# vim Dockerfile
FROM busybox
RUN touch tmpfile
RUN /bin/sh -c "echo continue to builld..." #将错误的/bin/bash修改为正确
的/bin/sh
COPY testfile /
[root@docker ~]# docker build -t image-debug . #基于刚才写的Dockerfile构建镜像
image-debug
成功!

Dockerfile常用指令
下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档。
FROM
指定 base 镜像。第一条必须是FROM
MAINTAINER
设置镜像的作者,可以是任意字符串。
COPY
将文件从 build context 复制到镜像。
COPY 支持两种形式:
- COPY src dest
- COPY ["src", "dest"]
注意: src 只能指定 build context 中的文件或目录。
ADD
与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz等),文件会被自动解压到 dest。
ENV
设置环境变量,环境变量可被后面的指令使用。
EXPOSE
指定容器中的进程会监听某个端口, Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。
VOLUME
将文件或目录声明为 volume。我们会在容器存储部分详细讨论。
WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN
在容器中运行指定的命令。
CMD
容器启动时运行指定的命令。
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。 CMD 可以被 docker run 之后的参数替换。
ENTRYPOINT
设置容器启动时运行的命令。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。 CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。
下面我们来看一个较为全面的 Dockerfile:
bash
# my dockerfile
FROM busybox #从busybox开始构建
MAINTAINER 6946630@qq.com #声明作者信息
WORKDIR /testdir #设置工作目录为/testdir
RUN touch tmpfile1 #在新镜像中创建tmpfille1
COPY ["tmpfile2","."] #将Dockerfile文件所在目录中的tmpfile2文件拷贝到新镜
像中
ADD ["passwd.tar.gz","."] #将Dockerfile文件所在目录中的passwd.tar.gz拷贝到
新镜像中并解压缩
ENV WELCOME "You are in my container,welcome!" #设置环境变量为WELOCME
完整的操作步骤如下:
bash
[root@docker ~]# pwd #确定Dockerfile工作目录
/root
[root@docker ~]# ls #当前/root目录下空的
[root@docker ~]# touch tmpfile2 #创建空文档tmpfile2
[root@docker ~]# cp /etc/passwd . #将/etc/passwd文件拷贝到/root
[root@docker ~]# tar -cvzf passwd.tar.gz passwd #将passwd文件做出归档文件
passwd.tar.gz
passwd
[root@docker ~]# rm passwd #删除passwd文件
rm: remove regular file 'passwd'? y
[root@docker ~]# vim Dockerfile #编辑Dockerfile写入如下内容
# my dockerfile
FROM busybox
MAINTAINER 6946630@qq.com
WORKDIR /testdir
RUN touch tmpfile1
COPY ["tmpfile2","."]
ADD ["passwd.tar.gz","."]
ENV WELCOME "You are in my container,welcome!"
[root@docker ~]# ls #最后目录中有三个文件
Dockerfile passwd.tar.gz tmpfile2
[root@docker ~]# docker build -t my-image . #构建新镜像my-image

① 构建前确保 build context 中存在需要的文件。
② 依次执行 Dockerfile 指令,完成构建。
运行容器,验证镜像内容:

① 进入容器,当前目录即为 WORKDIR。
如果 WORKDIR 不存在, Docker 会自动为我们创建。
② WORKDIR 中保存了我们希望的文件和目录:
文件passwd:由 ADD 指令从 build context 复制的归档文件passwd.tar.gz,已经自动解压。
文件 tmpfile1:由 RUN 指令创建。
文件 tmpfile2:由 COPY 指令从 build context 复制。
③ ENV 指令定义的环境变量已经生效。
Docker镜像小结
下面是镜像的常用操作子命令:
images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建新镜像
build 从 Dockerfile 构建镜像
tag 给镜像打 tag
pull 从 registry 下载镜像
push 将 镜像 上传到 registry
rmi 删除 Docker host 中的镜像
search 搜索 Docker Hub 中的镜像
rmi
rmi 只能删除 host 上的镜像,不会删除 registry 的镜像。
保存本地镜像为文件-save
docker默认使用overlay2存储驱动存储镜像。
bash
[root@docker ~]# docker info | grep 'Storage Driver'
Storage Driver: overlay2
bash
[root@docker ~]# docker save httpd -o httpd.tar #httpd是镜像名 httpd.tar是
要保存的文件名
[root@docker ~]# docker save httpd hello-world -o images.tar #将httpd,helloworld镜像保存为images.tar
[root@docker ~]# ls
httpd.tar images.tar
将本地镜像文件导入本地-load
bash
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 90f191b9781e 11 days ago 148MB
hello-world latest 74cc54e27dc4 6 months ago 10.1kB
[root@docker ~]# docker rmi httpd:latest hello-world:latest
Untagged: httpd:latest
Untagged:
httpd@sha256:f84fe51ff5d35124e024f51215b443b16c939b24eae747025a515200e71c7d07
Deleted: sha256:90f191b9781e01f5cd601af7b32d4ebb46770d1a98fa9170c328f9a78458b758
Deleted: sha256:8cbdaf91f3d9b2916bd85a36c608c8b652176b92266a6c51ead6c52f487b9eb5
Deleted: sha256:352b0ea3b9e318a2111200ed85540548a23873ce5ab5e6076b1dcef0110724ce
Deleted: sha256:7810a27010681e9307dae49c3673a021928add80b99e43937d79a3c5322cb862
Deleted: sha256:3c75e1b632ae15a9a14d7527fb134de5d45b2abcf3eef1cfaa057d702b957dba
Deleted: sha256:4eabd365f7baf2356d8d27adb4a182e45fca9dfc1d5533e93832c243135a5aa9
Deleted: sha256:1bb35e8b4de116e84b2ccf614cce4e309b6043bf2cd35543d8394edeaeb587e3
Untagged: hello-world:latest
Untagged: helloworld@sha256:ec153840d1e635ac434fab5e377081f17e0e15afab27beb3f726c3265039cfff
Deleted: sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602
Deleted: sha256:63a41026379f4391a306242eb0b9f26dc3550d863b7fdbb97d899f6eb89efe72
[root@docker ~]# docker images #本地没有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
导入镜像
bash
[root@docker ~]# docker load -i images.tar
1bb35e8b4de1: Loading layer 77.88MB/77.88MB
6c5ea8a96778: Loading layer 2.56kB/2.56kB
5f70bf18a086: Loading layer 1.024kB/1.024kB
785236f38f5b: Loading layer 11.41MB/11.41MB
5ca968893b91: Loading layer 62.99MB/62.99MB
b4558c4e936a: Loading layer 3.584kB/3.584kB
Loaded image: httpd:latest
63a41026379f: Loading layer 11.78kB/11.78kB
Loaded image: hello-world:latest
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 90f191b9781e 11 days ago 148MB
hello-world latest 74cc54e27dc4 6 months ago 10.1kB
说明:如果本地镜像名与导入的镜像重名,则本地的镜像会被覆盖。
bash
[root@docker ~]# docker rm -f $(docker ps -aq) #删除所有容器
[root@docker ~]# docker rmi -f $(docker images -aq) #删除所有镜像
/2.56kB
5f70bf18a086: Loading layer 1.024kB/1.024kB
785236f38f5b: Loading layer 11.41MB/11.41MB
5ca968893b91: Loading layer 62.99MB/62.99MB
b4558c4e936a: Loading layer 3.584kB/3.584kB
Loaded image: httpd:latest
63a41026379f: Loading layer 11.78kB/11.78kB
Loaded image: hello-world:latest
root@docker \~\]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest 90f191b9781e 11 days ago 148MB hello-world latest 74cc54e27dc4 6 months ago 10.1kB **说明:如果本地镜像名与导入的镜像重名,则本地的镜像会被覆盖。** ```bash [root@docker ~]# docker rm -f $(docker ps -aq) #删除所有容器 [root@docker ~]# docker rmi -f $(docker images -aq) #删除所有镜像