报错信息:
x509: certificate has expired or is not yet valid
环境准备
需要安装Docker、Docker-compose(编排工具)
Docker
Linux系统安装Docker
使用安装脚本安装
从get.docker.com下载安装脚本
curl -fsSL get.docker.com -o get-docker.sh
-o:在当前目录下生成一个get-docker.sh文件
执行安装脚本(脚本里面需要一些sudo的权限)
sh get-docker.sh
查看是否安装成功
docker version
启动docker server
systemctl start docker
启动docker server后即会看到Server也出现了
docker version
Docker-compose
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
是一个工具
可以批量管理多个容器
官方文档
官方安装文档
安装方式一:apk安装
apk add docker-compose
安装方式二:下载二进制文件安装
apline需要一下依赖包
apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev rust cargo make
运行以下命令下载当前稳定版本,不同版本的Compose请替换1.29.2
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
对二进制文件应用可执行权限
chmod +x /usr/local/bin/docker-compose
卸载docker-compose
rm /usr/local/bin/docker-compose
启动docker-compose(这里先不用启动)
docker-compose up -d
查看docker-compose状态
docker-compose ps
安装
三种安装方式:
在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
离线安装:安装包包含部署的相关镜像,因此安装包比较大
OVA安装程序:当用户具有vCenter环境时,使用此安装程序,在部署OVA后启动Harbor
在线安装
离线安装
这里用的版本有点老。
查看更多版本
wget https://storage.googleapis.com/harbor-releases/release-1.5.0/harbor-offline-installer-v1.5.1.tgz
tar zxvf harbor-offline-installer-v1.5.1.tgz
cd harbor
配置hostname = 10.193.2.5 # 默认80端口
配置ui_url_protocol = http
配置harbor_admin_password = 123456
vi harbor.cfg
预生成配置文件
./prepare
安装
./install.sh
更改端口
不需要则不用改,这里我们改为8001端口。
因为默认是使用http访问,所以我们要修改80端口。
如果后面配置了证书使用https,就需要修改443端口了。
cd harbor
更改端口
vi harbor.cfg
配置hostname = 10.193.2.5:8001 # 默认80端口
找到proxy下的ports
vi docker-compose.yml
docker-compose.yml文件:
启动
如果已经启动,我们改了端口,则还可以使用此命令启动。
启动docker-compose
docker-compose up -d
Tips:
报错:ERROR:
Can’t find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml
可以跳转到harbor中进行执行就不会报错了。
查看状态
查看docker-compose状态
docker-compose ps
使用
直接在浏览器中访问配置hostname的地址
用户是admin
初始密码默认为Harbor12345
推送镜像
push镜像步骤:login–>tag–>push
docker 登录
docker login 10.193.2.5:8001
本地镜像打tag(
docker tag mysql:5.7 10.193.2.5:8001/library/mysql:5.7
将镜像push到harbor中
docker push 10.193.2.5:8001/library/mysql:5.7
删除
移除Harbor服务容器
docker-compose down -v
1
2
配置harbor的https访问证书
生成CA证书
随便搞个什么文件夹,用于存放生成的证书。
mkdir /opt/myCerts
cd /opt/myCerts/
- 生成自签名
安全模式,即使用 https 签名方式访问,这样更加安全。 签名分 CA 机构购买或免费自签名 本文采用:生成自签名
自签名的域名,假定域名为:harbor.my
生成目录:mkdir -p ~/cert
3.1. 生成证书颁发机构证书
生成CA证书私钥
openssl genrsa -out ca.key 4096
生成CA证书,10年有效期,也可以设置更长时间,将 3650 改成 36500,即 100 年
注意 harbor.me 修改自已定义的域名
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/L=Shenzhen/O=ZRF/CN=harbor.my" \
-key ca.key \
-out ca.crt
3.2. 生成服务器证书
生成私钥
openssl genrsa -out harbor.my.key 4096
生成证书签名请求(CSR)
注意 harbor.me 修改自已定义的域名
openssl req -sha512 -new \
-subj "/C=CN/L=Shenzhen/O=ZRF/CN=harbor.my" \
-key harbor.my.key \
-out harbor.my.csr
生成x509 v3扩展文件
注意 harbor.me 修改自已定义的域名
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.my
EOF
使用 v3.ext 文件为您的 Harbor 主机生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.my.csr \
-out harbor.my.crt
全部证书列表,目录:~/cert
3.5. Docker 客户端使用证书
将 crt 转换为 cert ,以供客户端的 Docker 使用
cd ~/cert/
openssl x509 -inform PEM -in harbor.my.crt -out harbor.my.cert
将 cert 和 key 文件复制到 Docker 配置目录下的 certs.d
找到自己的 Docker 配置目录。
mkdir -p /etc/docker/certs.d/harbor.my/
cp harbor.my.cert /etc/docker/certs.d/harbor.my/
cp harbor.my.key /etc/docker/certs.d/harbor.my/
cp ca.crt /etc/docker/certs.d/harbor.my/
查看证书到期时间
openssl x509 -in harbor.my.crt -noout -text
到目前为止所有需要的证书文件就生成完毕了,下面需要一些配置。
[root@harbor-vm myCerts]# ll
总用量 28
-rw-r--r--. 1 root root 1789 3月 8 07:53 ca.crt
-rw-r--r--. 1 root root 3243 3月 8 07:50 ca.key
-rw-r--r--. 1 root root 17 3月 8 08:15 ca.srl
-rw-r--r--. 1 root root 1818 3月 8 08:15 server.crt
-rw-r--r--. 1 root root 1586 3月 8 07:55 server.csr
-rw-r--r--. 1 root root 3243 3月 8 07:54 server.key
-rw-r--r--. 1 root root 228 3月 8 08:14 v3.ext
[root@harbor-vm myCerts]#
配置和安装证书
配置harbor
cd harbor/
复制一份cfg配置文件,以防出错
cp harbor.cfg harbor.cfg.tmpl
修改harbor的配置文件,修改以下配置项
hostname = www.harbor.my:4431
ui_url_protocol = https
ssl_cert = /opt/myCerts/server.crt
ssl_cert_key = /opt/myCerts/server.key
Tips:官方文档让配置harbor.yml文件,但是我没有这个文件,具体原因不详,但是灵机一动发现修改harbor.cfg文件也可以实现。
重启以下harbor仓库
cd harbor/
导入配置
./prepare
移除Harbor服务容器,不会影响docker-compose.yml文件
docker-compose down -v
后台运行的harbor
docker-compose up -d
配置docker
不存在请mkdir创建,该目录为docker默认的固定存放证书的目录
cd /etc/docker/certs.d/
如果将默认nginx端口443映射到不同的端口,请创建文件夹时写上端口号
mkdir -p /etc/docker/certs.d/harbor.my:4431
cd /opt/myCerts
cp server.crt /etc/docker/certs.d/harbor.my:4431/server.crt
首次自签发证书为一年,过期了需要更新需谨记一下命令。
docker-compose down
cd /root/harbor
./prepare ## 过期替换证书要重新执行prepare 否则只重启替换证书不生效 客户端仍然报证书过期
docker-compose up -d
docker-comepose命令
$ docker-compose stop # 停止
$ docker-compose start # 启动(第一次需要使用 up -d)
$ docker-compose down # 停止并删除容器(慎用)
$ docker-compose up -d # 创建并启动
$ docker-compose restart proxy 重启nginx