Ubuntu部署私有Registry

注:针对ubuntu 14.04版,所有的操作都是在root用户下进行的

1.准备
已经安装好docker。

2.拉取registry镜像
拉取registry镜像的命令可以直接用:

# docke pull registry

3.运行registry
运行registry时,要对registry进行相关的设置,首先在自己的本机上创建一个目录来保存上传的镜像,这个目录我们将要挂载到registry上:

# mkdir -p /opt/docker-registry

创建好目录就可以运行把registry放到容器里运行了,执行下面的命令:

# docker run -d \
--restart=always \
--name docker-registry \
-e SETTINGS_FLAVOR=dev \
-e STORAGE_PATH=/tmp/registry \
-v /opt/docker-registry:/tmp/registry  \
-p 5000:5000 \
registry

我对这个命令的有些地方解释一下,“-e STORAGE_PATH=/tmp/registry \” 这个参数设置了推送到registry上的镜像保存路径,“-v /opt/docker-registry:/tmp/registry  \”这个参数就是把本机上的刚才建的目录挂载到registry上,这样推送到registry上的镜像就被保存到本机上了,这样方便管理,“-p 5000:5000 \”指定了端口的映射,“:”前是本机上的端口,后面是registry自身监听的端口,也就是说当访问本机的5000端口是,会被映射到registry的5000端口,就相当于访问registry,最后的“registry”就是要用哪个镜像来运行容器,也可以在后面添加“:<版本号>”来指定使用镜像的版本,如果不写默认是“latest”最新版的。

4.安装Nginx和apache2-utils包
通过该包,可以轻松创建Nginx能够读取的权限文件

# apt-get install nginx apache2-utils

5.添加用户
安装完成过后通过下面的命令来创建第一个用户

# htpasswd -c /etc/nginx/docker-registry.htpasswd $user

参数“-c”的意思重新创建“docker-registry.htpasswd”文件,并添加用户。如果只是增加用户,你可以用下面的命令:

# htpasswd /etc/nginx/docker-registry.htpasswd $user

添加新的用户成功,如下图所示:

204351_rWDX_2352856.png

6.修改nginx的配置
在“/etc/nginx/sites-available/ ”下有一个文件名为“default”的文件,先把它移动到上一级目录做个备份,也可以直接删除(记住“sites-available”目录下千万不要放目录或者文件什么的,除了 nginx 的配置文件),然后再回到“sites-available/”目录下,创建一个新文件,文件名为“docker-registry“并添加如下内容:

upstream docker-registry {
    server localhost:5000;
 }
server {
    listen 8080; # 设置nginx服务器监听的端口
    server_name my.registry.com; # 设置服务器名
    # ssl on;
    # ssl_certificate /etc/ssl/certs/docker-registry/my-registry.com.crt;
    # ssl_certificate_key /etc/ssl/private/docker-registry/my-registry.com.key;
    proxy_set_header Host     $http_host;   # required for Docker client sake
    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP
    client_max_body_size 0;
    # disable any limits to avoid HTTP 413 for large image uploads
    # required to avoid HTTP 411: see Issue #1486 ()
    chunked_transfer_encoding on;
 
    location / {
        # let Nginx know about our auth file
        auth_basic              "Restricted";
        # 这里要写的参数就是刚才创建的文件
        auth_basic_user_file    docker-registry.htpasswd;
        proxy_pass ;
    }
    location /_ping {
        auth_basic off;
        proxy_pass http://docker-registry;
    }
    location /v1/_ping {
       auth_basic off;
       proxy_pass http://docker-registry;
    }
}

保存文件后,对该文件建立链接,这样 nginx 就可以使用该配置文件了,建立链接使用命令如下:

ln -s /etc/nginx/sites-available/docker-registry /etc/nginx/sites-enabled/docker-registry

7.重启nginx服务

# service nginx restart

如果之前已经把nginx服务停了(service nginx stop),可以直接启动服务就行

# service nginx start

8.测试nginx代理registry认证
首先验证 registry 是否正常:

# curl localhost:5000

正常的情况下会有下面的输出:

205310_kuye_2352856.png

如果 registry 正常,在验证一下 nginx:

# curl localhost:8888

正常的情况下nginx是不会让你访问的,它会有如下的输出:

205411_Fk0N_2352856.png

现在看来 registry 和 nginx 都是正常的,那么就行一下 nginx 代理 registry 认证的测试:

# docker login localhost:8888

执行这个命令后,他会让你输入用户名、密码,以及邮箱(邮箱随便输入),验证通过后会有如下的输出:

205513_6Dty_2352856.png

9.配置ssl
上面的验证是在本机上进行的,如果你通过另外一台机器来登录 registry,是不成功的,会出现下面的错误提示:

210012_vzKy_2352856.png

所以为了让我们的 registry 在别的机器上也可以访问,我们就需要给 nginx 配置 ssl,这样是的回话更加安全。

9.1生成根密钥
创建目录,并进入:

# mkdir ~/certs && cd $_

生成根密钥:

# openssl genrsa -out dockerCA.key 2048

生成的过程中有如下输出,并可以在该目录下有“dockerCA.key”文件生成:

210157_i41T_2352856.png

9.2生成根证书
在相同目录下生成根证书,生成根证书用到了刚才生成的根密钥,当要求输入“Common Name”时,确保输入的是你给自己的服务器起的域名,我的域名是“my.registry.com”。使用下面的命令生成根证书:

# openssl req -x509 -new -nodes -key dockerCA.key -days 10000 -out dockerCA.crt

生成过程如下图所示:

211016_bWXd_2352856.png 

9.3为服务器生成密钥

# openssl genrsa -out my-registry.com.key 2048

为服务器生成密钥与生成根密钥的过程一样,如下图:

211144_R5xh_2352856.png

9.4生成证书签名请求
在生成证书签名请求时,它会要求你输入“A challenge password”和“An optional company name”,你都不要输入,直接“Enter”,如下图所示:

penssl req -new -key my-registry.com.key -out my-registry.com.csr

211411_HbQz_2352856.png

9.5对证书的请求进行签名

# openssl x509 -req -in my-registry.com.csr -CA dockerCA.crt -CAkey dockerCA.key -CAcreateserial -out my-registry.com.crt -days 10000

签名过程如下图所示:

211452_CqDL_2352856.png

9.6将证书和秘钥拷贝到相应的路径
在“/etc/ssl/certs/”创建目录“docker-registry”,并拷贝“my-registry.com.crt”到该目录下:

# mkdir /etc/ssl/certs/docker-registry

# cp ~/certs/my-registry.com.crt /etc/ssl/certs/docker-registry/

在“/etc/ssl/private/”创建目录“docker-registry”,并拷贝“my-registry.com.key”到该目录下:

# mkdir /etc/ssl/private/docker-registry

# cp ~/certs/my-registry.com.key /etc/ssl/private/docker-registry/

9.7修改nginx的配置
把“/etc/nginx/sites-available/docker-registry”中原来关于 ssl 注释的部分打开,也就是去掉前面的“#”,而且一定要注意,这里配置的证书和秘钥路径一定要和上面你创建的路径一样。如下图所示:

211641_Ppyl_2352856.png

9.8客户端配置
可以先在同一台机器上,配置一下如何登录到本机上的registry。首先在目录“/usr/local/share/ca-certificates/”下创建目录“docker-dev-cert”,然后把“dockerCA.crt”拷贝到该目录下,并更新证书。

# mkdir /usr/local/share/ca-certificates/docker-dev-cert

# cp ~/certs/dockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert

# update-ca-certificates

更行完成如下所示:

211758_aiQP_2352856.png

同时可以在“/etc/ssl/certs/”看到生成的“dockerCA.pem”文件。如果你想在另一个远程机器上登录到这台机器上的 registry,可以对该远程机器进行8.8所述的相同配置。

9.9测试
在测试前,还得进行一些配置,我是在IP为135.125.119.74的机器上搭的服务,称它为“本机”,在本机上的“/etc/hosts”文件中添加域名和IP地址的映射,添加如下映射:

127.0.0.1   my.registry.com

我的远程机的IP是135.125.119.12,称它为“远程机”,在远程机上的“/etc/hosts”文件中添加域名和IP地址的映射,添加如下映射:

135.125.119.74   my.registry.com

测试时都用下面的命令:

# curl https://zongxingh:<密码>@my.registry.com:8888

本机测试结果如下图:

212011_aR3u_2352856.png

远程机测试结果如下图:

 212056_vVgp_2352856.png

转载于:https://my.oschina.net/u/2352856/blog/603866

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值