docker registry v2 ssl 环境搭建
去年有搭建过 docker registry v1 版本,不过 registry v2 之后发生了点变化,所以又折腾了下,在此记录步骤这边我主要说下 nginx一、准备基础镜像 centos7docker 官网下载 image 实在太慢了,所以我一般下载都是通过 daocloud 的hub来下载的,地址 https://hub.daocloud.io/docker 下载命令:
先说下为什么要写这篇文章
因为 docker registry 认证机制特别重要,如果没有认证机制,任由任何用户 push pull 也是比较尴尬的一件事,不仅浪费带宽,而且说不定还会遭遇恶意 push 操作,所以该篇博客主要介绍docker registry 操作之前的认证过程, 通过 nginx 做一个反向代理及 ssl 证书和登录认证
去年有搭建过 docker registry v1 版本,不过 registry v2 之后发生了点变化,所以又折腾了下,在此记录步骤
这边我主要说下 nginx-registry ssl 代理配置
一、准备基础镜像 centos7
docker 官网下载 image 实在太慢了,所以我一般下载都是通过 daocloud 的hub来下载的,地址 https://hub.daocloud.io/
docker 下载命令:
docker pull daocloud.io/centos:7
二、准备定制 centos7-nginx-registry
我个人倾向于自己通过 centos7 基础镜像之上再进行 Dockerfile 来完成其他镜像,感觉可定制化比较高
所以我的 centos7-nginx-registry 镜像是将所有需要的东西全都 COPY 进去
2、安装nginx
你可以先编译生成 nginx,certs 证书文件,nginx.conf 配置文件,htpasswd.txt 认证文件。我们先一步一步来做吧
下载 nginx http://nginx.org/en/download.html,并且 ./configure 的时候启用ssl功能,接着 make && make install 即可
3、编辑 nginx 配置
我直接在下图中贴出配置
[root@centos7-200 nginx]# cat docker.wanglei.net.conf
upstream docker.wanglei.net {
server 192.168.151.200:5000;
}
server {
listen 443;
server_name docker.wanglei.com;
ssl on;
ssl_certificate /usr/local/nginx/certs/docker.wanglei.net.crt;
ssl_certificate_key /usr/local/nginx/certs/docker.wanglei.net.key;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
chunked_transfer_encoding on;
add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
location / {
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/auth/htpasswd.txt;
proxy_pass http://docker.wanglei.net;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
location /_ping {
auth_basic off;
proxy_pass http://docker.wanglei.net;
}
location /v2/_ping {
auth_basic off;
proxy_pass http://docker.wanglei.net;
}
location /v2/_catalog {
auth_basic off;
proxy_pass http://docker.wanglei.net;
}
}
4、生成 ssl 证书文件
1) 生成私钥文件
mkdir -p /usr/local/nginx/certs/
cd /usr/local/nginx/certs/
openssl genrsa -out docker.wanglei.net.key 2048
2) 生成根证书文件
openssl req -newkey rsa:2048 -nodes -keyout docker.wanglei.Net.key -x509 -days 3650 -out docker.wanglei.net.pem -subj “/C=CN/ST=state/L=city/O=xxx/OU=docker.wanglei.net”
3) 下面将pem编码格式的证书转换成crt扩展名证书,放到系统证书目录(用户访问registry之前需要这一步)
cat docker.wanglei.net.pem | tee -a /etc/ssl/certs/docker.wanglei.net.crt
5、生成用户认证文件
mkdir -p /usr/local/nginx/auth/
cd /usr/local/nginx/auth/
htpasswd -c htpasswd.txt wanglei
三、定制 centos7-nginx-registey 镜像
前面关于 nginx 的配置都已经差不多了,那么接下来准备 Dockerfile 来定制镜像
cat Dockerfile
FROM centos7:latest
ENV nginx_path /usr/local/nginx
RUN yum -y install supervisor
RUN mkdir -p /root/.ssh
RUN mkdir -p $nginx_path/auth
RUN mkdir -p $nginx_path/conf/vhost
RUN echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDihpDzUoq3xIPOg+2GZfLpCIh+JCVXeYOTFsTCx+qh0Q+6kJ8BacjEzLvIDkuQXDi9r5uFxrAi5Ao6ZPPQgNyk4M2SCDrMWH/+NNxSz4QjRLrHh55l99A7D1IEgVTiBDGo23Xlv9P5qJSEyWE65JKI3hu86v7YR/cNLeszjaZr0gbmLQ9ID4RNSKbj6ez4RotEgq/QAYJNA5VBJ/7oBpqW7KRLIBjHF8pAizAlCndp87gMbXqaRAMDdNkS00mJVFGSdbixClrSnMzHoMnwVIANR6vnMMhQIfzuMEyYnxddDn1lJdaVg49hNOayv0cJdubMDQVdG4BS8w5Z4Ju8RKj3" >> /root/.ssh/authorized_keys
COPY nginx $nginx_path
COPY certs $nginx_path/certs
COPY docker.wanglei.net.conf $nginx_path/conf/vhost/docker.wanglei.net.conf
COPY nginx.conf $nginx_path/conf/nginx.conf
COPY htpasswd.txt $nginx_path/auth/htpasswd.txt
COPY supervisor.conf /etc/supervisord.conf
EXPOSE 22 80 443
CMD ["/usr/bin/supervisord"]
细心的同学会发现我 Dockerfile 中有 COPY supervisor.conf 和 yum -y install supervisor 参数
对supervisor 有兴趣的可以去这边看看:http://wiki.jikexueyuan.com/project/docker-technology-and-combat/supervisor.html
然后这里再贴一下 supervisor.conf 配置
[root@centos7-200 nginx]# cat supervisor.conf
[supervisord]
nodaemon = true
childlogdir = /tmp
logfile = /tmp/supervisord.log
pidfile = /tmp/supervisord.pid
[program:sshd]
command = /usr/sbin/sshd -D
[program:crond]
command = /usr/sbin/crond -n
[program:nginx]
command = /usr/local/nginx/sbin/nginx
开始构建镜像
docker build -t centos7-nginx-registry .
接着在 run 起来就可以啦
docker run \
-d \
-p 224:22 \
-p 80:80 \
-p 443:443 \
--name nginx-registry \
--restart always \
-e TZ=Asia/Shanghai \
centos7-nginx-registry
那现在呢,nginx ssl 代理已经准备完成,这时候你再 run 一个 registry ,映射 5000 端口, 之后命令进行 docker login docker.wanglei.net 即可登录,只要域名可以成功解析或者说在/etc/hosts中添加主机记录。
更多推荐
所有评论(0)