本文记录使用 nexus 3 部署 docker 镜像仓库及镜像代理功能。 使用 Kubespray 在安装 kubernetes 过程中,会直接从官方镜像仓库(如 hub.docker.com,gcr.io, quay.io 等)拉取镜像,同时还会从 github 下载 kubeadm、etcd、cni 等二进制文件,重度依赖访问外网,因此我们有必要先配置镜像代理服务器。
下载 nexus-3.20.1-01-unix.tar.gz
访问如下地址,随便填写一个邮箱,下载 nexus oss 二进制包:
Nexus Repository OSS - Universal Repository Solution | Sonatype
解压并启动服务
- cd /data/
- tar xf /root/nexus-3.20.1-01-unix.tar.gz
- ln -sf nexus-3.19.1-01 nexus
- cd nexus && bin/nexus start
以上会将服务运行在 8081
端口,默认账户名/密码:admin/admin123
准备一个可以正常访问外网的代理
省略。
HTTP proxy host:127.0.0.1
HTTP proxy host:30888
创建 Blobs
在 Nexus 上创建一个 Docker 专用的 Blob,Nexus 会在磁盘上创建一个对应的目录并存储文件及索引。
这样,如果某天我们要在其它环境部署一套一样的代理,我们可以直接拷贝 Nexus 应用目录,以及这个 blob 存储就行了。
在 设置 - Repository - Blob Stores 下,新建一个 Blob,比如名为 blob-docker
。
创建 Repositries
依次配置添加下面几个仓库地址的 Docker 镜像代理,类型选择 Proxy:
最后配置一个 Group 类型的 Docker 仓库,将前面代理类型仓库进行聚合。
这里需要为 Group 类型的仓库地址监听一个端口,用来提供 docker 服务,我们使用 8082 。然后为这个服务绑定一个域名,并配置 https 证书。
做完这些,我们就有一个自己的 Docker 镜像仓库地址了, 比如域名为:
https://hub.fintecer.com
- docker pull hub.fintecer.com/busybox
- docker pull hub.fintecer.com/nginx:1.16.0
- docker pull hub.fintecer.com/coreos/etcd:v3.2.26
"registry-mirrors": ["https://hub.fintecer.com"],
配置, 我们甚至可以不用域名就能直接拉取镜像了。- mkdir /etc/docker
- cat > /etc/docker/daemon.json << EOF
- {
- "registry-mirrors": ["https://hub.fintecer.com"],
- "bip": "10.255.255.1/24",
- "ipv6": false
- }
- EOF
-
- # 重启服务
- systemctl daemon-reload
- systemctl restart docker
最后使用如下方式下载镜像:
- docker pull busybox
- docker pull nginx:1.16.0
- docker pull coreos/etcd:v3.2.26
当我们从 github 下载现成的 yaml 文件时,几乎无需修改镜像地址就能正常拉起服务了,非常方便。