CentOS7.6上使用docker harbor管理私有仓库

一、安装配置

操作系统:CentOS7.6+Docker。
使用docker Harbor来管理私有仓库。

(一)安装docker、docker-compose、harbor

安装docker(需要1.17.06版本以上)。

#添加源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#查看版本
yum list docker-ce --showduplicates | sort -r
#安装docker
yum install docker-ce -y

设置docker自动运行。

systemctl enable docker
systemctl start docker

配置docker

vim /usr/lib/systemd/system/docker.service

将文件中下面这行ExecStart=/usr/bin/dockerd -H fd://,在行末添加:-H tcp://0.0.0.0:2375 --graph /data/docker

systemctl stop docker.service
mv /var/lib/docker /data/
systemctl daemon-reload
systemctl start docker.service

一是开启在2375端口上的tcp监听,允许远程管理本地镜像和容器;二是更改本地镜像、容器的存放目录。

安装docker-compose。

【方法一】

yum install docker-compose

【方法二】
也可以从github上安装

curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

【方法三】

pip install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple

安装harbor

从官网下载harbor安装包。

wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz

解压后得到harbor目录。

tar -zxvf harbor-offline-installer-v1.10.1.tgz

修改harbor.yml,修改的内容:

  • hostname:改成主机IP。 注:如果这里用的是域名或主机名,转换后的IP地址一定要能访问得到,比如可以在/etc/hosts里面加上主机名的解析。
  • http.port:默认将占用80端口。 https:如果要启动https还需要配置ssl证书。
  • harbor_admin_password:harbor管理员密码。
  • database.password:数据库密码。
  • data_volume:数据存放目录,默认/data。

执行安装脚本。

./prepare
./install.sh

设置harbor自启动,创建/usr/lib/systemd/system/harbor.service,设置系统每次启动时调用,内容如下:

Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
 
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f {{ harbor_install_path }}/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f {{ harbor_install_path }}/harbor/docker-compose.yml down
 
[Install]
WantedBy=multi-user.target

设置自启动。

systemctl enable harbor
systemctl start harbor

(二)配置harbor的https访问

配置如下:

  • 生成ca密钥
    openssl genrsa -out ca.key 4096
  • 生成ca自签名证书
    openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=home.ca"
  • 生成私钥
    openssl genrsa -out server.key 4096
  • 生成数字签名
    openssl req -new -key server.key -subj "/CN=server.com" -out server.csr
  • 支持其他IP
    echo 'subjectAltName = IP:127.0.0.1,IP:192.168.x.x,IP:x.x.x.x' > extfile.cnf
  • 生成证书
    openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile extfile.cnf

(三)配置docker访问

配置镜像,修改/etc/docker/daemon.json为以下内容:

{
    "registry-mirrors": ["https://hub-mirror.c.163.com"],
    "insecure-registries":["http://192.168.1.100:8001"]
}

registry-mirrors:镜像地址,insecure-registries:非https访问的仓库地址。

二、使用

(一)说明

账号:一般可使用三个角色:管理员、开发人员、访客。管理员有全部权限,开发人员有pull、push权限,访客有pull权限。库:默认带library库,这个库一般用于放官方库。其他库可自建,一般可建立build库和test库,用于发布和流水线测试。

(二)向harbor中推送镜像

以mysql为例,向library库中推送。

#从docker hub上pull一个mysql的官方镜像
docker pull mysql:5.7.29
#登录harbor
docker login 127.0.0.1:8041
#打标
docker tag mysql:5.7.29 127.0.0.1:8041/library/mysql:5.7.29
#push到harbor中
docker push 127.0.0.1:8041/library/mysql

三、问题

(一)nat穿透时loginfail的问题

当harbor服务对外开发,做nat穿透时,会报以下的错。

# docker login https://117.89.X.X:443
Username: admin
Password: 
Error response from daemon: Get https://117.89.X.X:443/v2/: Get https://192.168.3.6:20443/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

原因是:客户端登录时,调用v2的login接口(示例中是https://117.89.X.X:443/v2/),因为配置harbor的主机名使用的是IP方式,服务端会返回harbor-registry的登录访问接口(示例中是https://192.168.3.6:20443/service/),这个时候返回的地址是内外地址,不是公网地址,所以无法访问。
这 个 问 题 , 目 前 还 未 解 决 \color{red}{这个问题,目前还未解决}

(二)No route to host问题

docker容器内服务报No route to host的问题,比如Jenkins使用git连接主机代码仓库时。可以把主机防火墙里面开放出来。

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload

引用:https://blog.csdn.net/xiunai78/article/details/84981281

引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值