Docker 私有仓库 harbor
Docker 仓库(Repository)是集中存放镜像的地方。我们拉取镜像的时候,除了使用 Docker 官方的公共仓库 Docker Hub 外,还可以使用自行搭建的本地私有仓库。
harbor 私有仓库是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。
harbor 私有仓库和 registry 私有仓库相比,功能更强大,它增加了一些企业必需的安全、标识和管理等功能,支持 web 图形化管理,支持多节点的镜像资源复制。
本文介绍使用 harbor 搭建私有仓库。
1. 安装 docker-compose
harbor 可以部署在任何支持 Docker 的Linux发行版上。部署 harbor 必须先安装 docker 和 docker-compose。
1)下载 docker-compose 安装脚本:
$ curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2)赋予docker-compose 执行权限:
$ chmod +x /usr/local/bin/docker-compose
3)验证 docker-compose 是否正常执行:
$ docker-compose -v 执行结果: docker-compose version 1.23.1, build b02f1306
2. 安装 harbor
1)下载 harbor 安装包
$ wget https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz $ ls -l 执行结果: total 543100 -rw-------. 1 root root 1363 Jul 25 2019 anaconda-ks.cfg -rw-r--r-- 1 root root 556130191 Oct 18 02:11 harbor-offline-installer-v2.1.0.tgz
2)解压 harbor 安装包
$ tar -zxvf harbor-offline-installer-v2.1.0.tgz 执行结果: harbor/harbor.v2.1.0.tar.gz harbor/prepare harbor/LICENSE harbor/install.sh harbor/common.sh harbor/harbor.yml.tmpl
3)修改配置文件
复制一份配置文件模板,作为配置文件。
$ cd harbor/ $ cp harbor.yml.tmpl harbor.yml
依据自己的实际情况修改配置文件 harbor.yml。
一般情况下,需要修改的主要内容如下:
# 修改 harbor 服务器的地址,可以是域名,ip。 # 本文安装机器的 ip 地址为:10.10.1.37 hostname = 10.10.1.37 # 本机IP地址 # harbor管理员admin的密码 harbor_admin_password = Harbor12345 # 修改 harbor 服务器的Web管理的端口号 # 本文设定端口号:8888 http: port: 8888 # Web管理的端口号 # 如果不使用 https,注释掉 https 段 # https: # https port for harbor, default is 443 # port: 443 # The path of cert and key files for nginx # certificate: /your/certificate/path # private_key: /your/private/key/path
4)执行 install 脚本
$ ./install.sh 运行结果: [Step 0]: checking if docker is installed ... Note: docker version: 19.03.5 [Step 1]: checking docker-compose is installed ... Note: docker-compose version: 1.23.1
3. 验证 harbor 搭建是否成功
我们测试将一个专门制作的镜像推送到 harbor 私有仓库:
1)配置客户端不安全 registry
由于我们启动的 harbor 服务使用了 http 而不是 https,不是安全可信赖的服务,所以必须先修改客户端 docker 的配置文件 /etc/docker/daemon.json,添加一项不安全的 insecure-registries:
{ "registry-mirrors": "insecure-registries": ["10.10.1.37:8888"] }
使用 systemctl restart docker 命令重启 docker 服务。
2)制作测试镜像
先通过 docker images 命令查看本地已经下载的镜像。
$ docker images 运行结果: REPOSITORY TAG IMAGE ID... alpine latest f70734b6a266
本地有一个已经下载的镜像 alpine:latest,我们以其为模板创建一个测试用的镜像。
查看 harbor 服务器的 ip 地址,本文测试服务器的 ip 地址为 10.10.1.37。
我们要把测试镜像推送到 harbor 服务器的私有仓库,镜像名称必须符合特定的格式: registry_url:port/project/ImageName:tag。
因此,我们测试镜像的名称设定为:10.10.1.37:8888/library/alpine:latest。
先使用 docker tag 命令创建测试镜像:
$ docker tag alpine:latest 10.10.1.37:8888/library/alpine:latest
3)登录 harbor 私有仓库
$ docker login 10.10.1.37:8888 执行结果: Username : 输入用户名 admin Password: 输入密码 Harbor12345
4)推送镜像至 harbor 私有仓库
使用 docker push 命令把测试镜像推送到私有仓库:
$ docker push 10.10.1.37:8888/library/alpine:latest
如果执行结果如下:
The push refers to a repository [10.10.1.37:8888/library/alpine]
Get https://10.10.1.37:8888/v2/: http: server gave HTTP response to HTTPS client
那么执行结果是错误的,因为我们启动的 harbor 服务使用 http 不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json,添加一项不安全的 insecure-registries:
{ "registry-mirrors": "insecure-registries": ["10.10.1.37:8888"] }
使用 systemctl restart docker 命令重启 docker 服务。
再次使用 docker push 命令,把测试镜像推送到私有仓库:
$ docker push 10.10.1.37:8888/library/alpine:latest 执行结果: The push refers to a repository [10.10.1.37:8888/alpine] 3e207b409db3: Pushed
本次推送成功。
4. harbor Web管理端
在浏览器中访问 http://10.10.1.37:8888/ ,输入用户名和密码,就可以对镜像库进行管理。
构建 Docker 镜像的指令是 docker build,另外还需要制作一个包含构建指令的 Dockerfile 脚本文件。Dockerfile 是一个用来构建镜像的脚本文件,里面包含了构建镜像所需的指令和说明。