docker系列文章

该文章详细介绍了如何搭建和使用Harbor,一个由VMware开发的开源Docker私有仓库。Harbor提供了丰富的功能,如多租户管理、内容签名、安全扫描等。文章涵盖了从安装Docker和DockerCompose,到配置和启动Harbor的全过程,并强调了客户端如何通过配置不安全注册表来上传和拉取镜像。此外,还提到了Harbor的自动启动设置和登录管理。
摘要由CSDN通过智能技术生成

docker系列文章

第一篇 docker私有仓库搭建



前言

无论是使用Docker-distribution去自建仓库,还是通过官方镜像跑容器的方式去自建仓库,我们可以发现其是非常的简陋的,还不如直接使用官方的Docker Hub去管理镜像来得方便,至少官方的Docker Hub能够通过web界面来管理镜像,还能在web界面执行搜索,还能基于Dockerfile利用Webhooks和Automated Builds实现自动构建镜像的功能,用户不需要在本地执行docker build,而是把所有build上下文的文件作为一个仓库推送到github上,让Docker Hub可以从github上去pull这些文件来完成自动构建。

但无论官方的Docker Hub有多强大,它毕竟是在国外,所以速度是最大的瓶颈,我们很多时候是不可能去考虑使用官方的仓库的,但是上面说的两种自建仓库方式又十分简陋,不便管理,所以后来就出现了一个被 CNCF 组织青睐的项目,其名为Harbor。

一、Harbor是什么?

Harbor是由VMWare在Docker Registry的基础之上进行了二次封装,加进去了很多额外程序,而且提供了一个非常漂亮的web界面。
Project Harbor 是一个开源的可信云原生注册表项目,用于存储、签名和扫描上下文。
Harbor 通过添加用户通常需要的功能(如安全性、身份和管理)来扩展开源 Docker 分发版。
Harbor 支持高级功能,例如用户管理、访问控制、活动监控和实例间复制。

二、Harbor的功能

Feathers:

多租户内容签名和验证
安全性和漏洞分析
审计日志记录
身份集成和角色访问控制
实例间的镜像复制s
可扩展的API和图形界面
国际化(目前为英文和中文)

三、Harbor部署

Harbor标准安装过程包括以下阶段:
确保您的目标主机满足安装先决条件 Harbor Installer Precondition
下载并安装Harbor Download the Harbor Installer
配置HTTPS访问端口 Configure HTTPS Access to Harbor
配置Harbor YML文件 Configure the Harbor YML File
配置启用内部TLS Configure Enabling Internal TLS
运行安装程序脚本 Run the Installer Script

如果安装失败,请参见 Harbor安装故障处理

四、准备工作

搭建私有仓库需要的软件:

软件版本说明
DockerVersion 17.06.0-ce+ 或更高有关安装说明,请参阅 Docker Engine documentation
Docker ComposeVersion 1.18.0 或更高有关安装说明,请参阅 Docker Compose documentation
Openssl最好是最新的用于为端口生成证书和密钥

4.1 安装Docker

# 1.首先配置yum仓库
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

# 2.设置镜像的仓库
wget  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

# 3.安装容器相关的。docker-ce(社区版)docker-ee(企业版)
yum install docker-ce 

# 4.启动docker服务并设置开机自启
systemctl start docker
systemctl enable docker

4.2安装Docker Compose

# 下载docker-compose,June 2023年不在支持compose v1版,下载位置和赵九思的不一样。
[root@node2 bin]# curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
[root@node2 ~]# cd /usr/local/bin/
[root@node2 bin]# ll
total 25188
-rw-r--r--. 1 root root 25792512 Aug 11 18:49 docker-compose

# 给docker-compose执行权限
[root@node2 ~]# chmod +x /usr/local/bin/docker-compose 
[root@node2 ~]# ll /usr/local/bin/
total 25188
-rwxr-xr-x. 1 root root 25792512 Aug 11 18:49 docker-compose
#检查是否安装成功
docker compose version
Docker Compose version v2.17.2

4.3 安装Openssl

# 安装openssl
[root@node2 ~]# yum -y install openssl
[root@node2 ~]# rpm -qa | grep openssl
openssl-1.1.1g-11.el8.x86_64
openssl-pkcs11-0.4.10-2.el8.x86_64
openssl-libs-1.1.1g-11.el8.x86_64
xmlsec1-openssl-1.2.25-4.el8.x86_64

五、Harbor快速安装

# 下载harbor安装包
[root@node2 ~]# wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz
[root@node2 ~]# ls
anaconda-ks.cfg  harbor-offline-installer-v2.4.3.tgz

# 解压到/usr/local/下
[root@node2 ~]# tar -xf harbor-offline-installer-v2.8.0.tgz -C /usr/local
[root@node2 ~]# cd /usr/local/harbor/
[root@node2 harbor]# ls
common.sh  harbor.v2.4.3.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

# 备份配置文件并进行配置
[root@node2 harbor]# cp harbor.yml.tmpl harbor.yml
[root@node2 harbor]# vim harbor.yml
......
hostname: 192.168.111.138		#修改为当前主机的IP或域名
......
# https related config
#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

# 执行安装脚本
[root@node2 harbor]# ./install.sh 
[Step 0]: checking if docker is installed ...
Note: docker version: 20.10.17
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 2.7.0
[Step 2]: loading Harbor images ...
✔ ----Harbor has been installed and started successfully.----
[root@node2 harbor]# ss -anlt
State       Recv-Q      Send-Q           Local Address:Port            Peer Address:Port      Process      
LISTEN      0           128                    0.0.0.0:22                   0.0.0.0:*                      
LISTEN      0           128                  127.0.0.1:1514                 0.0.0.0:*                      
LISTEN      0           128                    0.0.0.0:80                   0.0.0.0:*                      
LISTEN      0           128                       [::]:22                      [::]:*                      
LISTEN      0           128                       [::]:80                      [::]:*    
[root@node2 harbor]# docker ps -a
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS                   PORTS                                   NAMES
828ec6d101a8   goharbor/nginx-photon:v2.4.3         "nginx -g 'daemon of…"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
......

# 使用docker-compose管理(需要进到harbor目录中)
[root@node2 harbor]# docker-compose stop
[+] Running 9/9
 ⠿ Container harbor-jobservice  Stopped                                                               0.2s
 ⠿ Container registryctl        Stopped                                                              10.1s
 ⠿ Container nginx              Stopped                                                               0.3s
 ⠿ Container harbor-portal      Stopped                                                               0.2s
 ⠿ Container harbor-core        Stopped                                                               0.1s
 ⠿ Container redis              Stopped                                                               0.3s
 ⠿ Container harbor-db          Stopped                                                               0.2s
 ⠿ Container registry           Stopped                                                               0.1s
 ⠿ Container harbor-log         Stopped                                                              10.1s
[root@node2 harbor]# docker-compose start
[+] Running 9/9
 ⠿ Container harbor-log         Started                                                               0.5s
 ⠿ Container harbor-db          Started                                                               1.4s
 ⠿ Container redis              Started                                                               1.2s
 ⠿ Container registryctl        Started                                                               1.3s
 ⠿ Container registry           Started                                                               1.4s
 ⠿ Container harbor-portal      Started                                                               0.9s
 ⠿ Container harbor-core        Started                                                               0.5s
 ⠿ Container harbor-jobservice  Started                                                               0.9s
 ⠿ Container nginx              Started                                                               0.8s
[root@node2 harbor]# ss -anlt
State       Recv-Q      Send-Q           Local Address:Port            Peer Address:Port      Process      
LISTEN      0           128                    0.0.0.0:22                   0.0.0.0:*                      
LISTEN      0           128                  127.0.0.1:1514                 0.0.0.0:*                      
LISTEN      0           128                    0.0.0.0:80                   0.0.0.0:*                      
LISTEN      0           128                       [::]:22                      [::]:*                      
LISTEN      0           128                       [::]:80                      [::]:*    

# 需要写一个开启自动启动的脚本,否则重启不会启动
[root@node2 harbor]# vim startall.sh
#!/bin/bash
  
cd /usr/local/harbor
docker-compose stop && docker-compose start

# 给脚本执行权限
[root@node2 harbor]# chmod +x startall.sh 
[root@node2 harbor]# ll startall.sh 
-rwxr-xr-x. 1 root root 77 Aug 11 21:15 startall.sh

# /etc/rc.local是系统启动之后最后一个执行的文件
[root@node2 harbor]# ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Dec  2  2020 /etc/rc.local -> rc.d/rc.local
[root@node2 harbor]# ll /etc/rc.d/rc.local 
-rw-r--r--. 1 root root 513 Aug 11 21:13 /etc/rc.d/rc.local

# 被链接文件也需要有执行权限
[root@node2 harbor]# chmod +x /etc/rc.d/rc.local 
[root@node2 harbor]# ll /etc/rc.d/rc.local 
-rwxr-xr-x. 1 root root 513 Aug 11 21:13 /etc/rc.d/rc.local

# 在/etc/rc.d/rc.local里加上执行启动脚本的命令,就会开启开机自动启动
[root@node2 harbor]# vim /etc/rc.d/rc.local 
#!/bin/bash
/bin/bash /usr/local/harbor/startall.sh

# 重启测试
[root@node2 ~]# reboot
[root@node2 ~]# ss -anlt
State       Recv-Q      Send-Q           Local Address:Port            Peer Address:Port      Process      
LISTEN      0           128                    0.0.0.0:80                   0.0.0.0:*                      
LISTEN      0           128                    0.0.0.0:22                   0.0.0.0:*                      
LISTEN      0           128                  127.0.0.1:1514                 0.0.0.0:*                      
LISTEN      0           128                       [::]:80                      [::]:*                      
LISTEN      0           128                       [::]:22                      [::]:*                      
[root@node2 ~]# docker ps -a
CONTAINER ID   IMAGE                                COMMAND                  CREATED       STATUS                        PORTS                                   NAMES
828ec6d101a8   goharbor/nginx-photon:v2.4.3         "nginx -g 'daemon of…"   2 hours ago   Up About a minute (healthy)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx


六、使用IP登录管理Harbor

默认用户名:admin 默认密码:Harbor12345
在这里插入图片描述登录成功界面:
在这里插入图片描述

七、Harbor使用方法

系统管理—用户管理—创建用户
在这里插入图片描述输入用户信息
在这里插入图片描述
创建用户成功—并将其设置为管理员
在这里插入图片描述点击推送命令可以查看帮助
在这里插入图片描述

八、客户端上传镜像

# 客户端首先要登录到仓库
#第一次登入失败
[root@localhost docker]# docker login 192.168.2.186
Username: alaolv
Password: 
Error response from daemon: Get http://192.168.2.186/v2/: dial tcp 192.168.2.186:80: connect: connection refused
#原因连接Harbor采用http,而不是https,所以在客户端需要vim /etc/docker/daemon.json,设置insecure-registries指定的IP为harbor私有仓库的地址,这里主要是告知客户端要连接http而不是https。
#进入编辑daemon.json
[root@localhost docker]# vim /etc/docker/daemon.json
#修改成以下内容:
[root@localhost docker]# cat /etc/docker/daemon.json 
{
"insecure-registries": ["192.168.2.186"],

                        "registry-mirrors": ["http://f1361db2.m.daocloud.io"]
}
#重新登入Harbor就成功了
[root@localhost docker]# docker login 192.168.2.186
Username: admin
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

# 上传镜像
[root@node2 ~]# docker tag nginx:latest 192.168.2.186/library/nginx:v1
[root@node2 ~]# docker images
REPOSITORY                       TAG       IMAGE ID       CREATED        SIZE
......
192.168.111.138/library/runtim   v1        beae173ccac6   7 months ago   1.24MB
[root@localhost docker]# docker push 192.168.2.186/library/nginx:v1 
The push refers to repository [192.168.2.186/library/nginx]
9d907f11dc74: Pushed 
79974a1a12aa: Pushed 
f12d4345b7f3: Pushed 
935b5bd454e1: Pushed 
fb6d57d46ad5: Pushed 
ed7b0ef3bf5b: Pushed 
v1: digest: sha256:f2fee5c7194cbbfb9d2711fa5de094c797a42a51aa42b0c8ee8ca31547c872b1 size: 1570

九、客户端拉取镜像

#查看镜像文件
[root@localhost docker]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED      SIZE
goharbor/harbor-exporter        v2.8.0    2abc02438fcf   4 days ago   97.1MB
goharbor/redis-photon           v2.8.0    ef1f410f9255   4 days ago   127MB
goharbor/trivy-adapter-photon   v2.8.0    724824e3559a   4 days ago   454MB
goharbor/notary-server-photon   v2.8.0    d603449fe91f   4 days ago   113MB
goharbor/notary-signer-photon   v2.8.0    618fc02c41bf   4 days ago   110MB
goharbor/harbor-registryctl     v2.8.0    165749c6eedc   4 days ago   141MB
goharbor/registry-photon        v2.8.0    8bfd12c2163d   4 days ago   78.5MB
goharbor/nginx-photon           v2.8.0    cfc2401896e1   4 days ago   126MB
goharbor/harbor-log             v2.8.0    f31ccc3d46f0   4 days ago   134MB
goharbor/harbor-jobservice      v2.8.0    1b00a3a474e1   4 days ago   140MB
goharbor/harbor-core            v2.8.0    15f4066c1707   4 days ago   164MB
goharbor/harbor-portal          v2.8.0    ae18a071cdce   4 days ago   133MB
goharbor/harbor-db              v2.8.0    f3d4373617a2   4 days ago   179MB
goharbor/prepare                v2.8.0    daa44ccf3b06   4 days ago   170MB
192.168.2.186/library/nginx     v1        6efc10a0510f   5 days ago   142MB
nginx                           latest    6efc10a0510f   5 days ago   142MB
# 删除原来的镜像
[root@localhost docker]# docker rmi 192.168.2.186/library/nginx:v1
Untagged: 192.168.2.186/library/nginx:v1
Untagged: 192.168.2.186/library/nginx@sha256:f2fee5c7194cbbfb9d2711fa5de094c797a42a51aa42b0c8ee8ca31547c872b1
# 拉取仓库里的镜像
[root@localhost docker]# docker pull 192.168.2.186/library/nginx:v1
v1: Pulling from library/nginx
Digest: sha256:f2fee5c7194cbbfb9d2711fa5de094c797a42a51aa42b0c8ee8ca31547c872b1
Status: Downloaded newer image for 192.168.2.186/library/nginx:v1
192.168.2.186/library/nginx:v1
[root@localhost docker]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED      SIZE
----
192.168.2.186/library/nginx     v1        6efc10a0510f   5 days ago   142MB
nginx                           latest    6efc10a0510f   5 days ago   142MB
.....

十、总结

在客户端上传镜像时一定要记得执行docker login进行用户认证,否则无法直接push
在客户端使用的时候如果不是用的https则必须要在客户端的/etc/docker/daemon.json配置文件中配置insecure-registries参数
数据存放路径应在配置文件中配置到一个容量比较充足的共享存储中
Harbor是使用docker-compose命令来管理的,如果需要停止Harbor也应用docker-compose stop来停止,其他参数请–help

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值