简介:本文详细介绍如何通过命令行启动Docker镜像仓库Registry,涵盖基础启动、参数配置、安全加固及运维技巧,帮助开发者快速搭建私有镜像仓库。
Docker Registry作为Docker生态的核心组件,承担着镜像存储、分发和版本管理的核心职能。与公有云提供的托管服务不同,本地化部署的Registry通过命令行启动具有更高的灵活性和可控性。根据Docker官方文档,Registry v2.0采用分层存储架构,支持内容可寻址存储(CAS)机制,有效提升镜像存储效率。
最简单的启动命令为:
docker run -d -p 5000:5000 --name registry registry:2
该命令会启动一个监听5000端口的默认Registry实例,使用registry:2镜像(当前稳定版本)。此时仓库处于HTTP明文传输状态,仅适用于测试环境。生产环境必须配合TLS证书使用。
Registry支持多种存储后端,通过-e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY参数可指定存储路径。对于大规模部署,推荐使用S3兼容存储:
docker run -d \
-p 5000:5000 \
-e REGISTRY_STORAGE=s3 \
-e REGISTRY_STORAGE_S3_ACCESSKEY=your_accesskey \
-e REGISTRY_STORAGE_S3_SECRETKEY=your_secretkey \
-e REGISTRY_STORAGE_S3_BUCKET=your_bucket \
registry:2
生产环境必须启用HTTPS,需准备域名证书和私钥:
docker run -d \
-p 443:5000 \
-v /path/to/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
建议使用Let’s Encrypt免费证书,配合Certbot工具实现自动化续期。
Registry支持多种认证方式,其中基础认证实现步骤如下:
mkdir auth
docker run --entrypoint htpasswd \
httpd:2 -Bbn username password > auth/htpasswd
docker run -d \
-p 5000:5000 \
-v /path/to/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH="/auth/htpasswd" \
registry:2
REGISTRY_STORAGE_DELETE_ENABLED参数可控制镜像删除权限,建议生产环境设置为false:
-e REGISTRY_STORAGE_DELETE_ENABLED=false
对于Prometheus监控,需启用metrics端点:
docker run -d \
-p 5000:5000 \
--log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
registry:2
-e REGISTRY_HTTP_SECRET=your_secret \
-e REGISTRY_METRICS_ENABLED=true
registry garbage-collect命令(需挂载存储卷)生产环境建议采用以下架构:
当出现x509: certificate signed by unknown authority错误时,需在客户端配置:
echo '{"insecure-registries":["your.registry.domain"]}' > /etc/docker/daemon.json
systemctl restart docker
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io--memory 2g升级时需注意数据兼容性,建议操作流程:
通过合理配置,命令行启动的Registry可满足从开发测试到生产环境的各种需求。根据Docker官方基准测试,优化后的Registry实例可达到每秒处理200+并发请求的性能指标。建议定期审查配置参数,结合实际使用情况进行动态调整。