2.1 镜像管理

任务一:下载镜像
Docker 镜像存储在 Docker Hub 或其他镜像仓库中。我们可以使用 docker pull
命令从这些仓库中下载镜像到本地。
docker pull ubuntu:14.04
这个命令会从 Docker Hub 下载标签为 14.04 的 Ubuntu 镜像。其中 ubuntu
是镜像名称,14.04
是标签(通常表示版本)。
成功下载后,你将看到类似下图的输出:
Docker Hub 的网站在国外,从国内访问经常出现问题,可以选择从其他镜像仓库获取:
docker pull harbor.seahi.me/docker/ubuntu:14.04
Docker 会分层下载镜像,每一行代表一个镜像层。当所有层都下载完成后,Docker 会将这些层组合成一个完整的镜像。
任务二:镜像标签
Docker 镜像可以有多个标签,这些标签帮助我们识别和管理镜像。我们可以使用 docker tag
命令为现有镜像创建新的标签。
1.查看刚才下载镜像的ID
docker images
此命令列出本地所有镜像,包括它们的仓库名、标签、ID、创建时间和大小。
2.为镜像添加新标签
docker tag 13b66b487594 ubuntu:14.04a
这个命令为 ID 为 13b66b487594
的镜像创建了一个新标签 14.04a
,但仓库名仍然是 ubuntu
。
注意:添加新标签不会创建新的镜像,只是为同一个镜像创建了一个新的引用。你可以看到两个镜像条目的 ID 是相同的,这表明它们指向同一个镜像。
3.改仓库名
docker tag 13b66b487594 ubuntua:14.04a
这个命令不仅修改了标签,还修改了仓库名为 ubuntua
。
查看效果:
4.增加命名空间
在 Docker 中,命名空间通常用于组织和分类镜像。
docker tag 13b66b487594 docker/ubuntu:14.04
这个命令为镜像添加了 docker
命名空间,完整的镜像名称变为 docker/ubuntu:14.04
。
查看效果:
5.增加注册服务器
如果你想将镜像推送到私有仓库,需要在镜像名称前加上注册服务器的地址。
docker tag 13b66b487594 harbor.seahi.me/docker/ubuntu:14.04
这个命令指定了注册服务器为 harbor.seahi.me
。
提示:完整的 Docker 镜像名称格式为:
注册服务器地址/命名空间/[仓库名]:[标签]
。其中,注册服务器地址和命名空间是可选的。
任务三:镜像详细信息
1.查看完整详细信息
docker inspect d2c94e258dcb
这个命令会以 JSON 格式显示镜像的所有元数据信息,包括层、配置、创建时间等。
2.筛选特定信息
如果你只关心镜像的某些特定信息,可以使用 --format
选项进行筛选:
docker inspect --format='{{.Architecture}}' d2c94e258dcb
docker inspect --format='{{.Os}}' d2c94e258dcb
第一个命令显示镜像的架构(如 amd64、arm64 等),第二个命令显示镜像的操作系统。
--format
选项使用 Go 模板语法来筛选 JSON 输出。你可以根据需要筛选任何字段,只需替换大括号中的内容即可。常用的字段还有 .Config.Cmd
(默认命令)、.Created
(创建时间)等。任务三:查看镜像构建历史
Docker 镜像是由多个层组成的,每一层代表了 Dockerfile 中的一条指令或操作。我们可以使用 history
命令来查看镜像的构建历史。
docker history [镜像ID或名称]
从输出可以看到,这个镜像由 6 层组成,每一层都有其创建时间、大小和创建命令。
说明:镜像的分层结构是 Docker 的一个重要特性,它允许不同的镜像共享相同的层,从而节省存储空间和提高构建效率。
任务四:查找镜像
Docker Hub 上有大量的官方和社区镜像。我们可以使用 search
命令在 Docker Hub 上搜索镜像。
1.使用 search 子命令进行查找,如查找名为 httpd 的镜像
docker search httpd
这个命令会搜索 Docker Hub 上与 “httpd” 相关的镜像,并显示它们的名称、描述、星级等信息。
2.下载其中一个
docker pull httpd
docker pull httpd:2.4
。任务五:删除镜像
当不再需要某个镜像时,可以使用 rmi
命令(remove image 的缩写)将其删除,以释放磁盘空间。
docker rmi httpd
你也可以使用镜像 ID 来删除镜像:
docker rmi [镜像ID]
注:rmi 是 remove image 的缩写
-f
选项强制删除。作业
在这个作业中,我们将通过构建一个简单的 Docker 镜像来验证镜像的分层结构。
1. 创建工作目录
mkdir -p /root/demo0311/app
cd /root/demo0311
2. 创建一个简单的 Python 程序
vim app/app.py
输入以下内容:
#!/usr/bin/python
print("Hello, World!")
这是一个非常简单的 Python 程序,它只是打印 “Hello, World!"。
3. 创建 Dockerfile
Dockerfile 是构建 Docker 镜像的脚本文件,它包含了一系列指令,告诉 Docker 如何构建镜像。
vim Dockerfile
输入以下内容:
FROM ubuntu:16.04
COPY ./app /app
RUN apt-get -y update && apt-get install -y python
CMD python /app/app.py
这个 Dockerfile 包含四个指令:
FROM
:指定基础镜像为 Ubuntu 16.04COPY
:将本地的 app 目录复制到镜像的 /app 目录RUN
:在镜像中执行命令,更新包列表并安装 PythonCMD
:指定容器启动时执行的命令
4. 构建镜像
docker build . -t myapp
这个命令会根据当前目录下的 Dockerfile 构建一个名为 myapp
的镜像。
说明:构建过程中,Docker 会执行 Dockerfile 中的每一条指令,并为每条指令创建一个新的层。
.
表示构建上下文是当前目录,-t myapp
为新镜像指定名称和标签。
5. 验证镜像的分层结构
docker history myapp
这个命令会显示 myapp
镜像的所有层,包括每一层的大小、创建时间和创建命令。
从输出可以看到,镜像由多个层组成,每一层对应 Dockerfile 中的一条指令:
- 最底层是基础镜像
ubuntu:16.04
- 中间层包括复制应用文件和安装 Python
- 最上层是设置容器启动命令
重要概念:Docker 镜像是只读的分层文件系统。每一层都是对前一层的修改集合。当容器运行时,Docker 会在最上层添加一个可写层,所有对容器的修改都保存在这个可写层中,而底层的镜像层保持不变。
总结
通过本实验,你已经学习了 Docker 镜像的基本操作,包括:
- 下载镜像(
docker pull
) - 管理镜像标签(
docker tag
) - 查看镜像信息(
docker inspect
、docker history
) - 搜索镜像(
docker search
) - 删除镜像(
docker rmi
) - 构建自定义镜像(
docker build
)
这些操作是使用 Docker 的基础,掌握它们将帮助你更有效地管理容器化应用程序。