0%

搭建本地的Docker registry


作者: 耗子007


搭建非安全Registry

Docker官方hub上面已提供容器化的Registry,可以通过docker run直接启动一个本地的Registry的服务。

1
2
docker run -d -p 5000:5000 \
--restart=always --name registry registry:2

上传镜像的方法:

1
2
3
docker pull ubuntu
docker tag ubuntu localhost:5000/ubuntu
docker push localhost:5000/ubuntu

可以通过数据卷的方式,把上传的docker镜像保存到指定的host目录:

1
2
3
docker run -d -p 5000:5000 --restart=always --name registry \
-v /data:/var/lib/registry \
registry:2

跨机器访问非安全Registry

跨机器访问非安全的Registry,需要对机器的Docker daemon的启动参数进行设置,设置方法取决于docker daemon的启动方式。
以Ubuntu为例:

  • 修改/etc/default/docker文件
  • 添加DOCKER_OPTS=”–insecure-registry myregistrydomain.com:5000”,以myregistrydomain.com为例,也可以是IP地址
  • 重启Docker daemon服务

搭建安全Registry

首先,需要对openssl的配置做一些修改:

  • Ubuntu配置文件: /etc/ssl/openssl.cnf
  • Redhat配置文件: /etc/pki/tls/openssl.cnf

注:在上面的配置文件的[ v3_ca ]标签下面加上subjectAltName=IP:192.168.1.181 <192.168.1.181为当期机器的IP>
参考文章:http://dockone.io/article/684

可以通过openssl生成自己的证书和密钥,用来验证。生成证书的方法:

1
2
3
mkdir -p /certs && openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt

关于openssl生成密钥的办法还有下面的:

1
2
3
4
5
6
7
$ echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 > extfile.cnf
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=your.host.com
Getting CA Private Key
Enter pass phrase for ca-key.pem:

参考文档:https://docs.docker.com/engine/security/https/

生成账号密码:

1
2
mkdir auth 
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd

用生成的证书和密钥启动Registry的服务:

1
2
3
4
5
6
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/auth:/auth
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2

跨机器访问安全Registry

把Registry机器上生成的证书文件domain.crt拷贝到指定目录(取决于系统类型):

  • Ubuntu /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
  • Redhat系统 /etc/pki/ca-trust/source/anchors/myregistrydomain.com:5000.crt,并更新证书update-ca-trust

然后重新启动Docker daemon的服务。
最后,可以push镜像了。

1
2
3
4
docker pull ubuntu
docker tag ubuntu myregistrydomain.com:5000/ubuntu
docker push myregistrydomain.com:5000/ubuntu
docker pull myregistrydomain.com:5000/ubuntu