Docker私库的搭建及常用方法-docker-registry方式
一、简单介绍
前面已经介绍,可以使用 Docker Hub 公共仓库,但是大多数情况企业都需要创建一个本地仓库供自己使用。这里介绍几种搭建私库的方法
私库的好处有几点
1、节约带宽
2、可以自己定制系统
3、更加安全
二、我知道的几种方法
1、利用官方提供的工具 docker-registry 来配置私库
官方提供的镜像,注意这个工具是个镜像,直接下载并使用 registry 镜像启动 docker 实例就可以了
2、利用 Harbor-Registry,来搭建私库
Harbor 是一个用于存储 Docker 镜像的企业级 Registry 服务
三、通过官方 docker-registry 来配置私库
1、环境
docker 私库地址:192.168.216.51 web1
docker 服务器地址:192.168.216.52 web2
,此节点使用私库服务器来 pull/push
镜像
2、拓扑
备注:这里 docker hub
就是私库
docker engine
前面原理篇有介绍 ,是 docker 架构中的运行引擎,同时也 Docker 运行的核心模块。它扮演 Docker container
存储仓库的角色,并且通过执行 job 的方式来操纵管理这些容器。
3、安装 docker 私有仓库
1)首先安装
方式 1
也可以下载 rpm 包安装
rpm 包地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
这里下载的是 docker-ce-cli-19.03.2-3.el7.x86_64.rpm
为了解决依赖,配置本地源
[root@web2 yum.repos.d]# mv Centos-7.repo ./backup/
[root@web2 yum.repos.d]# ll
[root@web2 yum.repos.d]# cd /root/docker-rpm/
[root@web2 docker-rpm]# createrepo ./
yum install docker-ce -y
方式 2
配置阿里源,epel
源里面我这里没有 docker
,所以配置阿里源的 docker
源
阿里源地址:https://mirrors.aliyun.com/docker-ce/linux/centos/
yum install dockre-ce -y
2)开启防火墙
systemctl start firewalld.service
3)开启私有仓库服务端
systemctl start docker
systemctl enable docker
确保两台几点都安装了 docker,并启动
4、私有仓库服务器拉取或 load registry
方法 1、直接拉取
[root@web1 yum.repos.d]# docker pull registry
[root@web1 yum.repos.d]# docker images
方法 2、下载 registry.tar
包,然后导入即可.
docker load -i registry.tar
5、私库服务器随便拉取一个镜像,并且打好标签
docker pull busybox
docker tag docker.io/busybox:latest 192.168.216.51:5000/busybox:latest
打好标签就是下面标红的行
[root@web1 ~]# docker images
6、修改配置文件,指定私库 url
需要安装 docker-common
,检查一下有没有安装
[root@web1 yum.repos.d]# rpm -qf /etc/sysconfig/docker
docker-common-1.13.1-96.gitb2f74b2.el7.centos.x86_64
[root@web1 yum.repos.d]#
配置文件添加--insecure-registry 192.168.216.51:5000
[root@web1 yum.repos.d]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
#
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.216.51:5000'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/dockerd
fi
7、重启 docker
[root@web1 yum.repos.d]# systemctl restart docker
8、启动私有仓库,使用 registry 镜像运行一个 docker 就可以了
[root@web1 yum.repos.d]# docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry
###-v 指定本地持久路径
27d56aa54e167c26c76e25136b247072883aa29dde247f20c45f97fafedb650b
[root@web1 yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27d56aa54e16 registry "/entrypoint.sh /e..." About a minute ago Up 58 seconds 0.0.0.0:5000->5000/tcp frosty_ptolemy
[root@web1 yum.repos.d]# netstat -antlop |grep 5000
tcp6 0 0 :::5000 :::* LISTEN 27767/docker-proxy- off (0.00/0/0)
[root@web1 yum.repos.d]# netstat -antup |grep 5000
tcp6 0 0 :::5000 :::* LISTEN 27767/docker-proxy-
[root@web1 yum.repos.d]#
[root@web1 yum.repos.d]# ls /opt/registry
###目录已经自动创建
9、本机上传镜像,成功后使用 tree 查看
docker push 192.168.216.51:5000/busybox
[root@web1 ~]# tree /opt/registry/docker/registry/
10、使用 52 节点下载 busybox 镜像
我这里已经装好 docker,就不演示怎么安装 docker,这里都是按照之前原理篇的安装方式,请见如下链接:
安装 docker 请参考:Docker1 架构原理及简单使用
### 修改配置文件添加"--insecure-registry不安全的注册"
[root@web2 ~]# cat /etc/sysconfig/docker |grep 5000
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.216.51:5000'
## 拉取镜像
[root@web2 ~]# docker pull 192.168.216.51:5000/busybox
Using default tag: latest
Trying to pull repository 192.168.216.51:5000/busybox ...
latest: Pulling from 192.168.216.51:5000/busybox
7c9d20b9b6cd: Pull complete
Digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
Status: Downloaded newer image for 192.168.216.51:5000/busybox:latest
## 查看镜像
[root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.216.51:5000/busybox latest 19485c79a9bb 3 weeks ago 1.22 MB
## 运行实例-成功
[root@web2 ~]# docker run 192.168.216.51:5000/busybox echo "1111"
1111
[root@web2 ~]#
## 创建镜像链接并命名
[root@web2 ~]# docker tag 192.168.216.51:5000/busybox busybox:v1
## 删除镜像
[root@web2 ~]# docker rmi 192.168.216.51:5000/busybox
[root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox v1 19485c79a9bb 3 weeks ago 1.22 MB
###运行新的实例
[root@web2 ~]# docker run busybox:v1 echo 222
222
到这里已经完成了私库搭建方方法,不过应该在上传一个新版本测试:
[root@web2 ~]# docker tag busybox:v1 192.168.216.51:5000/busybox:v1
[root@web2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.216.51:5000/busybox v1 19485c79a9bb 3 weeks ago 1.22 MB
busybox v1 19485c79a9bb 3 weeks ago 1.22 MB
[root@web2 ~]# docker push 192.168.216.51:5000/busybox
The push refers to a repository [192.168.216.51:5000/busybox]
6c0ea40aef9d: Layer already exists
v1: digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 size: 527
[root@web2 ~]#
11、回到 51 节点测试查看有没有新的版本上传上来
在 51 节点,上用 tree 命令查看,可以看到 v1 版本
[root@web1 ~]# tree /opt/registry/docker/registry/
四、总结大家私有仓库的步骤
配置前可以先把防火墙及 selinux 全部关闭
1、安装 docker
2、修改配置文件两台节点一样,有两种方式:(注意!!!)
1)添加参数到/etc/sysconfig/docker 文件
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.216.51:5000'
2)、还可以把这行添加到启动参数里,
/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd-current --insecure-registry 192.168.216.51:5000
注意:新版本已经没有/etc/sysconfig/docker
配置文件了,所以可以统一放到启动参数/usr/lib/systemd/system/docker.service
3、拉取 registry 镜像
4、运行 registry 镜像并映射 5000 端口
5、打标签上传下载镜像完成
五、带授权的 registry
注意:这里是创建密码认证,而不是证书的认证
1、创建授权目录
mkdir /auth
2、使用 registry 镜像生成 htpasswd 加密文件其中加密了密码
创建用户名:zxg,密码 123456,并加密
docker run --entrypoint htpasswd registry -Bbn zxg 123456 >/auth/htpasswd
可以看到密码 123456 已经加密了
[root@web1 auth]# cat htpasswd
zxg:$2y$05$qCY7iWVJIoOrnIp17WQOf.fcXUTo5xm4DwP3a/8ggzZlEZ3bsnonm
注释:--entrypoint :是docker的一种指令,用于给出容器启动后默认入口
3、启动带参数的镜像
[root@web1 /]# docker run -d -p 5000:5000 --restart=always --name registry1 \
> -v /opt/registry:/var/lib/registry
> -v /auth:/auth
> -e "REGISTRY_AUTH=htpasswd"
> -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
> registry
37f0ce01ea327e6cd62798e0df683d5d2a4317c3fd865c0f1e19b654f052fe66
4、52 节点创建 busybox 便签 v2 上传,先登陆,然后上传
[root@web2 ~]# docker login 192.168.216.51:5000
Username: zxg
Password:
Login Succeeded
[root@web2 ~]# docker tag busybox:v2 192.168.216.51:5000/busybox:v2
[root@web2 ~]# docker push 192.168.216.51:5000/busybox:v2
5、回到 51 上确认是否上传成功
[root@web1 auth]# tree /opt/registry/docker/registry/v2/
可以看到已经有 v2 版本,成功.
六、私库的搭建及常用方法-harbor-registry 方式
-
官方已经提供 registry 镜像为什么还需要用 harbor
registry 缺少镜像清理机制,可以 push 但是不能删除,耗费空间
registry 缺乏相应的扩展机制
harbor 特点:云本地环境,RBAC 基于角色的权限控制,基于策略的镜像复制,漏洞扫描, LDAP/AD 支持,身份验证,镜像删除和垃圾清理,镜像签名,用户界面,审计,RESTful api,安装简单 -
什么是 harbor
VMware 公司开源的企业级 registry 项目,基于 docker registry 开发的,harbor 是一个用于存储和分发 docker 镜像的企业级 registry 服务器,通过添加需要的功能如安全性、身份认证、管理来扩展了源 Docker Distribution,提升了镜像的传输效率,支持 registry 之间复制镜像,还提供了更高级的安全功能,比如:漏洞分析、用户管理、访问控制、活动审计等。该项目已经在 github 上获得超过了 4600 颗星。
官方网址:https://goharbor.io/
github 安装指南:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
下载:https://github.com/goharbor/harbor/releases
注意:这里直接使用 offline 版本即可
- 这里没有对 harbor 进一步介绍。具体的方式见下面:
https://www.cnblogs.com/zhangxingeng/p/11598708.html