镜像仓库管理
Docker 镜像仓库的使用与管理,包括 Docker Hub、私有仓库等
📋 目录
Docker Hub 使用
注册与登录
# 注册账号
# 访问 https://hub.docker.com 注册
# 登录 Docker Hub
docker login
# 使用用户名登录
docker login -u username
# 使用访问令牌登录
echo $DOCKER_TOKEN | docker login -u username --password-stdin搜索镜像
# 搜索镜像
docker search nginx
# 限制搜索结果
docker search --limit 5 nginx
# 只显示官方镜像
docker search --filter "is-official=true" nginx
# 只显示自动构建的镜像
docker search --filter "is-automated=true" nginx拉取镜像
# 拉取官方镜像
docker pull nginx
# 拉取用户镜像
docker pull username/myapp:latest
# 拉取指定版本
docker pull nginx:1.21私有仓库搭建
Docker Registry
Docker 官方提供的私有仓库实现。
快速启动
# 启动 Registry
docker run -d -p 5000:5000 --name registry registry:2
# 使用 HTTPS(需要证书)
docker run -d -p 5000:5000 \
-v /path/to/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_PRIVATE_KEY=/certs/domain.key \
--name registry registry:2配置认证
# 使用 htpasswd 创建认证文件
docker run --rm --entrypoint htpasswd httpd:2 \
-Bbn username password > auth/htpasswd
# 启动带认证的 Registry
docker run -d -p 5000:5000 \
-v $(pwd)/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
--name registry registry:2使用私有仓库
# 标记镜像
docker tag myapp:latest localhost:5000/myapp:latest
# 推送镜像
docker push localhost:5000/myapp:latest
# 拉取镜像
docker pull localhost:5000/myapp:latestHarbor
企业级容器镜像仓库,提供更多功能。
功能特性
- Web UI 管理界面
- 镜像扫描和漏洞检测
- 镜像复制和同步
- RBAC 权限管理
- 审计日志
安装 Harbor
# 下载 Harbor
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
tar xvf harbor-offline-installer-v2.7.0.tgz
# 配置 Harbor
cd harbor
cp harbor.yml.tmpl harbor.yml
# 编辑 harbor.yml 配置文件
# 安装 Harbor
./install.sh使用 Harbor
# 登录 Harbor
docker login harbor.example.com
# 推送镜像
docker tag myapp:latest harbor.example.com/project/myapp:latest
docker push harbor.example.com/project/myapp:latest
# 拉取镜像
docker pull harbor.example.com/project/myapp:latest镜像推送与拉取
推送镜像
# 标记镜像
docker tag myapp:latest username/myapp:latest
# 推送镜像
docker push username/myapp:latest
# 推送多个标签
docker push username/myapp:latest
docker push username/myapp:v1.0.0
# 推送所有标签
docker push username/myapp --all-tags拉取镜像
# 拉取最新版本
docker pull username/myapp:latest
# 拉取指定版本
docker pull username/myapp:v1.0.0
# 拉取所有标签
docker pull username/myapp --all-tags镜像命名规范
[仓库地址/][用户名/]镜像名[:标签]
示例:
nginx:latest- Docker Hub 官方镜像username/myapp:v1.0- 用户自定义镜像registry.example.com/project/app:latest- 私有仓库镜像
镜像版本管理
标签策略
语义化版本
# 主版本号.次版本号.修订号
docker tag myapp:latest myapp:1.0.0
docker tag myapp:latest myapp:1.1.0
docker tag myapp:latest myapp:2.0.0环境标签
# 开发环境
docker tag myapp:latest myapp:dev
# 测试环境
docker tag myapp:latest myapp:test
# 生产环境
docker tag myapp:latest myapp:prodGit 标签
# 使用 Git commit SHA
docker tag myapp:latest myapp:$(git rev-parse --short HEAD)
# 使用 Git 标签
docker tag myapp:latest myapp:$(git describe --tags)版本管理最佳实践
- 使用语义化版本:遵循 SemVer 规范
- 保留 latest 标签:指向最新稳定版本
- 使用特定版本:生产环境使用具体版本号
- 定期清理旧版本:删除不再使用的镜像版本
镜像安全扫描
Docker Scout
Docker 官方安全扫描工具。
# 扫描镜像漏洞
docker scout cves nginx:latest
# 查看详细报告
docker scout cves --format json nginx:latest
# 比较两个镜像
docker scout compare nginx:1.20 nginx:1.21Trivy
开源安全扫描工具。
# 安装 Trivy
brew install trivy # macOS
# 或
wget https://github.com/aquasecurity/trivy/releases/download/v0.40.0/trivy_0.40.0_Linux-64bit.tar.gz
# 扫描镜像
trivy image nginx:latest
# 扫描并生成报告
trivy image -f json -o report.json nginx:latestHarbor 安全扫描
Harbor 内置安全扫描功能。
- 在 Harbor Web UI 中选择镜像
- 点击”扫描”按钮
- 查看扫描结果和漏洞详情
仓库最佳实践
1. 镜像命名规范
- 使用有意义的名称
- 遵循命名约定
- 使用版本标签而非 latest
2. 访问控制
- 使用认证和授权
- 限制推送权限
- 定期审查访问权限
3. 镜像清理
# 删除未使用的镜像
docker image prune -a
# 删除特定标签
docker rmi username/myapp:old-tag4. 镜像备份
# 导出镜像
docker save -o myapp.tar username/myapp:latest
# 导入镜像
docker load -i myapp.tar5. 镜像同步
# 使用 Harbor 镜像复制功能
# 在 Harbor Web UI 中配置复制规则
# 或使用脚本同步
docker pull source-registry.com/myapp:latest
docker tag source-registry.com/myapp:latest target-registry.com/myapp:latest
docker push target-registry.com/myapp:latest常见问题
1. 推送失败:unauthorized
问题:未登录或认证失败。
解决:
# 重新登录
docker login
# 检查认证信息
cat ~/.docker/config.json2. 推送失败:denied
问题:没有推送权限。
解决:
- 检查仓库权限设置
- 确认镜像名称正确
- 联系仓库管理员
3. 拉取速度慢
问题:网络问题或镜像源问题。
解决:
# 配置镜像加速器(中国用户)
# 编辑 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
# 重启 Docker
sudo systemctl restart docker