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

[置顶] docker 搭建registry私服

2016-11-01 11:33 686 查看
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
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: