0%

使用 Harbor 创建本地 Docker 仓库

关于 Docker 系列其他文章的传送门

  1. 《 简单了解 Linux 容器是什么 以及 Docker 常用命令操作说明 》

  2. 《 Docker 中 4 种网络模型的概念和实现 》

  3. 《 关于 Docker 中镜像与存储卷的概念和详细使用方法 》

  4. 《 使用 Dockerfile 定制镜像 搭建 php 站点 》

  5. 《 使用 Harbor 创建本地 Docker 仓库 》     您当前所在位置



harbor

制作本地仓库

在运行着大量容器的环境里,制作本地镜像仓库,除了能缓解互联网出口的压力,还能更快的启动容器。

本文介绍 2 个制作镜像仓库的软件:
1. docker-distribution
2. Harbor

这两个软件有什么不同呢,首先 docker-distribution 是一个非常简单仓库,没有认证和隔离机制,其内部只有一个顶级仓库,是一个大平层,只适合自己简单使用。

正是因为 docker-distribution 太简陋,不太适合做企业级应用,所以就有了第三方组织(vmware 中国)在 docker-distribution 的基础上做了二次研发,并作为独立的项目开源了,后捐给了 “CNCF”,这就是 Harbor。
如果想了解 CNCF 是什么组织,以及 Docker 公司和 Google、CNCF 之间的“爱恨情仇”,戳这里

一、docker-distribution

先介绍第一种软件的使用方法。

1. 安装软件

1
yum install docker-distribution

查看都安装了哪些文件。
rpm -ql docker-distribution

1
2
3
4
5
6
7
8
9
10
/etc/docker-distribution/registry/config.yml   # 配置文件
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry # 默认镜像存放位置

查看配置文件。
vim config.yml

1
2
3
4
5
6
7
8
9
10
11
version: 0.1  # 版本
log: # 日志
fields:
service: registry
storage:
cache:
layerinfo: inmemory # #默认使用内存做缓存
filesystem:
rootdirectory: /var/lib/registry #默认存放所有镜像的本地目录
http: # 只提供 http 协议,并默认监听在 *:5000
addr: :5000

2.配置服务

启动 docker-distribution 服务。

1
systemctl start docker-distribution

把镜像改成这样格式的名字,因为不存在账号机制,所有都是顶级仓库:

  • 仓库地址/镜像名:TAG
1
docker tag centos:7.6.1810 192.168.50.11:5000/centos:1

推送镜像,提示 http: server gave HTTP response to HTTPS client,这是因为 docker 客户端默认只允许使用 HTTPS 的协议传输。

1
2
3
~ ]# docker push 192.168.50.11:5000/centos:1
The push refers to repository [192.168.50.11:5000/centos]
Get https://192.168.50.11:5000/v2/: http: server gave HTTP response to HTTPS client

解决办法
编辑 /etc/docker/daemon.json 文件,或许需要创建,添加一个字段,指明不安全的仓库。

1
{ "insecure-registries":["192.168.50.11:5000"] }

重启 docker 服务。

1
systemctl start docker

3. 推送镜像

再次推送镜像,成功。

1
2
3
4
~ ]# docker push 192.168.50.11:5000/centos:1
The push refers to repository [192.168.50.11:5000/centos]
89169d87dbe2: Pushed
1: digest: sha256:747b2de199b6197a26eb1a24d69740d25483995842b2d2f75824095e9d1d19eb size: 529

本地服务器的仓库目录已经可以看到刚上传的镜像了,是分层存放的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-> # tree /var/lib/registry
/var/lib/registry
└── docker
└── registry
└── v2
├── blobs
│   └── sha256
│   ├── 74
│   │   └── 747b2de199b6197a26eb1a24d69740d25483995842b2d2f75824095e9d1d19eb
│   │   └── data
│   ├── ac
│   │   └── ac9208207adaac3a48e54a4dc6b49c69e78c3072d2b3add7efdabf814db2133b
│   │   └── data
│   └── f1
│   └── f1cb7c7d58b73eac859c395882eec49d50651244e342cd6c68a5c7809785f427
│   └── data
└── repositories
└── centos
├── _layers
│   └── sha256
│   ├── ac9208207adaac3a48e54a4dc6b49c69e78c3072d2b3add7efdabf814db2133b
│   │   └── link
│   └── f1cb7c7d58b73eac859c395882eec49d50651244e342cd6c68a5c7809785f427
│   └── link
├── _manifests
│   ├── revisions
│   │   └── sha256
│   │   └── 747b2de199b6197a26eb1a24d69740d25483995842b2d2f75824095e9d1d19eb
│   │   └── link
│   └── tags
│   └── 1
│   ├── current
│   │   └── link
│   └── index
│   └── sha256
│   └── 747b2de199b6197a26eb1a24d69740d25483995842b2d2f75824095e9d1d19eb
│   └── link
└── _uploads

28 directories, 8 files

4. 下载镜像

pull 一下这个镜像试试,可以下载,私有仓库就完成了。

1
2
3
4
5
~ ]# docker pull 192.168.50.11:5000/centos:1
1: Pulling from centos
ac9208207ada: Pull complete
Digest: sha256:747b2de199b6197a26eb1a24d69740d25483995842b2d2f75824095e9d1d19eb
Status: Downloaded newer image for 192.168.50.11:5000/centos:1

二、Harbor

1. 下载 Harbor

Harbor 项目地址:https://github.com/goharbor/harbor

可以通过以下两种方法之一安装:

在线安装:安装程序从 Docker hub 下载 Harbor 的图像。因此,安装程序的尺寸非常小。

脱机安装:当主机没有 Internet 连接时使用此安装程序。安装程序包含预先构建的图像,因此其更大。

在这里找到最新的二进制程序,https://github.com/goharbor/harbor/releases

当前版本:V1.8.1

解压缩:

1
tar xvf harbour-offline-installer-< version >.tgz

2. 配置 Harbor

配置参数位于文件 harbor.yml 中。

必须参数

  • hostname:目标主机的主机名。它应该是目标计算机的 IP 地址或完全限定的域名(FQDN),例如:192.168.1.10reg.yourdomain.com。不要使用 localhost127.0.0.1 作为主机名;
  • data_volume:Harbor 数据的存储位置;
  • harbor_admin_password:管理员的初始密码。此密码仅在 Harbor 首次启动时生效。请注意,默认用户名/密码为 admin / Harbor12345
  • database:与本地数据库相关的配置。
    • password:默认数据库密码为 root123,应该改为一个安全的生产环境密码。

可选参数

  • http
    • port:你的 http 的端口号。
  • https:启用 https 协议。如果启用了秘钥,则必须设置为 https
    • port:https 的端口号。
    • certificate:SSL 证书的路径,仅在协议设置为 https 时应用。
    • private_key:SSL 密钥的路径,仅在协议设置为 https 时应用。

3. 安装 Harbor

配置好后执行 ./install.sh 安装,提示需要 docker-compost

1
2
3
4
~]# ./install.sh
[Step 0]: checking installation environment ...
Note: docker version: 18.09.7
✖ Need to install docker-compose(1.18.0+) by yourself first and run this script again.

安装 docker-compost 后再次执行。

1
yum install docker-compose -y && ./install.sh

由于 Harbor 也是由一组容器构成,包括 redisnginx 等,安装过程会下载很多镜像,并启动很多容器,等脚本执行完后,看到提示这面这样就说明安装完毕了。

1
2
3
4
✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://192.168.50.11.
For more details, please visit https://github.com/goharbor/harbor .

4. 注册和创建仓库

访问 http://192.168.50.11 就看到登录界面了,我们假如是其他部门的员工,要使用镜像,和 DockerHub 一样,首先注册一个测试账号。
harbor_1

使用刚才注册的用户登录。
harbor_2

项目 中创建一个新的公开镜像仓库 testproject
harbor_3

点击 推送镜像,可以看到推送到此仓库的格式。
harbor_4

5. 推送镜像

我们使用此格式,从 另一台 机器推送镜像。
docker tag SOURCE_IMAGE[:TAG] 192.168.50.11/testproject/IMAGE[:TAG]
docker push 192.168.50.11/testproject/IMAGE[:TAG]

由于我们没有使用 https 安全连接,先配置 docker 添加这个仓库为不安全。

1
2
~]# cat /etc/docker/daemon.json
{ "insecure-registries":["192.168.50.11"] }

使用刚才的账户 testuser 登录。

1
2
3
4
5
6
7
8
~]# docker login 192.168.50.11
Username: testuser
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

更改要推送镜像的 TAG

1
docker tag centos:7 192.168.50.11/testproject/centos:test

推送镜像。

1
2
3
4
~]# docker push 192.168.50.11/testproject/centos:test
The push refers to repository [192.168.50.11/testproject/centos]
d69483a6face: Pushed
test: digest: sha256:ca58fe458b8d94bc6e3072f1cfbd334855858e05e1fd633aa07cf7f82b048e66 size: 529

然后在 Harbor web 控制台中已经可以看到刚才上传的镜像了,私有本地仓库就创建好了,后期我们可以使用 admin 账户来管理。

并且在生产环境中,建议加入证书,使用 https 协议通信,为了防止单点故障,可以使用分布式存储如 Ceph 作为后端存储。
harbor_5

参考:
官方安装和配置指南

7 月就是热…
hot