1. 创建主机
这个主机位置可以随意,可以是你本地的开发机,虚拟机,也可以是私有云的主机,当然,如果是公有云的虚拟机是最好了,因为可以很方便得做 TLS 认证。
我这里选择是 GCP 的 VM,创建完之后获取到一个公网 IP:34.70.232.253
2. 域名解析【可选】
这个最好有,因为当使用 https 的时候,域名会更友好一些,当然 IP 也可以自签证书,但是,不那么友好。我这里是添加了一个 DNS 记录:
registry.liqiang.io -> 34.70.232.253
3. 运行 Docker registry
现在 Docker 已经很流行了,所以已经不用以前那种下载二进制文件,然后再慢慢配置这么麻烦了,我可以直接通过 pull Docker Image 来运行一个 Registry。
安装 Docker-CE
[[email protected]]# yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine [[email protected]]# yum install -y yum-utils device-mapper-persistent-data lvm2 [[email protected]]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo [[email protected]]# yum install docker-ce
运行 Docker Registry
[[email protected]] docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry:2
[备注]
其实到这里和我之前写的运行 Docker Registry 一致,不同之处在于后面代理开始的地方。
4. 配置 Caddy
4.1 安装 Caddy
因为 Caddy 支持自己申请维护 https,所以我也就不想用 Nginx 来处理了,这里的 Caddy 默认版本是 1.0.3,所以可以直接从 Yum 中下载:
[[email protected]]# yum install -y caddy
4.2 配置 Caddy
这个可以直接写配置文件:
[[email protected]]# cat Caddyfile
registry.liqiang.io {
tls [email protected]
basicauth / username password
proxy /v2/ :5000 {
header_upstream X-Forwarded-Proto {scheme}
header_upstream X-Forwarded-For {host}
header_upstream Host {host}
}
}
其中 basicauth / username password
可要可不要,推荐要。
4.3 启动 Caddy
启动 Caddy 就变得非常简单了:
[[email protected]]# caddy
Activating privacy features... done.
Serving HTTPS on port 443
https://registry.liqiang.io
Serving HTTP on port 80
http://registry.liqiang.io
WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with `ulimit -n 8192`.
5. 试验效果
5.1 Login Docker Registry
[[email protected]]# docker login registry.liqiang.io
Username: username
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
这里的 Username 和 password 就填 4.3 中的就可以了,然后发现登录成功了。
5.2 推送 Image
光登录还不够,下一步是推送 Image,查看一下效果:
[[email protected]]# docker tag busybox:1.31.0 registry.liqiang.io/busybox:1.31.0
[[email protected]]# docker push registry.liqiang.io/busybox:1.31.0
The push refers to repository [registry.liqiang.io/busybox]
0d315111b484: Pushed
1.31.0: digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 size: 527
OK,完美工作!