经验-docker 相关使用实践
一、Harbor 仓库 SSL 证书问题解决(依赖加证书文件实在解决不了的情况下)
1# 添加自签名证书到系统信任链
2echo "-----BEGIN CERTIFICATE-----
3MIID... (证书内容) ...
4-----END CERTIFICATE-----" | sudo tee -a /etc/ssl/certs/harbor.crt > /dev/null
5
6# CentOS/RHEL 更新证书信任库
7sudo update-ca-trust force-enable
8sudo update-ca-trust extract
9
10# Ubuntu/Debian 更新证书
11sudo update-ca-certificates
验证方法:
1curl -v https://your-harbor-domain
二、镜像优化分析工具
使用 Dive 进行镜像层分析:
1# 安装 Dive
2wget https://github.com/wagoodman/dive/releases/download/v0.11.0/dive_0.11.0_linux_amd64.deb
3sudo dpkg -i dive*.deb
4
5# 分析镜像
6dive your-image:tag
关键功能:
- 可视化每层文件变化
- 计算浪费的空间(重复/删除的文件)
三、Dockerfile 最佳实践
-
基础规范
-
健康检查配置
-
安全增强
-
构建优化
-
编写 .dockerignore 文件, 将不相关的文件忽略, 不发送到 docker 环境
-
一个容器运行一个应用
-
镜像不要在生产环境中不要使用 latest 标签
-
优先使用 copy 而不是 add
-
设置默认的环境变量
-
使用 label 设置镜像元数据
四、多架构镜像构建
1# 创建构建器实例
2docker buildx create --use --name multiarch-builder
3
4# 构建并推送多平台镜像
5docker buildx build --platform linux/arm64,linux/amd64 \
6 -t your-registry/image:tag --push .
7
8# 创建统一 manifest
9docker manifest create your-registry/image:tag \
10 your-registry/image:tag-arm64 \
11 your-registry/image:tag-amd64
五、网络与安全管控
-
动态防火墙管理
-
安全端口暴露策略
六、CI/CD 集成
-
GitLab Runner 配置
-
高效缓存配置
七、高级技巧
- Root 权限进入容器
1 docker exec -it --user root <container> /bin/bash
- 代理网络配置
1 # 创建代理配置文件
2 cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf
3 [Service]
4 Environment="HTTP_PROXY=http://proxy.example.com:8080"
5 Environment="NO_PROXY=localhost,.internal"
6 EOF
7
8 systemctl daemon-reload
9 systemctl restart docker
- 镜像压缩优化
- 多阶段构建
1 FROM golang:1.19 AS build
2 COPY . .
3 RUN go build -o /app
4
5 FROM alpine:3.15
6 COPY --from=build /app /app
7 CMD ["/app"]
- 标签管理策略
- 使用语义化版本标签(v1.2.3)
- 为最新稳定版本维护 latest 标签
- 包含构建元数据(commit hash + 日期)
- 日志管理, 防止磁盘撑爆
- 资源限制
1docker run -it --cpus=2 --memory=512m --blkio-weight=500 your-image