我们会把构建完成后的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
菜单,找到创建新的主区域
,点击进入
进入创建页面后,填写
域名
和Email
字段:
填写完成后点击
新建
按钮。返回后我们可以看到我们创建的主域:
然后点击进去,再点击
地址
:
填写记录,这里的地址填写我们的registry所在的机器IP地址,最后点击
新建
即可:
完成后我们可以看到这样的页面。
⚠️现在配置还未生效,需要点击右上角的刷新按钮生效配置。
3.2、设置DNS到本机
由于我是mac电脑,我就演示一下mac的dns设置:在设置/网络/高级/DNS中添加一个地址,并且把它拖拽到第一个。然后点击好
,最后点击应用
。
完成后我们需要刷新一下dns。在mac上
sudo killall -HUP mDNSResponder
3.3、验证
dig registry.happykit.net
# 也可以ping一下
ping registry.happykit.net
dig
的输出结果:
已经正常解析到test-node-1的ip地址了。
4、验证私有仓库
4.1、本机
在浏览器访问https://registry.happykit.net:5000/v2/
,如果搭建成功后我们可以弹出账号密码输入的要求,输入账号和密码后(⚠️浏览器拦截的话输入thisisunsafe
):
4.2、test-node-1或者test-node-2
我们在test-node-1上进行docker login registry.happykit.net:5000
默认是不会成功的,因为我们的证书不会被操作系统信任。如下图:
现在我们再来配置一下:
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
现在重新登录就可以了。
最后我们把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,支持用户名密码认证,唯一的缺点是自签证书需要复制到系统目录。每一台要用到该私有仓库的机器都需要复制该证书到系统目录!如果条件支持的话,可以使用正规证书机构签发的泛域名证书。