目录
[一、Docker 镜像的创建](#一、Docker 镜像的创建)
[二、Docker Compose 编排](#二、Docker Compose 编排)
[YAML 文件格式及编写注意事项](#YAML 文件格式及编写注意事项)
[三、Docker-Harbor 私有仓库部署与管理](#三、Docker-Harbor 私有仓库部署与管理)
[下载 Harbor 安装包](#下载 Harbor 安装包)
[配置 Harbor](#配置 Harbor)
[启动 Harbor](#启动 Harbor)
[访问 Harbor 控制台](#访问 Harbor 控制台)
[推送镜像到 Harbor](#推送镜像到 Harbor)
[管理 Harbor](#管理 Harbor)
[Harbor 简介](#Harbor 简介)
[部署 Harbor 服务](#部署 Harbor 服务)
前言
在现代化的软件开发和部署流程中,容器化技术已成为提升效率、简化环境管理的重要工具。Docker 作为容器化的核心平台,通过镜像封装应用及其依赖,确保跨环境的一致性。Docker Compose 则进一步简化多容器应用的编排,通过声明式配置实现服务的快速部署与协同。而 Docker Harbor 作为企业级镜像仓库,提供了安全、高效的镜像存储与管理能力,支持团队协作和持续集成。
本内容旨在系统介绍 Docker 镜像的构建方法、Docker Compose 的编排实践,以及 Harbor 仓库的集成使用,帮助开发者掌握从开发到生产的完整容器化流程,提升 DevOps 实践的成熟度。
一、Docker****镜像的创建
Docker 镜像的创建通常通过编写 Dockerfile 文件并执行构建命令完成。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 参数指定镜像名称和标签:
bash
docker build -t my-python-app:latest .
多阶段构建优化镜像大小
对于需要编译或依赖复杂的环境,可以使用多阶段构建减少最终镜像体积:
dockerfile
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 可以将运行中的容器保存为新镜像。适用于调试或临时修改后的保存:
bash
docker commit <container-id> my-new-image
导入导出镜像文件
镜像可以保存为 .tar 文件便于迁移或分享:
bash
docker save -o my-image.tar my-image:tag
docker load -i my-image.tar
镜像构建的最佳实践
保持镜像精简,选择合适的基础镜像(如 Alpine Linux)。合并多个 RUN 指令减少镜像层数。使用 .dockerignore 文件排除不必要的文件。定期清理无用镜像释放空间:
bash
docker image prune -a
Dockerfile 操作常用指令
FROM
指定基础镜像,所有Dockerfile必须以该指令开头。例如:
dockerfile
FROM ubuntu:20.04
RUN
执行命令并创建新的镜像层,常用于安装软件包:
dockerfile
RUN apt-get update && apt-get install -y curl
COPY vs ADD
两者均用于复制文件,但COPY更透明:
dockerfile
COPY ./app /usr/src/app
ADD支持自动解压和URL下载(通常不推荐)。
WORKDIR
设置工作目录,后续指令均在此路径下执行:
dockerfile
WORKDIR /app
ENV
设置环境变量,可被后续指令和容器运行时引用:
dockerfile
ENV NODE_ENV=production
EXPOSE
声明容器运行时监听的端口(实际映射需通过-p参数):
dockerfile
EXPOSE 8080
CMD
指定容器启动时的默认命令(可被docker run覆盖):
dockerfile
CMD ["python", "app.py"]
ENTRYPOINT
配置容器启动时的入口命令(通常与CMD配合使用):
dockerfile
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
VOLUME
创建挂载点,用于持久化数据:
dockerfile
VOLUME /data
USER
指定运行指令的用户身份:
dockerfile
USER node
小 结
Docker 镜像的创建方式多种多样,常用的有:
基于现有镜像创建 :通过修改容器并提交为新的镜像。
基于本地模板创建 :从模板文件导入创建镜像。
基于 Dockerfile 创建 :通过编写 Dockerfile 来定制镜像,支持自动化构建。
二、Docker Compose****编排
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置服务、网络和卷,简化容器化应用的部署与管理。
基本结构
Docker Compose 的核心是 docker-compose.yml 文件,其结构通常包含以下部分:
yaml
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
常用命令
启动服务(后台运行):
bash
docker-compose up -d
停止服务并删除容器:
bash
docker-compose down
查看运行状态:
bash
docker-compose ps
查看服务日志:
bash
docker-compose logs -f
高级配置技巧
环境变量支持:
yaml
services:
app:
environment:
- DEBUG=${DEBUG_LEVEL} # 从 .env 文件或主机环境读取
依赖管理:
yaml
services:
web:
depends_on:
- db
- redis
资源限制:
yaml
services:
worker:
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
实际应用示例
以下是一个典型 Web 应用配置(包含前端、后端和数据库):
yaml
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)是一种人类可读的数据序列化格式,常用于配置文件、数据交换等场景。其核心特点包括:
- 使用缩进表示层级关系(空格缩进,禁止用制表符)。
- 支持键值对、列表、标量(字符串、数字等)等数据结构。
- 注释以
#开头。
基本语法示例
yaml
# 键值对
key: value
# 列表
fruits:
- apple
- banana
# 嵌套结构
person:
name: "Alice"
age: 30
编写注意事项
缩进与空格
- 同一层级元素必须对齐,缩进使用空格(通常2或4个)。
- 冒号
:后需加空格(如key: value)。
字符串处理
避免常见错误
高级特性(谨慎使用)
验证与工具
示例:完整配置文件
-
普通字符串无需引号,但含特殊字符(如
:、#)时需用引号包裹:yamlmessage: "Hello: World" -
多行字符串可用
|(保留换行)或>(折叠换行):yamldescription: | This is a multi-line text.数据类型明确
-
布尔值建议用
true/false,而非字符串"true"。 -
数字直接书写(如
42),科学计数法需注意(如1e5)。 -
缩进不一致导致解析失败。
-
键名重复(部分解析器会覆盖而非报错)。
-
未转义特殊字符(如
@、%可能被误认为特殊指令)。 -
锚点
&和别名*可复用代码块,但过度使用会降低可读性。 -
合并键
<<需确保解析器支持。 -
使用在线工具(如 YAML Lint)验证语法。
-
编辑器中安装插件(如 VSCode 的 YAML 扩展)实时检查。
yaml
# 数据库配置
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 离线安装包:
bash
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 配置文件,设置主机名、端口、数据目录等关键参数:
yaml
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
执行安装脚本并启动服务:
bash
./install.sh
安装完成后,通过 docker-compose ps 检查所有容器是否正常运行。
访问 Harbor 控制台
浏览器访问 http://<your-hostname>,默认管理员账号为 admin,密码在 harbor.yml 中配置(默认为 Harbor12345)。
推送镜像到 Harbor
登录 Docker 并推送镜像:
bash
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
-
用户与权限:通过控制台创建用户、项目并分配角色(如管理员、开发者)。
-
垃圾回收 :定期执行垃圾回收清理无用镜像:
bashdocker-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:
bash
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:
bash
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 下载最新版本的离线安装包:
bash
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 配置文件,主要调整以下参数:
yaml
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:
yaml
# https:
# port: 443
# certificate: /path/to/cert.pem
# private_key: /path/to/key.pem
安装 Harbor
执行安装脚本:
bash
./install.sh
安装完成后,可通过浏览器访问 http://your.domain.com,使用默认用户名 admin 和配置文件中设置的密码登录。
管理 Harbor 服务
停止 Harbor 服务:
bash
docker-compose down -v
重启 Harbor 服务:
bash
docker-compose up -d
卸载 Harbor(保留数据):
bash
./install.sh --uninstall
彻底卸载(删除数据):
bash
./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 流水线集成等进阶实践,构建更高效的云原生架构。