【Drone入门与实践-10】docker私有仓库搭建

1,123 阅读4分钟

我们会把构建完成后的docker镜像存储在docker私有仓库,这里我们使用最轻量级的docker仓库registry。下文中的域名是我自己定义的域名,各位同学可以自己定义。并且这里我们采用https的方式搭建,以往网上好多教程都是http的,那么使用的时候需要把我们的私有仓库地址添加到不安全的仓库列表配置中才能使用。

1、准备工作

我们还是在test-node-1上操作

step1 创建目录

我们先把需要从宿主机挂载进去的目录创建好:

mkdir -p /data/registry/data
mkdir -p /data/registry/auth
mkdir -p /data/registry/certs

step2 创建证书

我们创建一个自签证书:

openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/registry/certs/registry.happykit.net.key -x509 -days 3000 -out /data/registry/certs/registry.happykit.net.crt

⚠️注意:在创建证书的时候,会提示需要输入各种参数,不要一路回车!Common Name需要填写域名registry.happykit.net

step3 创建账号密码

为了仓库的安全,就算在内网中,我们也不期望任何人可以随便上传和下载镜像,我们用账号密码来限制一下:

# yum命令还是可以用的哦。httpd中包含htpasswd命令。
yum install httpd -y
# 账号admin 密码admin,可以自定义
htpasswd -Bbn admin admin > /data/registry/auth/htpasswd

docker registry不止账号密码,还有其他的认证方式的,各位同学可以上官网查看下。

2、registry的安装

docker run -d \
--name registry \
-v /data/registry/certs:/certs \
-v /data/registry/data:/var/lib/registry \
-v /data/registry/auth:/auth \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.happykit.net.crt" \
-e "REGISTRY_HTTP_TLS_KEY=/certs/registry.happykit.net.key" \
-p 5000:5000 \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry

安装完成后,我们要去配置dns。

3、DNS配置

为我们的私有仓库配置一个SSL证书,这时候我们需要使用到之前安装的dns服务器。访问https://172.16.113.9:10000/

3.1、创建一个新的根域名

进入BIND DNS Server菜单,找到创建新的主区域,点击进入 image.png 进入创建页面后,填写域名Email字段: image.png 填写完成后点击新建按钮。返回后我们可以看到我们创建的主域: image.png 然后点击进去,再点击地址image.png 填写记录,这里的地址填写我们的registry所在的机器IP地址,最后点击新建即可: image.png 完成后我们可以看到这样的页面。 image.png ⚠️现在配置还未生效,需要点击右上角的刷新按钮生效配置。

3.2、设置DNS到本机

由于我是mac电脑,我就演示一下mac的dns设置:在设置/网络/高级/DNS中添加一个地址,并且把它拖拽到第一个。然后点击,最后点击应用image.png

完成后我们需要刷新一下dns。在mac上

sudo killall -HUP mDNSResponder 

3.3、验证

dig registry.happykit.net

# 也可以ping一下
ping registry.happykit.net

dig的输出结果: image.png

已经正常解析到test-node-1的ip地址了。

4、验证私有仓库

4.1、本机

在浏览器访问https://registry.happykit.net:5000/v2/,如果搭建成功后我们可以弹出账号密码输入的要求,输入账号和密码后(⚠️浏览器拦截的话输入thisisunsafe): image.png

4.2、test-node-1或者test-node-2

我们在test-node-1上进行docker login registry.happykit.net:5000 默认是不会成功的,因为我们的证书不会被操作系统信任。如下图: image.png 现在我们再来配置一下:

mkdir -p /etc/docker/certs.d/registry.happykit.net:5000
cd /data/registry/certs

# 复制到系统目录
cp registry.happykit.net.crt /etc/docker/certs.d/registry.happykit.net:5000/ca.crt

现在重新登录就可以了。 image.png 最后我们把test-node-2也配置好,我们需要把刚才的.crt文件复制到test-node-2上的对应系统目录,在test-node-1上执行:

cd /data/registry/certs
scp registry.happykit.net.crt root@172.16.113.10:/etc/docker/certs.d/registry.happykit.net:5000/ca.crt

如果提示目录不存在的,先ssh到test-node-2,创建目录

mkdir -p /etc/docker/certs.d/registry.happykit.net:5000

5、小结

到这里我们的docker私有仓库就搭建完成了,支持https,支持用户名密码认证,唯一的缺点是自签证书需要复制到系统目录。每一台要用到该私有仓库的机器都需要复制该证书到系统目录!如果条件支持的话,可以使用正规证书机构签发的泛域名证书。