Docker镜像构建_Docker Compose编排实践_Docker Harbor仓库的集成

 更新时间:2026年01月02日 09:31:24   作者:2501_93990905  
Docker作为容器化的核心平台,通过镜像封装应用及其依赖,确保跨环境的一致性,Docker Compose 则进一步简化多容器应用的编排,通过声明式配置实现服务的快速部署与协同,而 Docker Harbor 作为企业级镜像仓库,提供了安全、高效的镜像存储与管理能力,支持团队协作和持续集成

在现代化的软件开发和部署流程中,容器化技术已成为提升效率、简化环境管理的重要工具。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 文件排除不必要的文件。定期清理无用镜像释放空间:

docker image prune -a
 

Dockerfile 操作常用指令

FROM
指定基础镜像,所有Dockerfile必须以该指令开头。例如:

FROM ubuntu:20.04
 

RUN
执行命令并创建新的镜像层,常用于安装软件包:

RUN apt-get update && apt-get install -y curl
 

COPY vs ADD
两者均用于复制文件,但COPY更透明:

COPY ./app /usr/src/app
 

ADD支持自动解压和URL下载(通常不推荐)。

WORKDIR
设置工作目录,后续指令均在此路径下执行:

WORKDIR /app
 

ENV
设置环境变量,可被后续指令和容器运行时引用:

ENV NODE_ENV=production
 

EXPOSE
声明容器运行时监听的端口(实际映射需通过-p参数):

EXPOSE 8080
 

CMD
指定容器启动时的默认命令(可被docker run覆盖):

CMD ["python", "app.py"]
 

ENTRYPOINT
配置容器启动时的入口命令(通常与CMD配合使用):

ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
 

VOLUME
创建挂载点,用于持久化数据:

VOLUME /data
 

USER
指定运行指令的用户身份:

USER node
 

 小

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
 

常用命令

启动服务(后台运行):

docker-compose up -d
 

停止服务并删除容器:

docker-compose down
 

查看运行状态:

docker-compose ps
 

查看服务日志:

docker-compose logs -f
 

高级配置技巧

环境变量支持:

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

验证与工具

示例:完整配置文件

  • 普通字符串无需引号,但含特殊字符(如 :#)时需用引号包裹:
    message: "Hello: World"
     
    
  • 多行字符串可用 |(保留换行)或 >(折叠换行):

    description: |
      This is a
      multi-line text.
     
    

    数据类型明确

  • 布尔值建议用 true/false,而非字符串 "true"
  • 数字直接书写(如 42),科学计数法需注意(如 1e5)。
  • 缩进不一致导致解析失败。
  • 键名重复(部分解析器会覆盖而非报错)。
  • 未转义特殊字符(如 @% 可能被误认为特殊指令)。
  • 锚点 & 和别名 * 可复用代码块,但过度使用会降低可读性。
  • 合并键 << 需确保解析器支持。
  • 使用在线工具(如 YAML Lint)验证语法。
  • 编辑器中安装插件(如 VSCode 的 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 离线安装包:

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

执行安装脚本并启动服务:

./install.sh
 

安装完成后,通过 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

执行安装脚本:

./install.sh
 

安装完成后,可通过浏览器访问 http://your.domain.com,使用默认用户名 admin 和配置文件中设置的密码登录。

管理 Harbor 服务

停止 Harbor 服务:

docker-compose down -v
 

重启 Harbor 服务:

docker-compose up -d
 

卸载 Harbor(保留数据):

./install.sh --uninstall
 

彻底卸载(删除数据):

./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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解使用Docker容器来源码编译etcd

    详解使用Docker容器来源码编译etcd

    这篇文章主要介绍了详解使用Docker容器来源码编译etcd,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • docker官方镜像下载及使用Dockerfile创建镜像的方法

    docker官方镜像下载及使用Dockerfile创建镜像的方法

    这篇文章主要介绍了docker官方镜像下载及使用Dockerfile创建镜像的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • docker查询日志并输出到文件的方法

    docker查询日志并输出到文件的方法

    docker的运行的时候我们喜欢采用 -d 的命令来启动docker容器,这就导致了一个问题,无法直接看到docker运行日志,只能去后台进去找到日志文件查看,下面这篇文章主要给大家介绍了关于docker查询日志并输出到文件的相关资料,需要的朋友可以参考下
    2023-06-06
  • Docker 容器日志分析

    Docker 容器日志分析

    这篇文章主要介绍了Docker 容器日志分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 基于Docker镜像部署go项目的方法步骤

    基于Docker镜像部署go项目的方法步骤

    这篇文章主要介绍了基于Docker镜像部署go项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Docker 容器内存监控原理及应用

    Docker 容器内存监控原理及应用

    这篇文章主要介绍了Docker 容器内存监控原理及应用的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker部署服务端口无法访问的排查与解决方法

    Docker部署服务端口无法访问的排查与解决方法

    在使用 Docker 部署 Grafana 的过程中,我遇到了一个比较常见的问题:容器已经启动成功,宿主机本地能访问 Grafana 的 3000 端口,但在局域网中却无法访问,本文就为大家详细介绍了排查与解决方法,需要的朋友可以参考下
    2025-11-11
  • Docker+Nginx打包部署前后端分离步骤实现

    Docker+Nginx打包部署前后端分离步骤实现

    这篇文章主要介绍了Docker+Nginx打包部署前后端分离步骤实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-01-01
  • docker gitea drone实现超轻量级CI CD实战详解

    docker gitea drone实现超轻量级CI CD实战详解

    这篇文章主要为大家介绍了docker gitea drone实现超轻量级CI CD实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 8个步骤彻底清理Docker镜像

    8个步骤彻底清理Docker镜像

    本文主要介绍了8个步骤彻底清理Docker镜像,包括查看镜像、删除指定镜像、批量清理未使用镜像、按时间或大小过滤、脚本自动化及定时任务等,感兴趣的可以了解一下
    2025-09-09

最新评论