openssl genrsa -out ca.key 4096
十一、使用Docker-compose
Docker使用Python 语言编写,用于定义和运行多容器Docker应用程序的工具。通过Compose可以使用yaml文件配置应用程序所需要的所有服务。然后使用一个命令,从yaml文件中创建并启动服务。
11.1 安装docker-compose
官网地址:https://github.com/docker/compose/releases
curl -L https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
测试并查看版本
docker-compose version
11.2 编辑prometheus 和grafana 的compose yaml 文件
查看代码compose yaml
version: '3.9'
services:
# 添加 普罗米修斯服务
prometheus:
# Docker Hub 镜像
image: bitnami/prometheus:latest
# 容器内部 hostname
hostname: prometheus
# 容器支持自启动
restart: always
# 容器与宿主机 端口映射
ports:
- '9090:9090'
- '9091:9091'
# 将宿主机中的config文件夹,挂载到容器中/config文件夹
volumes:
- './config/prometheus.yml:/etc/prometheus/prometheus.yml'
- './data:/prometheus/data' # 指定容器中的配置文件
command:
# 支持热更新
- '--web.enable-lifecycle'
- "--web.read-timeout=5m"
- "--storage.tsdb.retention=120d"
- "--web.max-connections=512"
- "--query.timeout=2m"
- "--query.max-concurrency=20"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
- "--config.file=/etc/prometheus/prometheus.yml"
grafana:
image: grafana/grafana:latest
# 容器支持自启动
restart: always
# 容器与宿主机 端口映射
ports:
- '3000:3000'
volumes:
- '/opt/grafana/grafana.ini:/etc/grafana/grafana.ini'
- '/opt/grafana/data:/var/lib/grafana'
environment:
- TZ=Asia/Shanghai
user:
# 默认密码: admin/admin
mkdir -p /opt/prometheus/{config,data}
mkdir -p /opt/grafana/data/
启动服务
docker-compose up -d
查看服务
docker-compose ps
停止
docker-compose down
验证:
十二、搭建harbor私有镜像仓库
DockerHub作为Docker默认官方公共镜像,官方也提供registry镜像
12.1 下载harbor离线包
https://github.com/goharbor/harbor/releases
12.2 将离线包上传到服务器,解压
tar zxvf harbor.v2.7.3.tar.gz /usr/local/
12.3 准备配置文件
查看代码 harbor.yml
cp harbor.yml.tmpl harbor.yml
# cat harbor.yml |egrep -v "#|^$"
hostname: harbor.zhan.com
http:
port: 8088
https:
port: 443
certificate: /usr/local/harbor/harbor.zhan.com.crt
private_key: /usr/local/harbor/harbor.zhan.com.key
harbor_admin_password: Harbor12345
database:
password: root123
max_idle_conns: 100
max_open_conns: 900
conn_max_lifetime: 5m
conn_max_idle_time: 0
data_volume: /data
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: false
security_check: vuln
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.7.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
upload_purging:
enabled: true
age: 168h
interval: 24h
dryrun: false
cache:
enabled: false
expire_hours: 24
12.4 准备CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.zhan.com" \
-key ca.key \
-out ca.crt
openssl genrsa -out harbor.zhan.com.key 4096
成证书签名请求(CSR):
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.zhan.com" \
-key harbor.zhan.com.key \
-out harbor.zhan.com.csr
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.zhan.com
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.zhan.com.csr \
-out harbor.zhan.com.crt
openssl x509 -inform PEM -in harbor.zhan.com.crt -out harbor.zhan.com.cert
mkdir -p /etc/docker/certs.d/harbor.zhan.com/ && cp hharbor.zhan.com.cert harbor.zhan.com.key ca.crt harbor.zhan.com.crt /etc/docker/certs.d/harbor.zhan.com/
注意:
12.5 安装
sh install.sh
验证:
配置hosts
# cat /etc/hosts
192.168.1.230 master-1-230
192.168.1.231 node-1-231
192.168.1.232 node-1-232
192.168.1.233 node-1-233
192.168.1.234 node-1-234
192.168.1.234 harbor.zhan.com srmharbor.fastgroup.cn
服务器登录harbor
# docker login -u admin -p Harbor12345 harbor.zhan.com
win 配置hosts访问:https://harbor.zhan.com/
十三、将镜像推送到私有仓库harbor
13.1启动tomcat_test 容器
docker run -itd --name=tomcat_test -p 8080:8080 tomcat
验证容器服务
修改tomcat 静态文件
docker exec -it tomcat_test bash
cd webapps
mkdir ROOT
echo "hello tomcat,harbor..." >ROOT/index.html
curl http://127.0.0.1:8080
13.2 镜像打标签、并将镜像推送到harhor仓库
docker commit -a "zhan" -m "update index.html" 0bddaae96007 harbor.zhan.com/zhan/tomcat:v1
docker push harbor.zhan.com/zhan/tomcat:v1
13.3登录harbor镜像仓库验证
思考:
● 如何配置非安全仓库?为什么要配置非安全?
在docker的配置文件中,有一个的配置项insecure-registries,表示配置一个非安全的镜像仓库。这是不安全的做法,容易受到攻击,一般不建议这么做。
# cat /etc/docker/daemon.json
{
"insecure-registries":["192.168.1.234:5000"]
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file":"1"
},
"registry-mirrors": ["https://1pew6xht.mirror.aliyuncs.com"],
"storage-driver": "overlay2"
}
192.168.1.234 是非安全的镜像仓库地址。
当启用非安全的镜像仓库时,docker运行会执行以下步骤:
- 首先,尝试HTTPS;
- 如果HTTPS可用,但证书无效,则忽略关于证书的错误;
- 如果HTTPS不可用,则回到HTTP。
重启docker使配置生效
# 重载修改过的配置文件
systemctl daemon-reload
# 重启docker service
sudo systemctl restart docker.service
# 查看docker service 状态
systemctl status docker.service
● 如何配置镜像仓库的自动清理?都有哪些策略
创建保留策略:
在Harbor中,您可以创建镜像保留策略,以决定哪些镜像应该被保留,而哪些应该被清理。通常,这是根据标签、项目、存储库或其他属性来制定的。要创建保留策略,请按照以下步骤进行:
a. 转到Harbor的Web界面。
b. 导航到 "项目" 页面,选择您想要设置保留策略的项目。
c. 在项目页面中,选择 "策略" 选项,然后创建一个新的保留策略。
d. 配置策略的条件,如标签、保留时间等。
e. 保存策略。
Harbor 自动清理策略:
-
保留最新的N个版本:此策略允许您保留仓库中的最新N个版本,而删除旧版本。这对于确保只有最新的镜像可用非常有用。
-
按日期保留:您可以设置策略以依据镜像的创建日期来进行清理。通常,您可以配置保留最近N天或N周的镜像,删除较旧的版本。
-
按标签保留:此策略允许您定义特定标签的镜像应该保留多长时间,而其他标签的镜像可以被删除。这对于按照不同用途或环境标记镜像非常有用。
-
按项目保留:您可以设置策略,以保留特定项目或存储库中的镜像,而删除其他项目中的镜像。
-
按大小保留:根据镜像占用的存储空间来进行清理。您可以设置策略以保留总存储空间不超过某个阈值,而删除超出此阈值的镜像。