ubuntu22部署Docker私有仓库Harbor (http & https方式)

harbor日志:/var/log/harbor

前置安装配置

需先安装docker和docker-compose

0.配置清华大学apt源并安装docker

#信任 Docker 的 GPG 公钥:

sudo apt-get install ca-certificates curl gnupg

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

#添加软件仓库 清华apt源:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

#最后安装

sudo apt-get update

sudo apt-get install docker-ce

若install时报错: Hash Sum mismatch  

参照docker官方教程,重新设置apt源即可。https://docs.docker.com/engine/install/ubuntu

systemctl start docker

systemctl enable docker

配置阿里云镜像加速(不再赘述,按阿里云上的步骤操作即可)

配置docker数据存储目录 vim /etc/docker/daemon.json

 "data-root": "/data/docker"

0.安装docker-compose

curl -SL https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

  1. 下载

cd /use/local

​
wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz

tar xzvf harbor-offline-installer-v2.8.2.tgz 

方式一:http方式部署

2.调整yml配置文件

mv harbor.yml.bak harbor.yml

修改hostname为10.1.1.115

http.port 9999

harbor_admin_password: 123456

因为是内网,无需https,注释掉https配置即可

3.执行安装

sudo ./install.sh 

访问web界面:http://10.1.1.115:9999/  

admin

123456

 方式二:https方式部署(推荐)

#注意,全部使用hosts方式用ip来映射域名

1、修改host(10.1.1.115为harbor本机的ip   xinchen.harbor为想要配置的域名)

echo "10.1.1.115  xinchen.harbor" >> /etc/hosts

2、切换到harbor的路径,方便后续操作。

cd /usr/local/harbor

3、生成CA私钥

openssl genrsa -out ca.key 4096

4、继续生成生成CA证书(域名改成自己上面改的)

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

生成服务器证书:通常包含一个.crt文件和一个.key文件,例如xinchen.harbor.crt和xinchen.harbor.key。

5、生成一个服务器私钥(域名改成自己上面改的)

openssl genrsa -out xinchen.harbor.key 4096

6、继续生成证书签名请求(CSR)(域名改成自己上面改的)

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

7、生成X509 v3的扩展文件(域名改成自己上面改的)

无论您使用FQDN完全限定域名还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为您的Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。替换DNS条目以反映您的域。

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


[alt_names]  
DNS.1=xinchen.harbor
DNS.2=xinchen.harbor
DNS.3=hostname
EOF

# [alt_names]可以填写您自定义的域名

ps: 如果使用ip,需要使用如下方式进行创建:

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

8、使用该v3.ext文件为您的Harbor主机生成证书(域名改成自己上面改的)

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

8、创建 /data/cert目录为了给harbor.yml使用

mkdir -p /data/cert

9、执行复制命令,将证书复制到/data/cert下(域名改成自己上面改的)

cp xinchen.harbor.crt /data/cert/

cp xinchen.harbor.key /data/cert/

10、转换xinchen.harbor.crt为xinchen.harbor.cert,供Docker使用(域名改成自己上面改的)

Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。

openssl x509 -inform PEM -in xinchen.harbor.crt -out xinchen.harbor.cert

11、在docker所在机器创建对应目录(域名改成自己上面改的)

mkdir -p /etc/docker/certs.d/xinchen.harbor/

12、复制证书到目录下 目录名为域名:端口(默认443端口 可以不加端口  docker login xinchen.harbor对应目录/etc/docker/certs.d/xinchen.harbor      |     docker login xinchen.harbor:1443 对应目录/etc/docker/certs.d/xinchen.harbor:1443  )

cp xinchen.harbor.cert /etc/docker/certs.d/xinchen.harbor/

cp xinchen.harbor.key /etc/docker/certs.d/xinchen.harbor/

cp ca.crt /etc/docker/certs.d/xinchen.harbor/

13、配置harbor.yml(按照如下修改,改成你自己的证书)

hostname: xinchen.harbor

harbor_admin_password: 123456

https:

  # https port for harbor, default is 443

  port: 443

  # The path of cert and key files for nginx

  certificate: /data/cert/xinchen.harbor.crt

  private_key: /data/cert/xinchen.harbor.key

14、重启docker

systemctl restart docker

15、进入harbor目录下,重新预部署

./prepare

16、关闭harbor

docker-compose down -v

17、重启harbor

docker-compose up -d  //默认基于docker-compose.yml文件 -f可指定文件

##注意:harbor端口最好不要改会出各种问题

https://10.1.1.115 访问web管理后台,通过http会自动转到https

docker登陆harbor

1.修改hosts 映射

echo "10.1.1.115  xinchen.harbor" >> /etc/hosts

2.从harbor服务器scp拷贝证书过来

scp -r /etc/docker/certs.d/ 10.3.1.49:/etc/docker

或者直接 修改/etc/docker/daemon.json 配置Docker信任并连接到你指定的不安全Registry 也行

"insecure-registries": ["xinchen.harbor[:端口]"]

3.docker login登录即可:

docker login xinchen.harbor  

注意事项:

docker login默认是采用https方式的,docker login 默认走https://xxxx:443

注释掉https后docker login才使用http的方式进行校验

hostname: xinchen.harbor 必须设成域名,因为默认生成的证书只支持域名,不支持ip,如果需要支持ip,需要修改v3.ext文件,否则报错: validate certificate for 10.1.1.115 because it doesn't contain any IP SANs。

若报错:Error response from daemon: Get "https://xinchen.harbor/v2/": x509: certificate signed by unknown authority

需要拷贝证书到本机/etc/docker目录下,如上所示。

创建项目并推送镜像到harbor中

创建一个项目: ecmaster 非公开( 当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像)

在项目-成员中添加上创建的用户

推送镜像

上传镜像至harbor私有仓库:

docker tag b5bd271f2aa7 10.1.1.115:9999/ecmaster/node_v16:ecmaster

docker push 10.1.1.115:9999/ecmaster/node_v16:ecmaster

直接docker login 10.1.1.115会报错:Error response from daemon: Get "https://10.1.1.115:9999/v2/": http: server gave HTTP response to HTTPS client

解决一: 本地配置docker以允许http方式进行push镜像(有俩种方式)

1、修改/etc/docker/daemon.json 配置Docker信任并连接到你指定的不安全Registry

"insecure-registries": ["harbor服务器的ip或域名[:端口]"]

2、修改/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry harbor服务器的ip:端口或域名

ps:使用域名的话 还需编辑hosts文件:vi /etc/hosts 添加ip 域名映射关系

systemctl daemon-reload

systemctl restart docker

解决方案二:配置harbor以https方式进行部署

修改harbor.yml增加https配置

 ## https related config

https:

  ## https port for harbor, default is 443

  port: 443

  ## The path of cert and key files for nginx

  certificate: /data/cert/xinchen.harbor.crt

  private_key: /data/cert/xinchen.harbor.key

#.pem和.key 是根据域名购买ssl证书,也可以通过openssl自己生成。

执行/usr/local/harbor/install.sh,使harbor.yml的修改生效,并完成服务的启动,

bash /usr/local/harbor/install.sh

systemctl daemon-reload

systemctl restart docker

清除harbor重新install

删除Harbor的容器,但会保留文件系统中的所有registry数据和Harbor的数据库文件:

sudo docker-compose down -v  //默认基于docker-compose.yml文件 -f可指定文件

在执行干净的重新安装之前删除 Harbor 数据库和registry数据:

rm -r /data/database

rm -r /data/registry

相关报错及解决:

harbor  admin用户登录密码一直错误:

docker exec -it (harbor-core容器) bash ,进入到容器内,然后,

printenv | grep PASSWORD查看一下设置进去的环境变量:

可以看到初始化的密码,若初始化密码正确还是进不去,清除harbor重新install(harbor.yml中注释掉https配置项试试)

1.推送镜像时报:harbor unknown: http status code: 404, body: {"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"]}

2.拉取镜像报错:mainifest not found

解决:1.执行harbor gc进行垃圾回收,亲测可解决http status code: 404,"manifest unknown"问题

不行再尝试:2.清除harbor后重新install

&lt;think&gt;好的,我现在需要帮用户解决如何搭建Docker私有仓库Harbor的问题。用户提到想要了解Harbor的概述、部署方法及使用方式,所以我的回答需要涵盖这些方面。首先,我得确保自己理解Harbor的基本概念,它是一个企业级的私有镜像仓库,基于Docker Registry,提供了安全、权限管理、镜像复制等功能。接下来是部署步骤,需要详细说明环境准备、安装依赖、下载和解压Harbor、配置harbor.yml、执行安装脚本等过程。然后,使用方式部分应该包括登录Harbor、推送和拉取镜像、管理用户和权限,以及镜像复制功能。同时,用户提供的引用中有提到Harbor的配置指南和安装步骤,需要正确引用这些资料。另外,用户可能还需要常见问题的解决方法,比如端口占用、证书问题、权限不足等。最后,按照用户的要求生成相关问题,确保覆盖扩展知识点。整个过程要结构清晰,步骤明确,使用正确的LaTeX格式,并添加引用标识。需要检查语法和格式是否正确,避免错误。现在开始组织内容,分步骤详细说明,确保用户能顺利搭建和使用Harbor&lt;/think&gt;### Docker私有仓库Harbor搭建教程 #### 一、Harbor概述 Harbor是由VMware开源的**企业级私有镜像仓库**,支持镜像存储、权限管理、漏洞扫描、镜像复制等功能。其核心基于Docker Registry,通过Web界面简化了镜像管理流程,适用于企业级容器化部署场景[^1]。 #### 二、环境准备 1. **系统要求** - 操作系统:Ubuntu/CentOS 7+ - 硬件配置:至少2核CPU、4GB内存、40GB磁盘 - 软件依赖:Docker 17.06+、Docker Compose 1.18.0+ 2. **安装依赖** ```bash # 安装Docker curl -fsSL https://get.docker.com | bash -s docker # 安装Docker Compose sudo curl -L &quot;https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### 三、Harbor部署步骤 1. **下载Harbor安装包** ```bash wget -c https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz tar xvf harbor-offline-installer-v2.3.5.tgz cd harbor ``` 2. **配置`harbor.yml`** ```yaml hostname: harbor.yourdomain.com # 域名或IP http: port: 80 https: port: 443 certificate: /data/cert/server.crt private_key: /data/cert/server.key database: password: Harbor12345 # 数据库密码 data_volume: /data # 存储路径 ``` 3. **执行安装脚本** ```bash sudo ./install.sh # 安装完成后自动启动服务 ``` #### 四、Harbor使用方式 1. **登录私有仓库** ```bash docker login harbor.yourdomain.com -u admin -p Harbor12345 ``` 2. **推送镜像示例** ```bash docker tag nginx:latest harbor.yourdomain.com/library/nginx:latest docker push harbor.yourdomain.com/library/nginx:latest ``` 3. **镜像管理功能** - **权限控制**:通过项目(Project)隔离不同团队的镜像访问 - **漏洞扫描**:集成Trivy进行镜像安全检测 - **复制策略**:支持跨多个Harbor实例同步镜像[^3] #### 五、常见问题解决 | 问题类型 | 解决方法 | |-----------------|--------------------------------------------------------------------------| | 端口冲突 | 修改`harbor.yml`中的`http.port`或`https.port`并重启服务 | | 证书错误 | 生成自签名证书:`openssl req -x509 -nodes -days 365 -newkey rsa:2048...`| | 权限不足 | 在`项目`&rarr;`成员`中添加用户并分配角色(访客/开发者/管理员) | #### 六、进阶配置 - **高可用部署**:通过PostgreSQL主从复制和Redis集群实现数据库高可用 - **LDAP集成**:在`harbor.yml`中配置`ldap_url`和`ldap_base_dn`以对接企业账号体系 - **存储后端**:支持对接AWS S3、Azure Blob等云存储服务 [^1]: 运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南 : 搭建harbor私有镜像仓库步骤示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李庆政370

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值