镜像命名规范
镜像名的结构
完整的 Docker 镜像名由四个部分组成:
[registry-host[:port]/]namespace/repository[:tag]
↑ ↑ ↑ ↑
仓库地址 命名空间 仓库名 标签
各部分详解
# 全称
docker pull registry.example.com:5000/team-a/myapp:1.0.0
# 省略仓库地址(默认 Docker Hub)
docker pull nginx:latest # = docker.io/library/nginx:latest
# 省略标签(默认 latest)
docker pull nginx # = docker.io/library/nginx:latest
# 完整的 Docker Hub 镜像
docker pull docker.io/library/nginx:1.24-alpine
规范的命名示例
按层级组织
# 组织/项目/服务:版本
mycompany/backend/api-gateway:1.2.3
mycompany/backend/user-service:2.0.0
mycompany/frontend/web-app:3.1.0
# 团队/项目:版本
team-alpha/analytics-service:1.0.0
team-beta/report-engine:0.5.0
不同仓库的命名风格
# Docker Hub
username/app:tag
library/nginx:1.24 # 官方镜像无需用户名
# GitHub Container Registry
ghcr.io/username/app:tag
ghcr.io/org/team/app:tag
# GitLab Container Registry
registry.gitlab.com/namespace/project:tag
# AWS ECR
123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:tag
# Azure ACR
myregistry.azurecr.io/team/project:tag
# 私有仓库
registry.example.com:5000/project/component:tag
标签(Tag)命名规范
语义化版本
# 推荐格式:MAJOR.MINOR.PATCH
app:1.0.0
app:2.1.0-beta
app:3.0.0-rc1
# 可变标签
app:latest # 最新版本(可能指代不明确)
app:stable # 稳定版本
app:1.x # 1.x 系列最新
构建标识
# Git SHA
app:abc123def456 # 完整 SHA
app:abc123de # 短 SHA
# CI 构建号
app:build-1234
app:BUILD_20231201
# 混合
app:v1.2.3-abc123de
app:1.0.0-build.5678
环境标识
app:dev # 开发环境
app:staging # 预发布环境
app:prod # 生产环境
app:test # 测试环境
官方镜像命名规则
# 官方镜像
nginx # = library/nginx
nginx:alpine # 变体
nginx:1.24 # 版本系列
nginx:1.24.0 # 具体版本
nginx:1.24-alpine # 版本+变体
# 命名规范
[组件名]:[版本号]-[变体]
node:18-alpine
python:3.11-slim
ubuntu:22.04
推荐的企业命名规范
场景一:简单项目
# 格式:project:tag
myapp:1.0.0
myapp:latest
myapp:abc123def
场景二:多项目多环境
# 格式:project/environment:version
myapp/prod:1.0.0
myapp/staging:1.0.0-rc1
myapp/dev:feature-user-auth
场景三:大型组织
# 格式:registry/org/team/project/component:version
registry.company.com/engineering/backend/api-gateway:2.1.0
registry.company.com/engineering/frontend/dashboard:3.0.0
registry.company.com/platform/base-images/node:18-alpine
标签管理最佳实践
不可变标签
# ✅ 推荐(精确定位)
docker tag myapp:1.0.0
docker tag myapp@sha256:abc123...
# ❌ 不推荐(含义模糊)
docker tag myapp:latest # 不知道具体版本
docker tag myapp:stable # 标准未定义
docker tag myapp:prod # 容易被覆盖
同时使用多个标签
# 推送时打多个标签
docker tag myapp:1.0.0 myapp:latest
docker tag myapp:1.0.0 myapp:1
docker tag myapp:1.0.0 myapp:1.0
# 同时推送
docker push myapp:1.0.0
docker push myapp:latest
docker push myapp:1
docker push myapp:1.0
清理过期标签
# 清理策略
# 保留:最新的 3 个版本标签
# 保留:带语义化版本的标签
# 删除:90 天前的构建标签
# 删除:latest 之外的模糊标签
镜像地址配置与管理
Docker Compose 中的镜像名
services:
app:
# 开发
image: myapp:dev
# 生产
image: registry.example.com/myapp:${TAG}
# 外部依赖
redis:
image: redis:7-alpine
多环境镜像管理
# 开发
docker build -t myapp:dev .
# CI
docker build -t myapp:${CI_COMMIT_SHA} .
# 发布
docker tag myapp:${CI_COMMIT_SHA} myapp:${CI_COMMIT_TAG}
docker tag myapp:${CI_COMMIT_TAG} registry.example.com/myapp:${CI_COMMIT_TAG}
docker push registry.example.com/myapp:${CI_COMMIT_TAG}
命名规范的检查清单
- [ ] 镜像名是否包含仓库地址?
- [ ] 是否使用命名空间避免冲突?
- [ ] 标签是否唯一和不可变?
- [ ] 是否避免使用 latest 在部署时?
- [ ] 在 CI/CD 中是否使用 SHA 作为标签?
- [ ] 是否制定了清理旧标签的策略?
一致的镜像命名规范是容器化项目管理的基石,特别在团队协作和自动化部署中至关重要。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容