Habor安装
准备:
centos7、4G、2核、Docker, Docker-compose
安装包: harbor-offline-installer-v2.3.4.tgz
安装包地址: https://github.com/goharbor/harbor/releases
当前测试机器IP: 192.168.0.208
目录: /app/habor
开始安装部署
生成证书 (可以不用生成, 注释掉harbor.yml https 部分即可)
mkdir -p /data/harbor_ssl/
#生成根证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
#生成服务器秘钥
openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.hub.com.key -out reg.hub.com.csr
#生成服务器证书
openssl x509 -req -days 365 -in reg.hub.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out reg.hub.com.crt
修改配置文件
vim harbor.yml
#需要修改的地方
#hostname: reg.hub.com
hostname: 192.168.0.205
http:
# port: 80 #建议使用80端口
port: 48080
#https:
# port: 443
# certificate: /data/harbor_ssl/reg.hub.com.crt
# private_key: /data/harbor_ssl/reg.hub.com.key
harbor_admin_password: Harbor12345
data_volume: /data
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
https:如果要启动https还需要配置ssl证书, 不需要则注释掉
执行安装脚本
./prepare
./install.sh
若报错:
ERROR:root:Error: The protocol is https but attribute ssl_cert is not set
Error happened in config validation...
原因是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: /your/certificate/path
# private_key: /your/private/key/path
若报错:
✖ Need to upgrade docker package to 17.06.0+. 需要升级docker
rpm -qa | grep docker #列出包含docker字段的软件的信息
# docker-1.13.1-161.git64e9980.el7_8.x86_64
# docker-common-1.13.1-161.git64e9980.el7_8.x86_64
# docker-client-1.13.1-161.git64e9980.el7_8.x86_64
yum remove docker-* #移除上面显示的软件包
使用curl 安装docker最新版本 , 再执行 ./install
curl -fsSL https://get.docker.com/ | sh
systemctl restart docker #重启docker
systemctl enable docker #设置开机启动
安装成功:
...
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating redis ... done
Creating harbor-db ... done
Creating harbor-portal ... done
Creating registry ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
访问地址: http://192.168.0.205:48080/account/sign-in?redirect_url=%2Fharbor%2Fprojects
配置harbor的https访问
注意:我们搭建的仓库是http访问的,docker CLI默认以HTTPS 访问仓库,所以要先配置可信任,否则pull镜像仓库失败。如果是HTTPS提供服务就不用配置
- 首先访问/etc
vim hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 reg.hub.com
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
2.配置https (打开注释掉的部分), 然后重启
./prepare
./install.sh
3.配置镜像,修改/etc/docker/daemon.json
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"insecure-registries": ["reg.hub.com","reg2.hub.com"]
}
registry-mirrors:镜像地址,insecure-registries:非https访问的仓库地址
4.测试 给镜像打tag并且push到harbor仓库
docker pull nginx:1.18
docker image tag nginx:1.18 reg.hub.com:48080/library/nginx:1.18
docker push reg.hub.com:48080/library/nginx:1.18
# 建议独立一台服务器 用80 或者443 端口, 即不用带端口号
若出现错误, 后发现push 功能不可用:
unauthorized: unauthorized to access repository: library/nginx, action: push: unauthorized to access repository: library/nginx, action: push
查找配置文件
[root@win21 ~]# find / -name config.json
。。。
/root/.docker/config.json
/var/lib/pcp/pmdas/json/config.json
发现/root/.docker/config.json 中设在为IP地址而在daemon.json 设的为主机名,更改为同样设置,再次尝试
[root@win21 .docker]# cat config.json
{
"auths": {
"reg.hub.com:48080": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
}
}
}
[root@win21 .docker]# cat /etc/docker/daemon.json
{
"insecure-registries":["reg.hub.com"]
}
从Harbor 仓库拉去镜像 (其他服务器设备)
在其他设备用docker login ... 登录Harbor 服务器时,报下面错误:
Error response from daemon: Get https: x509: certificate signed by unknown authority
默认时,client 与 Registry 的交互是通过 https 通信的。在 install Registry 时,若未配置任何tls 相关的 key 和 crt 文件,https 访问必然失败。使用 "–insecure-registry "可以指定 client 与 Registry 以 http 的方式进行通信。
- 修改 /lib/systemd/system/docker.service 文件里的 ExecStart= 行:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=192.168.0.205
- 重载、重启 docker 服务,验证配置是否生效
systemctl daemon-reload
systemctl restart docker
docker info
可以看到,注册地址了, 然后可以接登录
Insecure Registries:
192.168.0.205
127.0.0.0/8
3.拉取镜像:
docker pull 192.168.0.205/library/nginx:1.18
Habor的启停
cd /app/habor
docker-compose stop
docker-compose start
备注:执行docker-compose的时候,需要使用 -f /path-to-docker-compose/docker-compose.yml 参数指定docker-compose.yml文件的位置,或者切换到docker-compose.yml文件所在的目录下,再执行。
docker-compose的一些基本操作
#列出所有运行容器
docker-compose ps
#查看服务日志输出
docker-compose logs
#打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
docker-compose port eureka 8761
#构建或者重新构建服务
docker-compose build
#启动指定服务已存在的容器
docker-compose start eureka
#停止已运行的服务的容器
docker-compose stop eureka
#删除指定服务的容器
docker-compose rm eureka
#构建、启动容器
docker-compose up
#通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill eureka
#设置指定服务运行容器的个数,以 service=num 形式指定
docker-compose scale user=3 movie=3
#在一个服务上执行一个命令
docker-compose run web bash
开启Docker Remote API
在/usr/lib/systemd/system/docker.service,配置远程访问。
主要是在[Service]这个部分,加上下面两个参数 : -H tcp://0.0.0.0:2375
重启:
systemctl daemon-reload
systemctl restart docker