|
在现代化的软件开发和部署流程中,容器化技术已成为提升效率、简化环境管理的重要工具。Docker 作为容器化的核心平台,通过镜像封装应用及其依赖,确保跨环境的一致性。Docker Compose 则进一步简化多容器应用的编排,通过声明式配置实现服务的快速部署与协同。而 Docker Harbor 作为企业级镜像仓库,提供了安全、高效的镜像存储与管理能力,支持团队协作和持续集成。
本内容旨在系统介绍 Docker 镜像的构建方法、Docker Compose 的编排实践,以及 Harbor 仓库的集成使用,帮助开发者掌握从开发到生产的完整容器化流程,提升 DevOps 实践的成熟度。
Docker镜像的创建
Docker 镜像的创建通常通过编写 Dockerfile 文件并执行构建命令完成。Dockerfile 是一个文本文件,包含一系列指令,用于定义镜像的构建步骤。
编写一个简单的 Dockerfile 示例:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY ./app /app
WORKDIR /app
CMD ["python3", "app.py"]
构建镜像的命令
使用 docker build 命令根据 Dockerfile 构建镜像。通过 -t 参数指定镜像名称和标签:
docker build -t my-python-app:latest .
多阶段构建优化镜像大小
对于需要编译或依赖复杂的环境,可以使用多阶段构建减少最终镜像体积:
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:latest
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]
使用现有容器创建镜像
通过 docker commit 可以将运行中的容器保存为新镜像。适用于调试或临时修改后的保存:
docker commit <container-id> my-new-image
导入导出镜像文件
镜像可以保存为 .tar 文件便于迁移或分享:
docker save -o my-image.tar my-image:tag
docker load -i my-image.tar
镜像构建的最佳实践
保持镜像精简,选择合适的基础镜像(如 Alpine Linux)。合并多个 RUN 指令减少镜像层数。使用 .dockerignore 文件排除不必要的文件。定期清理无用镜像释放空间:
Dockerfile 操作常用指令
FROM 指定基础镜像,所有Dockerfile必须以该指令开头。例如:
RUN 执行命令并创建新的镜像层,常用于安装软件包:
RUN apt-get update && apt-get install -y curl
COPY vs ADD 两者均用于复制文件,但COPY更透明:
ADD支持自动解压和URL下载(通常不推荐)。
WORKDIR 设置工作目录,后续指令均在此路径下执行:
ENV 设置环境变量,可被后续指令和容器运行时引用:
EXPOSE 声明容器运行时监听的端口(实际映射需通过-p参数):
CMD 指定容器启动时的默认命令(可被docker run覆盖):
ENTRYPOINT 配置容器启动时的入口命令(通常与CMD配合使用):
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
VOLUME 创建挂载点,用于持久化数据:
USER 指定运行指令的用户身份:
小 结
Docker 镜像的创建方式多种多样,常用的有:
基于现有镜像创建 :通过修改容器并提交为新的镜像。
基于本地模板创建 :从模板文件导入创建镜像。
基于 Dockerfile 创建 :通过编写 Dockerfile 来定制镜像,支持自动化构建。
Docker Compose编排
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置服务、网络和卷,简化容器化应用的部署与管理。
基本结构
Docker Compose 的核心是 docker-compose.yml 文件,其结构通常包含以下部分:
version: "3.8" # 指定 Compose 文件版本
services: # 定义服务容器
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes: # 定义数据卷
db_data:
networks: # 定义网络
app_network:
driver: bridge
常用命令
启动服务(后台运行):
停止服务并删除容器:
查看运行状态:
查看服务日志:
高级配置技巧
环境变量支持:
services:
app:
environment:
- DEBUG=${DEBUG_LEVEL} # 从 .env 文件或主机环境读取
依赖管理:
services:
web:
depends_on:
- db
- redis
资源限制:
services:
worker:
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
实际应用示例
以下是一个典型 Web 应用配置(包含前端、后端和数据库):
version: "3.8"
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend:/app
depends_on:
- api
api:
build: ./backend
ports:
- "5000:5000"
environment:
DB_URL: postgres://user:pass@db:5432/app
depends_on:
- db
db:
image: postgres:13
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
db_data:
性能优化建议
- 使用
docker-compose build --parallel 加速多服务构建 - 合理配置
restart 策略(如 restart: unless-stopped) - 对生产环境使用
docker-compose.prod.yml 覆盖开发配置 - 通过
docker-compose config 验证配置文件语法
YAML文件格式及编写注意事项
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件、数据交换等场景。其核心特点包括:
- 使用缩进表示层级关系(空格缩进,禁止用制表符)。
- 支持键值对、列表、标量(字符串、数字等)等数据结构。
- 注释以
# 开头。
基本语法示例
# 键值对
key: value
# 列表
fruits:
- apple
- banana
# 嵌套结构
person:
name: "Alice"
age: 30
编写注意事项
缩进与空格
- 同一层级元素必须对齐,缩进使用空格(通常2或4个)。
- 冒号
: 后需加空格(如 key: value)。
字符串处理
避免常见错误
高级特性(谨慎使用)
验证与工具
示例:完整配置文件
# 数据库配置
database:
host: "localhost"
port: 5432
credentials:
username: admin
password: "secure@123"
# 功能开关
features:
logging: true
analytics: false
# 白名单
allowed_ips:
- 192.168.1.1
- 10.0.0.1
Docker-Harbor私有仓库部署与管理
环境准备
确保已安装 Docker 和 Docker Compose,操作系统建议使用 Linux(如 Ubuntu/CentOS)。Harbor 需要至少 4GB 内存和 50GB 存储空间。
下载 Harbor 安装包
从 GitHub 下载最新版本的 Harbor 离线安装包:
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
tar -xzvf harbor-offline-installer-v2.7.0.tgz
cd harbor
配置 Harbor
修改 harbor.yml 配置文件,设置主机名、端口、数据目录等关键参数:
hostname: registry.yourdomain.com
http:
port: 80
https:
port: 443
certificate: /path/to/cert.pem
private_key: /path/to/key.pem
data_volume: /data/harbor
启动 Harbor
执行安装脚本并启动服务:
安装完成后,通过 docker-compose ps 检查所有容器是否正常运行。
访问 Harbor 控制台
浏览器访问 http://<your-hostname>,默认管理员账号为 admin,密码在 harbor.yml 中配置(默认为 Harbor12345)。
推送镜像到 Harbor
登录 Docker 并推送镜像:
docker login registry.yourdomain.com
docker tag your-image:tag registry.yourdomain.com/project/your-image:tag
docker push registry.yourdomain.com/project/your-image:tag
管理 Harbor
- 用户与权限:通过控制台创建用户、项目并分配角色(如管理员、开发者)。
- 垃圾回收:定期执行垃圾回收清理无用镜像:
docker-compose exec -it harbor-registry registry garbage-collect /etc/registry/config.yml
- 备份与恢复:使用官方工具备份数据目录和数据库。
高可用部署
生产环境建议配置:
- 使用外部数据库(PostgreSQL)和 Redis
- 启用 HTTPS 并配置负载均衡
- 设置多个实例通过共享存储(如 NFS)实现数据同步
常见问题处理
- 证书错误:确保客户端信任 Harbor 的 CA 证书。
- 存储不足:扩展数据目录或配置外部存储(如 S3)。
- 性能优化:调整
registry 组件的缓存参数。
通过以上步骤,可以完成 Docker Harbor 私有仓库的部署与日常管理。定期检查日志和更新版本以确保安全性与稳定性。
Harbor简介
Harbor 是一个开源的容器镜像仓库管理工具,由 VMware 公司开发并贡献给 Cloud Native Computing Foundation (CNCF)。它提供了企业级的镜像存储、安全扫描、权限管理和复制功能,适用于 Kubernetes 和 Docker 环境。
核心功能
镜像管理 支持 Docker 镜像的存储、分发和管理,提供多版本控制和垃圾回收机制。
安全扫描 集成 Clair 等工具,支持镜像漏洞扫描,确保镜像安全性。
权限控制 基于角色的访问控制(RBAC),支持多租户管理,可细化到项目级别的权限分配。
复制功能 支持跨多个 Harbor 实例的镜像复制,适用于多数据中心或混合云场景。
架构组成
核心组件
- Proxy(Nginx):处理外部请求的路由和负载均衡。
- Registry:存储容器镜像,基于 Docker Distribution 实现。
- Core:提供 API 服务、用户认证和项目管理。
- Database(PostgreSQL):存储用户、项目等元数据。
- Job Service:处理异步任务(如镜像复制、垃圾回收)。
可选组件
- Chart Museum:管理 Helm Chart。
- Notary:提供镜像签名和验证功能。
部署方式
单机部署 通过 Docker Compose 快速启动,适合测试或小规模环境。
高可用部署 支持 Kubernetes 集群部署,结合外部数据库和存储(如 S3、Ceph)实现高可用。
应用场景
- CI/CD 流水线:作为镜像仓库与 Jenkins、GitLab CI 等工具集成。
- 混合云环境:通过镜像复制实现跨云镜像同步。
- 安全合规:满足企业级镜像扫描和审计需求。
部署Harbor服务
安装 Docker 和 Docker Compose
确保系统已安装 Docker 和 Docker Compose。Docker 版本需不低于 17.06.0,Docker Compose 版本不低于 1.18.0。
安装 Docker:
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
安装 Docker Compose:
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
下载 Harbor 离线安装包
从 Harbor 官方 GitHub 下载最新版本的离线安装包:
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
tar xvf harbor-offline-installer-v2.5.0.tgz
cd harbor
配置 Harbor
修改 harbor.yml 配置文件,主要调整以下参数:
hostname: your.domain.com # 替换为实际域名或 IP
http:
port: 80
https:
port: 443
certificate: /path/to/cert.pem
private_key: /path/to/key.pem
harbor_admin_password: Harbor12345 # 管理员初始密码
database:
password: root123 # 数据库密码
data_volume: /data # 数据存储路径
若使用 HTTP 协议,需注释 HTTPS 相关配置并启用 HTTP:
# https:
# port: 443
# certificate: /path/to/cert.pem
# private_key: /path/to/key.pem
安装 Harbor
执行安装脚本:
安装完成后,可通过浏览器访问 http://your.domain.com,使用默认用户名 admin 和配置文件中设置的密码登录。
管理 Harbor 服务
停止 Harbor 服务:
重启 Harbor 服务:
卸载 Harbor(保留数据):
彻底卸载(删除数据):
./install.sh --with-notary --with-trivy --with-chartmuseum --delete-data
配置 TLS 证书
若需启用 HTTPS,将证书和私钥文件放置到指定路径,并在 harbor.yml 中配置正确路径。证书可通过 Let's Encrypt 或自签名生成。
总结
通过 Docker 镜像构建,应用及其运行环境被封装为可移植的单元,确保开发、测试和生产环境的一致性。Docker Compose 以简洁的 YAML 配置定义多容器应用,实现服务依赖管理、网络配置和资源分配的自动化。结合 Harbor 仓库,团队能够安全地存储、分发镜像,并通过访问控制、漏洞扫描等功能增强供应链安全。
掌握这三项技术,不仅能优化本地开发与测试流程,还能为大规模部署提供可靠基础。未来可进一步探索 Kubernetes 编排、CI/CD 流水线集成等进阶实践,构建更高效的云原生架构。
到此这篇关于Docker镜像构建_Docker Compose编排实践_Docker Harbor仓库的集成的文章就介绍到这了,更多相关Docker与Docker Compose以及Docker Harbor内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区! |