Docker 基础03

发布时间 2023-10-12 20:25:49作者: zhan0

十一、使用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证书

生成CA证书私钥:
openssl genrsa -out ca.key 4096
生成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
生成一个v3版x509扩展文件:
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
使用该v3.ext文件为Harbor主机生成证书:
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
将证书提供给Harbor和Docker 将harbor.zhan.com.crt转化为harbor.zhan.com.cert供Docker使用,Dockr守护进程将.crt文件看成CA证书,将.cert看成客户端证书:
openssl x509 -inform PEM -in harbor.zhan.com.crt -out harbor.zhan.com.cert
在Harbor主机创建Docker证书目录并将服务器证书、密钥和CA证书复制到该目录下:
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/

注意:

如果将默认的nginx端口443映射到其他端口,需创建/etc/docker/certs.d/altrialily.com:port文件夹或/etc/docker/certs.d/harbor_IP:port。

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 自动清理策略:

  1. 保留最新的N个版本:此策略允许您保留仓库中的最新N个版本,而删除旧版本。这对于确保只有最新的镜像可用非常有用。

  2. 按日期保留:您可以设置策略以依据镜像的创建日期来进行清理。通常,您可以配置保留最近N天或N周的镜像,删除较旧的版本。

  3. 按标签保留:此策略允许您定义特定标签的镜像应该保留多长时间,而其他标签的镜像可以被删除。这对于按照不同用途或环境标记镜像非常有用。

  4. 按项目保留:您可以设置策略,以保留特定项目或存储库中的镜像,而删除其他项目中的镜像。

  5. 按大小保留:根据镜像占用的存储空间来进行清理。您可以设置策略以保留总存储空间不超过某个阈值,而删除超出此阈值的镜像。