vlambda博客
学习文章列表

Centos部署企业级Docker仓库:Harbor

1 服务器信息

  • 操作系统: Centos7.9x64

  • 用户名/密码: root/geoscene

  • 机器名: ps.geoscene.cd

2 安装Docker

介绍安装可访问外网的情况下,安装稳定版本的 Docker的步骤:

  1. 更新系统: yum update

  2. 卸载旧版本的 Docker

 
   
   
 
  1. yum remove docker \

  2. docker-client \

  3. docker-client-latest \

  4. docker-common \

  5. docker-latest \

  6. docker-latest-logrotate \

  7. docker-logrotate \

  8. docker-engine

  1. 安装 Docker依赖项: yum install-y yum-utils,提供 yum-config-manager访问工具

  2. 添加 Docker仓库: yum-config-manager--add-repo https://download.docker.com/linux/centos/docker-ce.repo

  3. 安装 DockerEngine: yum install docker-ce docker-ce-cli containerd.io

  4. 启动 Docker服务: systemctl start docker

  5. 配置 Docker开机启动: systemctl enable docker

  6. 查看 Dokcer状态: systemctl status docker

3 安装docker-compose

  1. 下载稳定版本: sudo curl-L"https://github.com/docker/compose/releases/download/1.28.3/docker-compose-$(uname -s)-$(uname -m)"-o/usr/local/bin/docker-compose

  2. 应用可执行权限: sudo chmod+x/usr/local/bin/docker-compose

4 安装Harbor

  1. 拷贝 Harbor安装包 harbor-offline-installer-v2.0.6.tgz至 /usr/local文件夹

  2. 解压安装包: tar-xzvf harbor-offline-installer-v2.0.6.tgz

  3. 修改 harbor.yml.tmp文件名称: mv harbor.yml.tmp harbor.yml

  4. 修改 harbor.yml文件: vi harbor.yml,修改 http的端口为8081,修改 harbor_admind_password

  5. 如果不需要使用 https访问,可以屏蔽 https配置,跳过第5章;若需要 https访问,可查看第5章内容

  6. 其余配置项保持默认

  7. 如果需要 https访问,参照第5章配置 https相关证书后,指定 ./prepare,来为 nginx配置 https;如果不需要 https访问,查看第8步

  8. 安装 Harbor: ./install.sh,会自动安装依赖的 Docker镜像;

  9. 访问 Harbor并创建项目 test

5 配置HTTPS访问

配置 HarborHTTPS访问呢,需要为其创建给相关的证书,具体操作如下:

5.1 生成证书颁发机构证书

官网文档中讲,生产环境中应该使用从 CA获得证书。但是,在测试或者开发环境中,可以自己生成 CA证书。

  1. 生成 CA证书私钥

 
   
   
 
  1. $ openssl genrsa -out ca.key 4096

  1. 生成 CA证书

 
   
   
 
  1. $ openssl req -x509 -new -nodes -sha512 -days 3650 \

  2. -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \

  3. -key ca.key \

  4. -out ca.crt

5.2 生成服务器证书

  1. 生成一个私钥

 
   
   
 
  1. $ openssl genrsa -out ps.geoscene.cd.key 4096

  1. 生成一个CSR(证书签名请求)

 
   
   
 
  1. openssl req -sha512 -new \

  2. -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=ps.geoscene.cd" \

  3. -key ps.geoscene.cd.key \

  4. -out ps.geoscene.cd.csr

  1. 生成一个 V3扩展文件

 
   
   
 
  1. cat > v3.ext <<-EOF

  2. authorityKeyIdentifier=keyid,issuer

  3. basicConstraints=CA:FALSE

  4. keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

  5. extendedKeyUsage = serverAuth

  6. subjectAltName = @alt_names


  7. [alt_names]

  8. DNS.1=ps.geoscene.cd

  9. DNS.2=ps.geoscene.cd

  10. DNS.3=hostname

  11. EOF

  1. 使用 v3.txt文件为 Harbor服务器生成证书

 
   
   
 
  1. openssl x509 -req -sha512 -days 3650 \

  2. -extfile v3.ext \

  3. -CA ca.crt -CAkey ca.key -CAcreateserial \

  4. -in ps.geoscene.cd.csr \

  5. -out ps.geoscene.cd.crt

5.3 为Harbor和Docker提供证书

  1. 查看 /data目录下有没有 cert文件夹,如果没有则创建一个文件夹

  2. 拷贝服务器密钥和证书到 cert文件夹

 
   
   
 
  1. $ cp ps.geoscene.cd.crt /data/cert/

  2. $ cp ps.geoscene.cd.key /data/cert/

  1. 为了 Docker使用,将 .crt转为 .cert, Dockerdaemon将 .crt文件看做 CA证书,将 .cert文件看做是客户端证书

 
   
   
 
  1. $ openssl x509 -inform PEM -in ps.geoscene.cd.crt -out ps.geoscene.cd.cert

  1. 将服务器证书、密钥和 CA文件拷贝到 Docker证书文件夹

/etc/docker文件夹中创建 certs.d文件夹,然后在这个文件夹中创建 ps.geoscene.cd子文件。如果 HTTPS的端口不是默认的443,那么子文件夹名称后需要添加指定的端口号,例如:ps.geoscene.cd:444

 
   
   
 
  1. $ cp ps.geoscene.cd.cert /etc/docker/certs.d/ps.geoscene.cd:444/

  2. $ cp ps.geoscene.cd.key /etc/docker/certs.d/ps.geoscene.cd:444/

  3. $ cp ca.crt /etc/docker/certs.d/ps.geoscene.cd:444/

  1. 重启 docker服务: systemctl restart docker

6 验证Harbor是否可用

客户端系统是 Windows系统,请确保已经在系统上安装了 Docker

  1. 访问 Docker界面,点击设置按钮,点击"Docker Engine"

  2. 修改 insecure-registries对应的内容,增加 10.10.10.13:8081和 ps.geoscene.cd:8081

  3. 打开命令窗口,访问 Harbor, docker login ps.geoscene.cd,根据提示输入用户名和密码

  4. 从本地推送镜像至 Harbor

 
   
   
 
  1. $ docker tag SOURCE_IMAGE[:TAG] ps.geoscene.cd:8081/test/REPOSITORY[:TAG]

  2. $ docker push ps.geoscene.cd:8081/test/REPOSITORY[:TAG]

  1. 从 Harbor拉取镜像到本地: docker pull ps.geoscene.cd:8081/test/REPOSITORY[:TAG]

7 Harbor其他操作

  • 重启 harbor所有容器: docker-compose up-d

  • 删除 harbor所有容器: docker-compose down-v

8 安装过程中遇到的问题

  1. harbor的 redis容器不能正常启动

通过 docker logs redis查看容器的日志,最后两行提示如下内容:

 
   
   
 
  1. 1:M 05 Mar 06:09:19.140 # Can't handle RDB format version 9

  2. 1:M 05 Mar 06:09:19.140 # Fatal error loading the DB: Invalid argument. Exiting.

解决方法:

  • 在宿主机中使用命令 find/-name*.rdb

  • 删除 /data/redis/dump.rdb文件

  • 重启 redis容器: docker restart redis