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 方式

  1. 官方已经提供 registry 镜像为什么还需要用 harbor
    registry 缺少镜像清理机制,可以 push 但是不能删除,耗费空间
    registry 缺乏相应的扩展机制
    harbor 特点:云本地环境,RBAC 基于角色的权限控制,基于策略的镜像复制,漏洞扫描, LDAP/AD 支持,身份验证,镜像删除和垃圾清理,镜像签名,用户界面,审计,RESTful api,安装简单

  2. 什么是 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 版本即可

  1. 这里没有对 harbor 进一步介绍。具体的方式见下面:
    https://www.cnblogs.com/zhangxingeng/p/11598708.html
关于我
loading