镜像仓库 Harbor 离线安装手册

本文主要阐述如何在离线环境下安装 Harbor 镜像仓库。

环境说明:

操作系统:centos
harbor 版本:v1.5.0
docker 版本:docker-1.13.1-94
使用两台服务器,harbor 服务器用来安装 harbor,客户端服务器用来验证和测试。

1、安装准备

确保两台服务器都安装了 docker,一般的云主机如腾讯云或者是阿里云自带的 repos文件都有 docker 的 rpm包,所以一般情况下直接安装即可,除非有指定版本的需求。

yum install -y docker
systemctl enable docker.service
systemctl start docker.service
systemctl status docker.service

harbor 服务器需要下载 harbor 离线包 和 docker-compose 软件包。

  • 下载 haobor 安装包并解压,下载目录为:/appdata
[root@master appdata]# pwd
/appdata
[root@master appdata]# wget http://harbor.orientsoft.cn/harbor-v1.5.0/harbor-offline-installer-v1.5.0.tgz
[root@master appdata]# du -sh harbor-offline-installer-v1.5.0.tgz
824M    harbor-offline-installer-v1.5.0.tgz
[root@master appdata]# tar -zxvf harbor-offline-installer-v1.5.0.tgz
[root@master appdata]# ls | grep harbor
harbor
harbor-offline-installer-v1.5.0.tgz
  • 下载 docker-compose 并安装
[root@master /]# curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-\`uname -s\`-\`uname -m\` -o /usr/local/bin/docker-compose
[root@master /]# chmod +x /usr/local/bin/docker-compose
  • 验证 docker-compose 是否安装成功
[root@master /]# docker-compose -version
docker-compose version 1.24.0, build 0aa59064

2、修改 harbor 配置文件

  • 修改 harbor 服务端口
    harbor 默认使用 80 端口,但一般服务器上的 80 端口会被其他服务占用,可以修改 harbor 默认的端口,一般修改为 5000。
[root@master ~]# cd /appdata/harbor
[root@master harbor]# ls
common                    docker-compose.notary.yml  ha          harbor.v1.5.0.tar.gz  LICENSE  prepare
docker-compose.clair.yml  docker-compose.yml         harbor.cfg  install.sh            NOTICE
[root@master harbor]# cp docker-compose.yml docker-compose.yml.bak
[root@master harbor]# vim docker-compose.yml

    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    ports:
      - 5000:80
      - 443:443
      - 4443:4443
  • 设置 hostname 和后台管理账户 admin 的密码
[root@master harbor]# cd /appdata/harbor
[root@master harbor]# ls
common                    docker-compose.notary.yml  ha          harbor.v1.5.0.tar.gz  LICENSE  prepare
docker-compose.clair.yml  docker-compose.yml         harbor.cfg  install.sh            NOTICE
[root@master harbor]# cp harbor.cfg harbor.cfg.bak
[root@master harbor]# vim harbor.cfg

hostname = 47.99.101.222:5000    # 其中 47.99.101.222 是云主机IP
harbor_admin_password = Harbor@123456  # 密码按需修改

3、安装 harbor

  • 安装前,检查是否满足两个必要条件:
    1) docker 服务是否已安装,并且处于 Running 状态;
    2) docker-compose 是否已安装。

  • 执行install.sh脚本

[root@master harbor]# pwd
/appdata/harbor
[root@master harbor]# ls
common                    docker-compose.notary.yml  ha          harbor.v1.5.0.tar.gz  LICENSE  prepare
docker-compose.clair.yml  docker-compose.yml         harbor.cfg  install.sh            NOTICE
[root@master harbor]# ./install.sh
  • 检查是否部署成功
[root@master harbor]# docker ps
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS                 PORTS                                                                NAMES
a3e4600433f5        vmware/harbor-jobservice:v1.5.0        "/harbor/start.sh"       6 hours ago         Up 6 hours                                                                                  harbor-jobservice
fb5be3e51669        vmware/nginx-photon:v1.5.0             "nginx -g 'daemon ..."   6 hours ago         Up 6 hours (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:5000->80/tcp   nginx
a6f615b7fda8        vmware/harbor-ui:v1.5.0                "/harbor/start.sh"       6 hours ago         Up 6 hours (healthy)                                                                        harbor-ui
6815d3923952        vmware/registry-photon:v2.6.2-v1.5.0   "/entrypoint.sh se..."   6 hours ago         Up 6 hours (healthy)   5000/tcp                                                             registry
307a76950d0a        vmware/harbor-adminserver:v1.5.0       "/harbor/start.sh"       6 hours ago         Up 6 hours (healthy)                                                                        harbor-adminserver
77491b86a979        vmware/redis-photon:v1.5.0             "docker-entrypoint..."   6 hours ago         Up 6 hours             6379/tcp                                                             redis
6710cfb03fb6        vmware/harbor-db:v1.5.0                "/usr/local/bin/do..."   6 hours ago         Up 6 hours (healthy)   3306/tcp                                                             harbor-db
c3917ccc8bfd        vmware/harbor-log:v1.5.0               "/bin/sh -c /usr/l..."   6 hours ago         Up 6 hours (healthy)   127.0.0.1:1514->10514/tcp                                            harbor-log

4、测试

  • 服务器测试
    1) 在浏览器上输入地址:http://47.99.101.222:5000(harbor 云主机外网 IP),能看到如下界面。一般情况下,需要在云主机上设置安全组规则,放行 5000 端口,可以先用 telnet 命令验证 5000 端口是否开通,如果没放行,设置即可。


    harbor界面

2)输入 admin 账号和密码,验证是否登录成功。


登录界面

3)新建测试项目,如:hbs,验证是否新建 project 成功。


新建测试项目
  • 客户端测试
    1)确保客户端节点已经安装好 docker。
[root@node ~]# systemctl status docker.service

2)修改 docker.service 配置文件,添加 --insecure-registry 选项,值为 harbor服务器IP和端口。

[root@node ~]# vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --init-path=/usr/libexec/docker/docker-init-current \
          --seccomp-profile=/etc/docker/seccomp.json \
          --insecure-registry=47.99.101.222:5000 \

[root@node ~]# systemctl daemon-reload
[root@node ~]# systemctl restart docker.service
[root@node ~]# docker info | grep Insecure

3)镜像推送

# 先随机拉取一个镜像,例如 nginx镜像
[root@node ~]# docker pull docker.io/nginx:latest
Trying to pull repository docker.io/library/nginx ...
latest: Pulling from docker.io/library/nginx
27833a3ba0a5: Pull complete
ea005e36e544: Pull complete
d172c7f0578d: Pull complete
Digest: sha256:e71b1bf4281f25533cf15e6e5f9be4dac74d2328152edf7ecde23abc54e16c1c
Status: Downloaded newer image for docker.io/nginx:latest

# 将 nginx 镜像打上新的 tag,格式是:${harbor 服务器 IP}:${harbor 监听端口}/${项目}/${镜像名称}:${镜像 tag},确保项目要在 harbor 上提前建好。
[root@node ~]# docker tag docker.io/library/nginx 47.99.101.222:5000/hbs/nginx:latest

# 登录harbor
[root@node ~]# docker login 47.99.101.222:5000
Username (admin): admin
Password:
Login Succeeded

# 推送镜像
[root@node ~]# docker push 47.99.101.222:5000/hbs/nginx:latest
The push refers to a repository [47.99.101.222:5000/hbs/nginx]
fc4c9f8e7dac: Pushed
912ed487215b: Pushed
5dacd731af1b: Pushed
latest: digest: sha256:c10f4146f30fda9f40946bc114afeb1f4e867877c49283207a08ddbcf1778790 size: 948

5、更多 docker-compose 命令

docker-compose 的命令和 docker 的命令很相似,但是大部分 compose 的命令都需要到 docker-compose.yml 文件所在的目录下才能执行

  • 以后台守护进程运行
[root@master harbor]# docker-compose up -d
  • 查看 compose 运行的服务/容器
[root@master harbor]# docker-compose ps
       Name                     Command                  State                               Ports
--------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)
harbor-db            /usr/local/bin/docker-entr ...   Up (healthy)   3306/tcp
harbor-jobservice    /harbor/start.sh                 Up
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp
harbor-ui            /harbor/start.sh                 Up (healthy)
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp,
                                                                     0.0.0.0:5000->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp
registry             /entrypoint.sh serve /etc/ ...   Up (healthy)   5000/tcp
  • 停止 compose 服务
[root@master harbor]# docker-compose stop
  • 重启 restart 服务
[root@master harbor]# docker-compose restart

更多关于 docker-compose 的命令可以看看帮助文档即可。

推荐阅读更多精彩内容