侧边栏壁纸
博主头像
AI研究僧

hycj89@163.com

  • 累计撰写 1,899 篇文章
  • 累计创建 179 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

在centos7上使用harbor构建docker私有仓库

AI研究僧
2022-03-09 / 0 评论 / 0 点赞 / 460 阅读 / 1,752 字

环境说明

  • 服务器两台:

    ​ 192.168.230.103(安装harbor)

    ​ 192.168.230.101(测试harbor)

  • 操作系统:centos7.7

  • docker版本:2021.3.10最新版 20.10.12

  • docker-compose版本:2.3.1

  • harbor版本:2.4.1

docker安装(101、103均安装)

清理存在的docker软件

sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine

安装docker依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

下载docker安装所需的repo文件

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装docker

yum install -y docker-ce docker-ce-cli containerd.io

启动docker

systemctl start docker

设置开机自启动

systemctl enable docker

查看是否启动成功

docker version
image-1651051343842

103 上docker添加配置文件

vim /etc/docker/daemon.json 添加如下内容

{
	"insecure-registries":["192.168.230.103"]
}

注:即使启用https后,103仍然需要配置该项内容,否则在用 docker login命令登录时会出错Error response from daemon: Get "https://harbor103.com/v2/": unauthorized: authentication required

103docker执行以下命令

systemctl daemon-reload
systemctl restart docker

docker-compose安装(103)

到github搜docker-compose,下载最新版本即可

授权并改名

chmod +x docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

查看是否生效

docker-compose version

image-1651051381195

harbor安装(103)

必要条件

image-1651051414167
image-1651051435973

docker及docker-compose已经安装

安装openssl:yum install openssl -y

image-1651051469389

修改101、103上hosts文件

echo "192.168.230.103 harbor103.com" >> /etc/hosts

注:一定要带上.com,不要使用 harbor103 这样类似hostname的配置,否则使用docker push命令时会出现向docker.io推送镜像的情况导致出现,如下所示:

[root@localhost anchors]# docker push harbor103/test-public/alpine-amd64
Using default tag: latest
The push refers to repository [docker.io/harbor103/test-public/alpine-amd64]
8d3ac3489996: Preparing 
denied: requested access to the resource is denied

后续会大量使用 harbor103.com这个域名

配置https访问harbor(103上操作)

创建存放证书的目录

mkdir -p /data/cert
cd /data/cert

生成证书颁发机构证书

1、生成 CA 证书私钥
openssl genrsa -out ca.key 4096

2、生成 CA 证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor103.com" \
 -key ca.key \
 -out ca.crt

注:CN改为自己设置的域名

生成服务器证书

1、生成私钥
openssl genrsa -out harbor103.com.key 4096
2、生成证书签名请求 (CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor103.com" \
    -key harbor103.com.key \
    -out harbor103.com.csr

3、生成 x509 v3 扩展文件

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=harbor103.com
DNS.2=harbor103
DNS.3=harbor
EOF

注:DNS.1是域名,DNS.2是去掉com,DNS.3是hostname,本次搭建103的hostname是harbor,该内容来自官网介绍

4、使用 v3.ext 文件为您的 Harbor 主机生成证书

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in harbor103.com.csr \
    -out harbor103.com.crt

5、将 harbor103.com.crt 转换为 harbor103.com.cert,供 Docker 使用

openssl x509 -inform PEM -in harbor103.com.crt -out harbor103.com.cert

6、将服务器证书、密钥和 CA 文件复制到 Harbor 主机(103)上的 Docker 证书文件夹中

mkdir -p /etc/docker/certs.d/harbor103.com/
cd /data/cert
cp harbor103.com.cert /etc/docker/certs.d/harbor103.com/
cp harbor103.com.key /etc/docker/certs.d/harbor103.com/
cp ca.crt /etc/docker/certs.d/harbor103.com/

注:/etc/docker/certs.d/harbor103.com 该目录与域名保持一致,不要随意命名

7、在操作系统级别信任证书

cp harbor103.com.crt /etc/pki/ca-trust/source/anchors/harbor103.com.crt
update-ca-trust

8、重启docker

systemctl restart docker

安装harbor

1、下载harbor

https://github.com/goharbor/harbor/releases 找到对应版本,下载离线安装版

如:harbor-offline-installer-v2.4.1.tgz

2解压

tar -zxvf harbor-offline-installer-v2.4.1.tgz -C /opt

3修改配置

cd /opt/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

image-1651051527873
image-1651051543042

注:data_volume最好使用独立的目录只保存harbor的数据

4 安装

./install.sh

image-1651051565331

image-1651051579446

安装成功后可以通过浏览器访问harbor ui

image-1651051625592

至此,harbor安装完成

转换http和https后的操作

如果原本配置的http访问,改为https后的操作,如果是新装的,则无需操作

当修改harbor.yml文件中http和https相关参数后,执行以下命令重启(在/opt/harbor目录内执行)

./prepare  # 根据 harbor.yml 配置生成docker-compose文件
docker-compose down -v  # 停止容器并移除存在的容器 
docker-compose up -d  # 启动docker容器

数据在配置文件中 data_volume 配置的有宿主机的挂载,因此数据不会丢失

但也造成另一个问题,如果修改admin密码,要通过web页面操作,修改配置文件没办法生效,除非删掉数据重新安装

其他命令

cd /opt/habor
docker-compose stop  # 暂停harbor
docker-compose start  # 启动harbor

# 彻底删除harbor
docker-compose down -v
# 删掉harbor相关镜像,慎重
docker images|grep goharbor|awk '{print $3}'|xargs docker rmi
# 删掉harbor中的数据和镜像,在data_volume配置的目录中删掉所有和harbor相关的目录即可

harbor创建项目

image-1651051661158

后续将从docker客户端(101)向harbor推送镜像

操作前需要先将证书发送给客户端(从103发送到101)

scp /data/cert/ca.crt root@192.168.230.101:/etc/pki/ca-trust/source/anchors/

推送镜像至harbor(101操作)

# 查看证书是否存在
ls /etc/pki/ca-trust/source/anchors/  # 看到传过来的ca.crt即可
#更新证书
update-ca-trust extract
#重启docker
systemctl restart docker
#登录
docker login harbor103.com

image-1651051709440

101上的docker无需配置 /etc/docker/daemon.json 中的 insecure-registries参数 ,因为103已经配置https访问,而docker客户端与仓库的交互默认就是https.

登录之后就可以与仓库交互了

测试推送镜像到harbor私有仓库

# 拉取dockerhub的镜像
docker pull alpine
# 打标签
docker tag alpine harbor103.com/test-public/alpine-amd64  # 为后续测试多架构版本做准备,因此设定为amd64,当前cpu是x86架构
# 推送
docker push harbor103.com/test-public/alpine-amd64

image-1651051735458

image-1651051758724

可以看到已经推送成功

image-1651051779548

# 拉取arm64架构镜像
docker pull --platform arm64 alpine
docker tag alpine的镜像id harbor103.com/test-public/alpine-arm64  # 拉取两个alpine,会造成之前的x86架构的tag变为none,避免歧义这里用镜像id
docker push harbor103.com/test-public/alpine-arm64

# 构建多版本 manifest list
docker manifest create harbor103.com/test-public/alpine harbor103.com/test-public/alpine-arm64 harbor103.com/test-public/alpine-amd64
# 推送manifest list
docker manifest push harbor103.com/test-public/alpine --purge

推送完成后,在harbor ui上看到如下内容

image-1651051803791

之后通过命令docker pull harbor103.com/test-public/alpine拉取时会根据cpu架构不同拉取对应的镜像

关于harbor的更多使用请自行查找

参考链接

https://goharbor.io/docs/2.4.0/install-config/

https://goharbor.io/docs/2.4.0/install-config/configure-https/

https://blog.csdn.net/qq_39876923/article/details/117303719

https://www.cnblogs.com/operationhome/p/10868498.html

博主关闭了所有页面的评论