镜像命名规范

镜像命名规范

镜像名的结构

完整的 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
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容