Docker 私有仓库搭建
文章目录
简介
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器 Register来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
官网详情:https://docs.docker.com/registry/deploying/
Registry工作原理
index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
Docker Registry有三个角色,分别是index、registry和registry client。
-
index
负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。- Web UI
- 元数据存储
- 认证服务
- 符号化
-
registry
- 是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。
-
Registry Client
- Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
【注】:
docker 阿里云镜像加速器:
登陆阿里云 -> 控制台 -> 产品与服务 -> 容器镜像服务 -> 镜像工具 -> 镜像加速器
- 情景A:用户要获取并下载镜像
- 情景B:用户要推送镜像到registry中
- 情景C:用户要从index或registry中删除镜像。
harbor 简介
详情参照官网:https://github.com/goharbor/harbor
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
参考文献:https://www.cnblogs.com/wangzhangtao/p/12076816.html#7797-1576752979530
harbor 下载:
https://github.com/goharbor/harbor/releases
部署:(依赖性 docker 17.06.0-ce+ and docker-compose 1.18.0+)
Docker-compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
-
使用 Dockerfile 定义应用程序的环境。
-
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
-
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
compose 下载:
https://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/
最佳实验
主机 | ip |
---|---|
server1 | 172.25.9.1 |
server2 | 172.25.9.2 |
运行本地注册表
# 配置阿里云的镜像加速器
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://71gte742.mirror.aliyuncs.com"]
}
systemctl reload docker.service
# 拉取 registry 镜像
docker pull registry
# 运行名为 registry 端口映射 5000-> 5000 的 registry 镜像
docker run -d --name registry -p 5000:5000 registry
# 拉取官方的nginx 镜像进行测试
docker pull nginx
# 镜像修改名字
docker tag nginx:latest localhost:5000/nginx:latest
# 上传镜像本地仓库
docker push localhost:5000/nginx:latest
# 测试是否上传成功
curl localhost:5000/v2/_catalog
# 出现 {"repositories":["nginx"]} 表示上传成功
# 现在停止您的注册表并删除所有数据
docker container stop registry && docker container rm -v registry
运行远程注册表
# 生成自签名证书
cd /etc/docker/
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.westos.org.key -x509 -days 365 -out certs/reg.westos.org.crt
# 新建registry
docker run -d \
--restart=always \
--name registry \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=certs/reg.westos.org.crt \
-e REGISTRY_HTTP_TLS_KEY=certs/reg.westos.org.key \
-p 443:443 \
registry
# 手动建立证书存放目录,复制之前生的自签名证书
mkdir -p /etc/docker/certs.d/reg.westos.org/
cp certs/reg.westos.org.crt certs.d/reg.westos.org/ca.crt
#添加解析
vim /etc/hosts
172.25.9.1 server1 reg.westos.org
# 修改 nginx 镜像名,上传测试
docker tag nginx:latest reg.westos.org/nginx:latest
# 上传成功则部署成功
docker push reg.westos.org/nginx:latest
# serer1 复制证书到远端
scp -r certs.d root@server2:/etc/docker
# server2 测试
# server2 添加解析
vim /etc/hosts
172.25.9.1 server1 reg.westos.org
docker pull reg.westos.org/registry
用户认证
# 生成认证用户
yum install -y httpd-tools
htpasswd -B -c auth/htpasswd admin
htpasswd -B auth/htpasswd tom
# 强制删除之前的 registry
docker rm -f registry
# 重新构建 registry
docker run -d \
--name registry \
-p 443:443 \
-v /opt/rgistry:/var/lib/registry \
-v "$(pwd)"/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.westos.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/reg.westos.org.key \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
registry
# 未登陆直接上传,会报错 no basic auth credentials
# 登陆
docker login reg.westos.org
# 登陆信息存放的地方
cat /root/.docker/config.json
# 上传
docker push reg.westos.org/nginx:latest
harbor 部署
安装
# 下载 docker-compose 工具,并给予执行权限
mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 配置 harbor
tar zxf harbor-offline-installer-v1.10.1.tgz
cd harbor/
# 修改配置文件,指定主机名,和证书存放的位置
vim harbor.yml
……
hostname: reg.westos.org
……
certificate: /certs/reg.westos.org.crt
private_key: /certs/reg.westos.org.key
……
# 之前生成证书在 /etc/docker/ 目录下,移动到根下,或者修给 harbor 配置文件中的路径为该路径。
cd /etc/docker/
cp certs / -r
# 删除之前实验的 registry
docker rm -f registry
# 安装 harbor
cd /root/harbor/
./install.sh
# docker-compose 查看状态都为 up 则成功
docker-compose ps
harbor 上传测试
# 上传必须登陆
docker login reg.westos.org
admin
westos
# 修改镜像标签,并上传。reg.westos.org/library/ubuntu:latest (reg.westos.org : 主机、library : 默认发布目录、ubuntu:latest : 镜像名字)
docker tag reg.westos.org/ubuntu:latest reg.westos.org/library/ubuntu:latest
docker push reg.westos.org/library/ubuntu:latest
harbor 远程拉取测试
serer2
# 镜像拉取,加速器,优先从私有仓库拉取
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
#添加解析
vim /etc/hosts
172.25.9.1 server1 reg.westos.org
# 重新加载配置文件
systemctl reload docker.service
# 拉取镜像,拉取时提示 latest: Pulling from library/ubuntu ,表示私有仓库拉取成功
docker pull ubuntu
harbor 插件
- –with-notary :内容信任,签名
- –with-clair :安全扫描
- –with-chartmuseum : helm 仓库
cd /root/harbor/
# 重新安装之前,先停止已经存在harbor
docker-compose stop
# 根据需求添加相应的插件
./install.sh --with-notary --with-clair --with-chartmuseum
# docker-compose 查看状态都为 up 则成功
docker-compose ps