操作系统:CentOS7.6+Docker。
使用docker 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,修改的内容:
执行安装脚本。
./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
配置如下:
openssl genrsa -out ca.key 4096
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
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
配置镜像,修改/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库,用于发布和流水线测试。
以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
当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}{这个问题,目前还未解决} 这个问题,目前还未解决
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