镜像库默认保存在容器下 /var/lib/registry 路径,并volumn到宿主机将 Registry 服务开放到 Localhost 以外的域要求TLS加密Registry 默认监听 5000
- 镜像库默认保存在容器下
/var/lib/registry
路径,并volumn
到宿主机 - 将
Registry
服务开放到Localhost
以外的域要求TLS加密 Registry
默认监听 5000 端口
基于Docker两种模式搭建 Registry
- 这里约定HTTPS证书和秘钥在/etc/certs目录
- 文件重命名为 domain.crt domain.key
1. 单服务模式启动
docker run -d --name registry --hostname registry.example.com /-e "REGISTRY_STORAGE_DELETE_ENABLED=true" /-e "REGISTRY_AUTH: htpasswd" /-e "REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd" /-e "REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm" /-e "REGISTRY_HTTP_TLS_KEY: /etc/certs/domain.key" /-e "REGISTRY_HTTP_TLS_CERTIFICATE: /etc/certs/domain.crt" /-p 5000:5000 /-v /etc/certs:/etc/certs /-v /srv/registry/auth:/auth /-v /srv/registry/storage:/var/lib/registry /--restart=always registry:2
2. Compose服务编排模式(推荐方式)
docker pull registry:2####################### 多行命令开始 ###############################cat >> docker-compose.yaml <<EOFversion: '2'services: Registry: image: 'registry:2' container_name: 'registry' hostname: 'registry.example.com' restart: always ports: - '5000:5000' environment: REGISTRY_STORAGE_DELETE_ENABLED: 'true' REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm REGISTRY_HTTP_TLS_KEY: /etc/certs/domain.key REGISTRY_HTTP_TLS_CERTIFICATE: /etc/certs/domain.crt volumes: - /etc/certs:/etc/certs - /srv/registry/auth:/auth - /srv/registry/storage:/var/lib/registryEOF####################### 多行命令结束 ###############################docker-compose up -d
TLS加密可采用自签名证书
sudo mkdir /etc/certscd /etc/certs# 如果签发对象还是个IP而不是域名的话# 自签名证书需要有个备选的IP SANS校验信息sudo sed -i '//[ v3_ca /]/a/subjectAltName = IP:121.40.145.76' /etc/pki/tls/openssl.cnf # CentOS7环境下sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt # 其中Common Name输入 registry.example.comsudo openssl dhparam -out dhparam.pem 1024 # 生成DHE参数文件增强ssl加密
Registry的自签名证书需要手动导入到客户端Docker Daemon的根证书信任列表:
- domain.crt 拷贝至 客户端Docker Daemon 的 /etc/docker/certs.d/registry.example.com:5000/ca.crt
- 部分RedHat系列客户端还需要在系统层面信任:
- domain.crt 拷贝至 客户端Docker Daemon 的 /etc/pki/ca-trust/source/anchors/registry.example.com.crt
- update-ca-trust enable && update-ca-trust
不做TLS加密,使用普通http通信(不推荐)
- 此时
Registry
不支持basic authentication
- Registry 访问无法开放到 localhost 以外的域
配置:Docker Damon
配置启动选项DOCKER_OPTS="--insecure-registry registry.example.com:5000"
Registry操作
## 镜像指向私有registry两种方式 ##docker tag 本地镜像 registry_url[:port]/namespace/imagename[:tag] # tag一个本地镜像到registry方式docker build -t registry_url[:port]/namespace/imagename[:tag] . # 直接build镜像到registry方式docker push registry_url[:port]/namespace/imagename[:tag] # 推送镜像到仓库docker pull registry_url[:port]/namespace/imagename[:tag] # 拉取镜像