Docker 镜像仓库与加速配置

Docker 镜像仓库与加速配置 本文介绍 Docker 镜像仓库的搭建配置、镜像加速方案以及 Harbor 私有仓库的部署方法。 概述 在使用 Docker 的过程中,镜像的拉取和推送速度直接影响开发和部署效率。本文将介绍如何配置镜像加速器、搭建私有镜像仓库,以及 Harbor 企业级镜像仓库的部

Docker 镜像仓库与加速配置

本文介绍 Docker 镜像仓库的搭建配置、镜像加速方案以及 Harbor 私有仓库的部署方法。

概述

在使用 Docker 的过程中,镜像的拉取和推送速度直接影响开发和部署效率。本文将介绍如何配置镜像加速器、搭建私有镜像仓库,以及 Harbor 企业级镜像仓库的部署方法。

镜像加速器配置

国内镜像源

由于网络原因,从 Docker Hub 拉取镜像可能会很慢。配置国内镜像加速器可以显著提升拉取速度。

配置方法

Docker Daemon 配置

# 创建/编辑配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

K3s 容器镜像加速

# 创建 registries 配置
mkdir -p /etc/rancher/k3s
cat > /etc/rancher/k3s/registries.yaml <<-'EOF'
mirrors:
  docker.io:
    endpoint:
      - "https://docker.m.daocloud.io"
      - "https://docker.1ms.run"
      - "https://docker.xuanyuan.me"
      - "https://docker.mirrors.ustc.edu.cn"
  
  registry.k8s.io:
    endpoint:
      - "https://k8s.mirror.nju.edu.cn"
EOF

# 重启 K3s
systemctl restart k3s

验证配置

# 查看当前配置
docker info | grep -A 10 "Registry Mirrors"

# 测试拉取速度
time docker pull nginx:latest

私有镜像仓库

使用 Docker Registry

快速启动

# 启动私有仓库
docker run -d \
  -p 5000:5000 \
  --name registry \
  --restart always \
  -v /data/registry:/var/lib/registry \
  registry:2

客户端配置

# 配置信任私有仓库
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "insecure-registries": [
    "192.168.1.100:5000",
    "registry.example.com"
  ]
}
EOF

sudo systemctl restart docker

推送和拉取镜像

# 标记镜像
docker tag myapp:v1.0 192.168.1.100:5000/myapp:v1.0

# 推送镜像
docker push 192.168.1.100:5000/myapp:v1.0

# 拉取镜像
docker pull 192.168.1.100:5000/myapp:v1.0

Harbor 企业级仓库

Harbor 简介

Harbor 是一个开源的企业级 Docker 镜像仓库,提供:

  • 基于角色的访问控制(RBAC)
  • 镜像复制和同步
  • 漏洞扫描(集成 Trivy/Clair)
  • 镜像签名和验证
  • 审计日志

Harbor 部署

Docker Compose 方式

# 下载 Harbor 安装包
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
tar -xzf harbor-offline-installer-v2.9.0.tgz
cd harbor

# 复制配置文件
cp harbor.yml.tmpl harbor.yml

HTTP 配置

# harbor.yml
hostname: harbor.example.com

http:
  port: 80

# 禁用 HTTPS(内网使用)
# https:
#   port: 443
#   certificate: /your/certificate/path
#   private_key: /your/private/key/path

harbor_admin_password: YourSecurePassword

database:
  password: root123
  max_idle_conns: 100
  max_open_conns: 900

data_volume: /data/harbor

 Clair:
   updaters_interval: 12

trivy:
  ignore_unfixed: false
  skip_update: false
  offline_scan: false
  insecure: false

HTTPS 配置(推荐)

# 生成自签名证书(测试环境)
mkdir -p ~/harbor/certs/{ca,server,client}
cd ~/harbor/certs

# 生成 CA 证书
openssl genrsa -out ca/ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.example.com" \
  -key ca/ca.key \
  -out ca/ca.crt

# 生成服务器证书
openssl genrsa -out server/harbor.example.com.key 4096
openssl req -sha512 -new \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.example.com" \
  -key server/harbor.example.com.key \
  -out server/harbor.example.com.csr

# 创建扩展文件
cat > server/v3.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=example.com
DNS.2=harbor.example.com
EOF

# 签发证书
openssl x509 -req -sha512 -days 3650 \
  -extfile server/v3.ext \
  -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial \
  -in server/harbor.example.com.csr \
  -out server/harbor.example.com.crt

安装 Harbor

cd ~/harbor

# 准备配置
./prepare

# 安装并启动
./install.sh

# 安装特定组件(如 Trivy 扫描器)
./install.sh --with-trivy

启动和停止

# 停止 Harbor
docker-compose -f /opt/harbor/docker-compose.yml down

# 启动 Harbor
docker-compose -f /opt/harbor/docker-compose.yml up -d

# 查看状态
docker-compose -f /opt/harbor/docker-compose.yml ps

客户端配置

配置证书信任

# 复制 CA 证书到 Docker 信任目录
sudo mkdir -p /etc/docker/certs.d/harbor.example.com
sudo cp ~/harbor/certs/ca/ca.crt /etc/docker/certs.d/harbor.example.com/

# 系统信任证书(Ubuntu/Debian)
sudo cp ~/harbor/certs/ca/ca.crt /usr/local/share/ca-certificates/harbor-ca.crt
sudo update-ca-certificates

# 系统信任证书(CentOS/RHEL)
sudo cp ~/harbor/certs/ca/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract

# 重启 Docker
sudo systemctl restart docker

登录仓库

# 登录 Harbor
docker login harbor.example.com -u admin

# 推送镜像
docker tag myapp:v1.0 harbor.example.com/project/myapp:v1.0
docker push harbor.example.com/project/myapp:v1.0

# 拉取镜像
docker pull harbor.example.com/project/myapp:v1.0

Kubernetes 集成

创建镜像拉取 Secret

# 创建 Secret
kubectl create secret docker-registry harbor-secret \
  --docker-server=harbor.example.com \
  --docker-username=admin \
  --docker-password=YourPassword \
  --docker-email=admin@example.com \
  -n default

在 Pod 中使用

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  imagePullSecrets:
    - name: harbor-secret
  containers:
    - name: myapp
      image: harbor.example.com/project/myapp:v1.0

配置默认 ServiceAccount

# 为 default ServiceAccount 添加拉取密钥
kubectl patch serviceaccount default \
  -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}' \
  -n default

镜像复制与同步

Harbor 仓库间复制

# 在 Harbor UI 中配置:
# 1. 创建目标仓库(仓库管理 -> 新建目标)
# 2. 创建复制规则(仓库管理 -> 复制 -> 新建规则)

使用 Skopeo 同步

# 安装 Skopeo
sudo apt-get install -y skopeo

# 复制镜像
skopeo copy \
  docker://harbor1.example.com/project/image:tag \
  docker://harbor2.example.com/project/image:tag \
  --src-creds=user1:pass1 \
  --dest-creds=user2:pass2

# 同步整个仓库
skopeo sync \
  --src docker \
  --dest docker \
  harbor1.example.com/project \
  harbor2.example.com \
  --src-creds=user1:pass1 \
  --dest-creds=user2:pass2

镜像清理策略

Harbor 自动清理

# 在 harbor.yml 中配置
garbage_collection:
  enabled: true
  schedule: "0 0 * * *"  # 每天凌晨执行
  workers: 5

手动清理

# 进入 Harbor 目录
cd /opt/harbor

# 执行垃圾回收
docker-compose exec registry bin/registry garbage-collect \
  /etc/registry/config.yml

# 清理未使用的卷
docker volume prune -f

多架构镜像支持

构建多架构镜像

# 启用 Buildx
docker buildx create --name multiarch --use

# 构建并推送多架构镜像
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t harbor.example.com/project/myapp:v1.0 \
  --push .

创建 Manifest

# 拉取不同架构镜像
docker pull --platform linux/amd64 harbor.example.com/project/myapp:v1.0-amd64
docker pull --platform linux/arm64 harbor.example.com/project/myapp:v1.0-arm64

# 创建 manifest 列表
docker manifest create harbor.example.com/project/myapp:v1.0 \
  harbor.example.com/project/myapp:v1.0-amd64 \
  harbor.example.com/project/myapp:v1.0-arm64

# 注解架构信息
docker manifest annotate harbor.example.com/project/myapp:v1.0 \
  harbor.example.com/project/myapp:v1.0-amd64 --arch amd64
docker manifest annotate harbor.example.com/project/myapp:v1.0 \
  harbor.example.com/project/myapp:v1.0-arm64 --arch arm64

# 推送 manifest
docker manifest push harbor.example.com/project/myapp:v1.0

安全加固

启用漏洞扫描

# 安装时启用 Trivy
./install.sh --with-trivy

# 在 UI 中配置扫描策略:
# 1. 项目 -> 配置管理 -> 部署安全
# 2. 开启自动扫描镜像
# 3. 阻止危险级别漏洞的镜像运行

镜像签名(Notary)

# 安装时启用 Notary
./install.sh --with-notary

# 推送并签名镜像
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://notary.example.com

docker push harbor.example.com/project/myapp:v1.0

访问控制

# 创建项目并配置成员权限
# 1. 管理员(Admin):完全控制
# 2. 维护者(Maintainer):推送/拉取/配置
# 3. 开发者(Developer):推送/拉取
# 4. 访客(Guest):仅拉取

监控与日志

启用 Prometheus 监控

# harbor.yml
metric:
  enabled: true
  port: 9090
  path: /metrics

日志配置

# harbor.yml
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
  external_endpoint:
    protocol: tcp
    host: logstash.example.com
    port: 5044

故障排查

常见问题

# 查看 Harbor 日志
cd /opt/harbor
docker-compose logs -f

# 查看特定服务日志
docker-compose logs -f core
docker-compose logs -f registry

# 检查磁盘空间
df -h /data/harbor

# 修复权限
docker-compose exec registry chown -R 10000:10000 /storage

重置管理员密码

cd /opt/harbor
docker-compose down

# 修改配置文件中的密码
vim harbor.yml
# harbor_admin_password: NewPassword

# 重新准备和启动
./prepare
docker-compose up -d

总结

本文介绍了 Docker 镜像仓库的配置方法:

  1. 镜像加速:配置国内镜像源提升拉取速度
  2. 私有仓库:使用 Docker Registry 快速搭建简单仓库
  3. Harbor 部署:企业级仓库的完整部署和配置流程
  4. K8s 集成:Secret 配置和默认 ServiceAccount 设置
  5. 镜像同步:使用 Skopeo 和 Harbor 复制功能
  6. 多架构支持:构建和推送多平台镜像
  7. 安全加固:漏洞扫描、镜像签名、访问控制

通过合理配置镜像仓库,可以构建高效、安全的企业级容器镜像管理体系。

LICENSED UNDER CC BY-NC-SA 4.0
Comment