您的位置:首页 > 运维架构 > Docker

基于Docker搭建Registry私有镜像仓库

2016-12-05 00:00 1116 查看
镜像库默认保存在容器下
/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 <<EOF
version: '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/registry
EOF
####################### 多行命令结束 ###############################

docker-compose up -d


TLS加密可采用自签名证书

sudo mkdir /etc/certs
cd /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.com
sudo 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]  # 拉取镜像
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Docker Registry