背景:随着工作的不断推进,镜像越来越多,部署的机器越来越多,每次部署都需要build一次镜像非常耗时,尤其是在树莓派上build带有pip3 install pandas的镜像,往往耗时一个小时(虽然apt install python3-pandas快,但目前版本仅支持到0.25.3,1.0.0+的新接口并不支持,如pandas.json_normalize),因而就萌生了将镜像上传至镜像仓库中,而镜像仓库分为公共仓库和私有仓库,受限于隐私性,只能考虑私有仓库,目前的仓库部署方式:
服务器主机:
>>> docker pull registry:2
>>> docker run -d -p 5000:5000 --restart always --name registry registry:2
客户主机:
# 为了使http可用,需添加信任ip
>>> sudo vim /etc/docker/daemon.json
{ "insecure-registries":["服务器主机ip:5000"] }
>>> service docker restart
>>> docker tag ubuntu:latest 服务器主机ip/test/ubuntu:20.04
>>> docker push 服务器主机ip/test/ubuntu:20.04
可以看到,非常简单,但是也非常简陋,存在问题:
为了解决上述问题,引入Harbor,一个由VMware公司开源的容器镜像管理工具,貌似是中国团队开发的,因而原生支持中文,废话不多说,安装部署使用方式如下:
安装环境:
安装过程参考:https://juejin.im/post/5d9c2f25f265da5bbb1e3de5
有部分修改
# 安装最新版docker
参考:https://docs.docker.com/engine/install/centos/
# 修改docker配置
>>> sed -i '/ExecStart=\/usr\/bin\/dockerd/i\ExecStartPost=\/sbin/iptables -I FORWARD -s 0.0.0.0\/0 -d 0.0.0.0\/0 -j ACCEPT' /usr/lib/systemd/system/docker.service
>>> sed -i '/dockerd/s/$/ \-\-storage\-driver\=overlay2 --insecure-registry 服务器ip/g' /usr/lib/systemd/system/docker.service
# 时间同步
>>> yum -y install ntp
>>> systemctl enable ntpd
>>> systemctl start ntpd
>>> ntpdate -u cn.pool.ntp.org
>>> hwclock --systohc
>>> timedatectl set-timezone Asia/Shanghai
# 关闭swap分区
>>> vim /etc/fstab
#注释掉SWAP分区项
#/dev/mapper/centos00-swap swap swap defaults 0 0
# 关闭防火墙
>>> systemctl stop firewalld
>>> systemctl disable firewalld
>>> setenforce 0
>>> sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
# 升级内核
>>> rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
>>> rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
>>> yum --enablerepo=elrepo-kernel install kernel-ml -y&&
>>> sed -i s/saved/0/g /etc/default/grub&&
>>> grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
# 安装docker-compose
>>> curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
>>> chmod +x /usr/local/bin/docker-compose
>>> docker-compose --version
docker-compose version 1.26.0, build d4451659
# 安装
# 下载在线安装包
>>> wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v2.0.0.tgz
>>> tar xf harbor-online-installer-v2.0.0.tgz
>>> cd harbor
# 编辑配置文件
>>> vim harbor.yml.tmpl
# 修改hostname
hostname: 服务器ip
# 将https注释掉,以关闭https支持
# https related config
#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
# 默认的管理员账号密码也可以修改
# 安装
>>> mv harbor.yml.tmpl harbor.yml
>>> ./install.sh
......
Creating harbor-log ... done
Creating harbor-db ... done
Creating registryctl ... done
Creating harbor-portal ... done
Creating registry ... done
Creating redis ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----
>>> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d894c16c987f goharbor/harbor-jobservice:v2.0.0 "/harbor/entrypoint.…" 2 hours ago Up 2 hours (healthy) harbor-jobservice
a3378467ff00 goharbor/nginx-photon:v2.0.0 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->8080/tcp nginx
318b4ad0d0bb goharbor/harbor-core:v2.0.0 "/harbor/entrypoint.…" 2 hours ago Up 2 hours (healthy) harbor-core
9348e1566bd0 goharbor/redis-photon:v2.0.0 "redis-server /etc/r…" 2 hours ago Up 2 hours (healthy) 6379/tcp redis
cc69fe7876b9 goharbor/registry-photon:v2.0.0 "/home/harbor/entryp…" 2 hours ago Up 2 hours (healthy) 5000/tcp registry
dc213cb7c5e8 goharbor/harbor-portal:v2.0.0 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 8080/tcp harbor-portal
e69e2ee6d791 goharbor/harbor-registryctl:v2.0.0 "/home/harbor/start.…" 2 hours ago Up 2 hours (healthy) registryctl
8bfcbe9f3d1c goharbor/harbor-db:v2.0.0 "/docker-entrypoint.…" 2 hours ago Up 2 hours (healthy) 5432/tcp harbor-db
59e32a7ecb2a goharbor/harbor-log:v2.0.0 "/bin/sh -c /usr/loc…" 2 hours ago Up 2 hours (healthy) 127.0.0.1:1514->10514/tcp harbor-log
# 登录
>>> docker login 服务器ip
Username:
Password:
Authenticating with existing credentials...
Login Succeeded
# 登出
>>> docker logout 服务器ip
# 登出后再push
>>> docker push 10.8.15.49/test/python:1.0
The push refers to repository [10.8.15.49/test/python]
9867e295092a: Preparing
4a2b3a37baa3: Preparing
64f465a5c456: Preparing
912ca77102af: Preparing
5900cd753a41: Preparing
afae6f50abb9: Waiting
136a15f81f25: Waiting
185574602537: Waiting
24efcd549ab5: Waiting
unauthorized: unauthorized to access repository: test/python, action: push: unauthorized to access repository: test/python, action: push
>>> docker tag 镜像名:标签名 服务器ip/项目名/镜像名:标签名
>>> docker push 服务器ip/项目名/镜像名:标签名
在docker-compose.yml目录下执行
#docker-compose stop
Stopping harbor-jobservice ... done
Stopping nginx ... done
Stopping harbor-core ... done
Stopping redis ... done
Stopping registry ... done
Stopping harbor-portal ... done
Stopping registryctl ... done
Stopping harbor-db ... done
Stopping harbor-log ... done
#docker-compose start
Starting log ... done
Starting registry ... done
Starting registryctl ... done
Starting postgresql ... done
Starting portal ... done
Starting redis ... done
Starting core ... done
Starting jobservice ... done
Starting proxy ... done
# docker-compose down
# vim harbor.cfg
# ./prepare
# docker-compose up -d
# docker-compose down
# rm -r /data/database
# rm -r /data/registry
Configuring Harbor listening on a customized port.
By default, Harbor listens on port 80(HTTP) and 443(HTTPS, if configured) for both admin portal and docker commands, you can configure it with a customized one.
For HTTP protocol
# vim docker-compose.yml
proxy:
image: library/nginx:1.11.5
restart: always
volumes:
- ./config/nginx:/etc/nginx
ports:
- 8888:80
- 443:443
depends_on:
- mysql
- registry
- ui
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
# vim harbor.cfg
hostname = 10.90.5.105:8888
# docker-compose down
# ./prepare
# docker-compose up -d
参考:https://www.cnblogs.com/keithtt/p/7028986.html