2.1 镜像管理

回顾
一个完整的镜像名包括:注册中心/仓库名:标签
- 其中注册中心和标签都可以省略
- 默认的注册中心是
docker.io - 默认的标题是
latest
- 默认的注册中心是
- 仓库名不可省略,有两种写法:
用户名/软件名用户名也可以叫项目名(Harbor)、命名空间(阿里)等软件名
任务一:拉取和查看
Docker 镜像存储在 Docker Hub 或其他镜像仓库中。我们可以使用 docker pull 命令从这些仓库中下载镜像到本地。
docker pull ubuntu:14.04
这个命令会从 Docker Hub 下载标签为 14.04 的 Ubuntu 镜像。其中 ubuntu 是镜像名称,14.04是标签(通常表示版本)。
成功下载后,你将看到类似下图的输出:

Docker 会分层下载镜像,每一行代表一个镜像层。当所有层都下载完成后,Docker 会将这些层组合成一个完整的镜像。
Docker Hub 的网站在国外,从国内访问经常出现问题,可以选择从其他镜像仓库获取:
docker pull harbor.seahi.me/docker/ubuntu:14.04
下载完成后,使用命令 docker images 进行查看
任务二:镜像改名
先准备几个镜像用来做练习:
1. ubuntu:latest
2. helloworld:latest
3. ubuntu:14.04
可以使用 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 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。

任务三:删除镜像
练习
练习一:发布稳定版
我们的项目需要一个稳定的基础镜像,希望为 ubuntu:latest 打上一个新的标签 ubuntu:stable,以表示这是我们的稳定版本。
请执行以下操作:
- 使用
docker tag命令为ubuntu:latest创建名为ubuntu:stable的新标签。 - 使用
docker images命令查看结果,并观察新标签的IMAGE ID是否与ubuntu:latest完全相同。
练习二:发布新版本
假设 helloworld:latest 是我们开发的应用程序镜像。现在版本 1.0 开发完毕,需要为其创建一个带版本号的标签 helloworld:v1.0。
请执行以下操作:
- 使用
docker tag命令,基于helloworld:latest创建helloworld:v1.0标签。 - 再次使用
docker tag命令,将helloworld:v1.0重新标记为helloworld:prod(模拟上线生产环境)。 - 最后,使用
docker images列出所有helloworld相关的镜像,查看现在有几个标签。
docker images helloworld 命令,观察结果有什么特点?练习三:添加仓库路径(为推送做准备)
现在需要将旧的 ubuntu:14.04 镜像推送至公司的私有仓库 my-registry.com:5000 的 base/ubuntu 仓库中。
pull是将镜像从网上下载到本地;推送push是将镜像从本地上传到网上。思考:推送到网络上的哪个位置?或者说,哪个注册中心(网站)?请执行以下操作:
- 使用
docker tag命令,为ubuntu:14.04创建一个符合私有仓库规范的新标签my-registry.com:5000/base/ubuntu:14.04。
问题: 为什么在推送镜像到仓库之前,必须使用 docker tag 为其添加完整的仓库地址




