15.3.2 镜像拉取与标签管理
镜像拉取与标签管理#
镜像拉取与标签管理决定了容器运行的版本可控性与环境一致性。本节通过原理草图、完整命令示例、常见故障排查与练习,建立可执行的镜像拉取与标签规范。
一、原理草图:拉取与标签解析流程
二、环境准备(安装与验证)
# 安装 Docker(以 CentOS 7 为例)
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动并验证
sudo systemctl enable --now docker
docker version
docker info | grep -i "Registry"
三、镜像拉取与标签管理(完整示例)
1) 基础拉取与说明
# 拉取最新版本(不建议用于生产)
docker pull nginx
# 解释:未指定标签时默认使用 latest
# 拉取指定版本
docker pull nginx:1.25
# 解释:固定版本,避免隐式升级
# 拉取私有仓库镜像
docker pull registry.example.com/project/nginx:1.25
# 解释:registry.example.com 为私有仓库地址
2) 多架构拉取
# 明确平台架构
docker pull --platform linux/amd64 nginx:1.25
# 解释:在 ARM 主机上拉取 x86 镜像时必须显式指定
3) 镜像标签管理
# 为镜像创建新标签(不复制层,只改名)
docker tag nginx:1.25 nginx:stable
# 解释:nginx:stable 指向同一镜像ID
# 打标签推送到私有仓库
docker tag nginx:1.25 registry.example.com/project/nginx:1.25
# 查看本地镜像与标签
docker images
# 删除标签(镜像仍在,除非无引用)
docker rmi nginx:stable
4) 不可变引用(Digest)
# 先查看 digest
docker pull nginx:1.25
docker images --digests | grep nginx
# 使用 digest 拉取
docker pull nginx@sha256:YOUR_DIGEST_VALUE
# 解释:digest 指向不可变镜像,适合生产部署
四、标签规范与示例
- 推荐命名:{app}:{version}-{env}
- 示例:
- web:1.2.0-dev
- web:1.2.0-test
- web:1.2.0-prod
# 示例:为不同环境打标签
docker tag web:1.2.0 web:1.2.0-dev
docker tag web:1.2.0 web:1.2.0-prod
五、常见故障与排错
1) 拉取超时/连接失败
# 现象:i/o timeout 或 TLS handshake timeout
# 排查网络与 DNS
ping -c 3 registry-1.docker.io
cat /etc/resolv.conf
# 使用镜像加速器(以阿里云为例)
sudo mkdir -p /etc/docker
cat <<'EOF' | sudo tee /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl restart docker
2) 无权限(私有仓库)
# 现象:unauthorized: authentication required
docker login registry.example.com
# 输入用户名和密码后重试 pull
3) 镜像不存在或标签错误
# 现象:manifest unknown
# 解决:检查仓库与标签是否正确
docker pull nginx:1.25.0 # 正确标签
docker pull nginx:1.25.99 # 错误示例
六、练习(动手)
1) 拉取 nginx:1.25,并打三个标签:dev、test、prod。
2) 使用 docker images --digests 获取 digest,并用 digest 再次拉取。
3) 模拟错误标签,观察报错并记录日志内容。
4) 将镜像改名为 registry.example.com/lab/nginx:1.25,为推送做准备。