Docker(3)

目录

前言

[一、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)。
字符串处理
避免常见错误
高级特性(谨慎使用)

验证与工具

示例:完整配置文件

  • 普通字符串无需引号,但含特殊字符(如 :#)时需用引号包裹:

    yaml 复制代码
    message: "Hello: World"
     
  • 多行字符串可用 |(保留换行)或 >(折叠换行):

    yaml 复制代码
    description: |
      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
  • 用户与权限:通过控制台创建用户、项目并分配角色(如管理员、开发者)。

  • 垃圾回收 :定期执行垃圾回收清理无用镜像:

    bash 复制代码
    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:

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 流水线集成等进阶实践,构建更高效的云原生架构。

相关推荐
irisart2 小时前
第二章【NGINX 开源功能】—— 四层反向代理
运维·nginx·开源
XMYX-02 小时前
从 Pod 资源到 JVM 参数:我再生产环境中踩过的 Kubernetes 资源配置那些坑——2025 年度技术总结
jvm·容器·kubernetes
iconball2 小时前
个人用云计算学习笔记 --33 Containerd
运维·笔记·学习·云计算
工程师华哥2 小时前
2026新版华为数通认证HCIP-CT题库试卷,涵盖拖拽题、判断题、填空题、多选题、单选题等多种考试题型和题目(附答案解析)
运维·网络工程师·华为认证·华为hcip·华为数通认证·核心路由·hcip题库
lbb 小魔仙2 小时前
【Linux】Linux 安全实战:防火墙配置 + 漏洞修复,符合企业合规标准
linux·运维·安全
_OP_CHEN2 小时前
【测试理论与实践】(三)测试BUG篇:从 BUG 本质到实战博弈,带你吃透软件测试的核心逻辑
运维·测试开发·产品运营·bug·压力测试·测试
iconball2 小时前
个人用云计算学习笔记 --35 Ceph 分布式存储
运维·笔记·ceph·学习·云计算
oMcLin2 小时前
如何在 Linux 上打开和编辑 Apple iWork 文件(增强版)
linux·运维·服务器
Ares-Wang2 小时前
网络》》FTP、TFTP、Telnet DHCP
运维·服务器·网络