docker 搭建registry私服

1. 引言

docker官方提供了Docker Hub网站来作为一个公开的集中仓库,用来管理镜像。然而,本地访问Docker Hub速度往往很慢。而且,Docker Hub只能有一个私有镜像,其他镜像都是公开的,可以被其他人下载使用,很多时候企业需要的是一个私有的仓库供内部使用。

docker官方提供了开源的registry项目,用来搭建私有仓库。

2.搭建私有仓库

1.安装docker

   本文只介绍registry搭建,docker安装请自行参考官网。

2.安装registry

1.运行下面命令获取registry镜像:

$ sudo docker pull registry:2

2.安装SSL证书

  如果愿意花钱买一个ssl证书,直接把证书和私钥拷贝到指定目录即可。这里我们自签署一个ssl证书,把当前系统作为(私有)证书颁发中心(CA)。

CA配置文件:

$ vi /etc/pki/tls/openssl.cnf

dir             = /etc/pki/CA      # Where everything is kept

certs           = $dir/certs       # Where the issued certs are kept

crl_dir         = $dir/crl         # Where the issued crl are kept

database        = $dir/index.txt   # database index file.

#unique_subject =no               # Set to 'no' to allowcreation of

                               # several ctificates with same subject.

new_certs_dir   = $dir/newcerts    # default place for new certs.

 

certificate     = $dir/cacert.pem  # The CA certificate

serial          = $dir/serial      # The current serial number

crlnumber       = $dir/crlnumber   # the current crl number

                                # must becommented out to leave a V1 CRL

crl             = $dir/crl.pem     # The current CRL

private_key     = $dir/private/cakey.pem # The private key

RANDFILE        = $dir/private/.rand    # private random number file

 

default_days    = 3650          # how long to certify for

 

[req_distinguished_name ]

countryName                     = Country Name (2 lettercode)

countryName_default             = CN

countryName_min                 = 2

countryName_max                 = 2

 

stateOrProvinceName             = State or Province Name (fullname)

stateOrProvinceName_default     = GD

生成根密钥

$ cd /etc/pki/CA/

$ openssl genrsa-out private/cakey.pem 2048

生成根证书:

$ openssl req -new -x509 -key private/cakey.pem -outcacert.pem

会提示输入一些内容,可以随便输入,但要记住与后面保持一致。

下面为registry生成ssl密钥:

$ mkdir certs

$ cd /registry/certs

$ openssl genrsa -out domain.key 2048

我们的CA中心与要申请证书的服务器是同一个,否则应该是在另一台需要用到证书的服务器上生成。

registry生成证书签署请求:

$openssl req -new-key domain.key -out domain.csr

同样会提示输入一些内容,与上面输入一致,Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password不填。

私有CA根据请求来签发证书:

$openssl ca -innginx.csr -out domain.crt

上面签发过程其实默认使用了-cert cacert.pem -keyfile cakey.pem,这两个文件就是前两步生成的位于/etc/pki/CA下的根密钥和根证书。

 

3.生成registry用户信息

$mkdir auth

$docker run--entrypoint htpasswd registry:2 -Bbn joey 123456 > auth/htpasswd

4. 启动registry容器

docker run -d -p5000:5000 --restart=always --name registry \

  -v `pwd`/auth:/auth \

  -e "REGISTRY_AUTH=htpasswd" \

  -e"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \

  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd\

  -v `pwd`/certs:/certs \

  -eREGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \

  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \

  -v /opt/registry:/var/lib/registry \

  registry:2

说明:

(1)   配置ssl证书所在目录

(2) 配置密码认证方式,用户密码所在文件位置。

(3)Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

 

5. 运行docker ps看一下容器情况


说明我们已经启动了registry服务。


3. 验证

现在我们通过将镜像push到registry来验证一下。

$ sudo docker tag registry:2 myvm.docker.com:5000/registry2

然后查看以下本地的镜像:


用前面注册的用户登录docker:

$ sudo docker login myvm.docker.com:5000


将镜像push到私有仓库中:

$ sudo docker pushmyvm.docker.com:5000/registry2

将私有镜像pull下来:

$ sudo docker pullmyvm.docker.com:5000/registry2

 

 

 

4. 参考文档

https://docs.docker.com/registry/deploying/

https://segmentfault.com/a/1190000000801162

猜你喜欢

转载自blog.csdn.net/chenguohong88/article/details/52994296