news 2026/6/22 11:28:12

47 Docker镜像编排

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
47 Docker镜像编排

文章目录

  • 前言
  • 理论部分
    • 8_镜像的创建
      • 8.1_Docker 镜像结构
      • 8.2_Dockerfile 指令详解
      • 8.3_镜像三种创建方式
    • 9_Compose编排
      • 9.1_Compose 核心概念
      • 9.2_YAML 语法规范
    • 10_Harbor私有仓库
      • 10.1_Harbor 核心组件
      • 10.2_Harbor 安全机制
  • 实验部分
    • 8_镜像的创建
      • 8.1_构建 Apache 镜像
    • 9_Compose编排
      • 9.1_安装 Docker Compose
    • 10_Harbor私有仓库
      • 10.1_部署 Harbor
      • 10.2_客户端配置与镜像推送
  • 结语

前言

本文系统梳理 Docker 镜像创建、Docker Compose 编排及 Harbor 私有仓库三大核心内容,涵盖理论原理、操作命令、配置文件路径、端口设置、构建流程与部署细节。所有知识点严格依据原始教案整理,确保无遗漏、可复现、易查阅。

  1. 镜像的创建(含 Dockerfile 详解、分层机制、构建命令)
  2. Docker Compose 编排(含 YAML 语法、Nginx+Tomcat 示例、安装命令)
  3. Harbor 私有仓库(含组件说明、部署步骤、客户端配置、推送流程)

理论部分

8_镜像的创建

Docker镜像通过分层方式构建并复用缓存,运行时在镜像之上独立建立容器读写层,并通过写时复制机制实现高效隔离和复用。

  • Docker 镜像是一个特殊的只读文件系统,包含容器运行所需的程序、库、资源、配置及运行时参数(如环境变量、用户、匿名卷等),但不包含动态数据。
  • 镜像采用分层结构,底层共享宿主机 kernel,仅需提供 rootfs(根文件系统),因此如 CentOS 镜像可精简至约 200MB。
  • 镜像定制的核心方式是编写Dockerfile,通过脚本化指令实现透明、可复用、自动化的镜像构建。

8.1_Docker 镜像结构

镜像分层机制

  • 镜像由多层 read-only 的 rootfs 构成,每层对应 Dockerfile 中的一条指令。
  • 容器启动时,在镜像最上层叠加一个 read-write 层,所有文件修改均写入此层。
  • 删除容器时,仅删除该 read-write 层,底层镜像不变。

镜像缓存规则

  • 每条 Dockerfile 指令生成一个镜像层,并被缓存复用。
  • 若某层指令、复制文件或构建变量发生变化,则该层及之后所有层缓存失效。
  • 镜像层不可变:若某层添加文件,下一层删除,该文件仍存在于镜像中,仅在容器中不可见。

宿主机 Kernel

bootfs 共享

rootfs Layer 1: 基础 OS

rootfs Layer 2: 软件安装

rootfs Layer 3: 配置文件

Read-Write Container Layer

8.2_Dockerfile 指令详解

Dockerfile 结构四部分

  • 基础镜像信息(FROM)
  • 维护者信息(MAINTAINER)
  • 镜像操作指令(RUN、ADD、COPY 等)
  • 容器启动指令(CMD、ENTRYPOINT)

常用指令列表

  • FROM:指定基础镜像,必须为第一行
  • MAINTAINER:指定维护者信息
  • RUN:执行命令并提交到镜像层
  • CMD:容器启动默认命令,可被docker run覆盖
  • ENTRYPOINT:容器启动主命令,参数由CMD提供,优先级:docker run>ENTRYPOINT>CMD
  • EXPOSE:声明容器监听端口
  • ENV:设置环境变量,Linux的PATH=也可以设置环境变量。
  • ADD:复制文件/目录,支持 URL 下载和自动解压
  • COPY:仅复制本地文件/目录
  • VOLUME:创建挂载点
  • USER:设置运行用户
  • WORKDIR:设置工作目录
  • ONBUILD:作为基础镜像时触发的指令
  • HEALTHCHECK:设置健康检查命令

Dockerfile 编写规范

  • 第一行必须为FROM
  • 推荐第二行为MAINTAINER
  • 中间为镜像操作指令(每条新增一层)
  • 最后使用CMDENTRYPOINT指定启动命令

8.3_镜像三种创建方式

  • 基于现有镜像创建:修改容器后docker commit
  • 基于本地模板创建:docker import导入 tar 包
  • 基于 Dockerfile 创建:docker build(推荐)

9_Compose编排

  • Docker Compose 是 Docker 官方开源项目,用于通过单个 YAML 文件定义和管理多容器应用,简化部署与联动。
  • Compose 项目由 Python 编写,调用 Docker API,适用于任何支持 Docker API 的平台。
  • Compose 将容器管理分为三层:工程(project)、服务(service)、容器(container)。

9.1_Compose 核心概念

工程(Project):由docker-compose.yml及相关文件组成,默认以目录名为工程名。
服务(Service):定义容器镜像、参数、依赖,一个服务可含多个容器实例。
容器(Container):服务的具体运行实例。

注意:Compose 本身不提供负载均衡,需借助 Consul 等工具实现服务发现。

9.2_YAML 语法规范

YAML 基本规则

  • 大小写敏感
  • 使用空格缩进(禁用 Tab),推荐 2 空格
  • 列表项以-开头
  • 字典键值对格式:key: value(冒号后需空格)
  • 注释以#开头
  • 特殊字符串可用'"包裹

10_Harbor私有仓库

  • Harbor 是企业级 Docker 镜像仓库,基于官方 Registry 增强,提供 Web UI、RBAC、LDAP 集成、镜像复制、漏洞扫描、审计日志等功能。
  • Harbor 通过docker-compose.yml启动一组容器协同工作。

10.1_Harbor 核心组件

组件功能
nginx反向代理,统一入口
registry存储镜像,处理 push/pull 请求
harbor-core / harbor-uiWeb 界面与 API 服务
harbor-db存储用户、项目、权限等元数据
harbor-jobservice处理异步任务(如跨实例复制)
harbor-log日志收集服务
harbor-portal前端页面(新版本)

10.2_Harbor 安全机制

  • 默认使用 HTTP,但 Docker 客户端默认只信任 HTTPS 仓库。
  • 开发/测试环境可通过配置--insecure-registry允许 HTTP 访问。
  • 生产环境应配置有效 HTTPS 证书。

实验部分

8_镜像的创建

8.1_构建 Apache 镜像

① 准备网站页面

mkdir/opt/apache&&cd/opt/apacheecho"this is test web">index.html

② 编写启动脚本 run.sh

vimrun.sh
#!/bin/bashrm-rf /run/httpd/* /usr/sbin/apachectl -D FOREGROUND

rm -rf /run/httpd/*:清理 httpd 运行时缓存
apachectl -D FOREGROUND:前台运行,确保 PID 1 进程持续,容器不退出

③ 编写 Dockerfile

vimDockerfile
# 基于的基础镜像 FROM centos:7 # 维护镜像的用户信息 MAINTAINER this is apache image <dockerfile@topen.top> # 清空yum源配置文件及缓存 RUN rm -f /etc/yum.repos.d/* # 添加yum镜像源 ADD https://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/ ADD https://mirrors.aliyun.com/repo/epel-7.repo /etc/yum.repos.d/ # 刷新yum缓存 RUN yum clean all && yum makecache # 镜像操作指令安装apache软件 RUN yum -y install httpd # 开启 80端口 EXPOSE 80 # 复制网站首页文件 ADD index.html /var/www/html/index.html # 将执行脚本复制到镜像中 ADD run.sh /run.sh RUN chmod 755 /run.sh # 启动容器时执行脚本 CMD ["/run.sh"]

④ 构建镜像

dockerbuild -t httpd:centos.

-t:指定镜像名称和标签
.:表示 Dockerfile 所在当前目录

⑤ 运行容器

dockerrun -d -p8083:80 httpd:centos

-d:后台运行
-p 8083:80:将宿主机 1216 端口映射到容器 80 端口

⑥ 测试访问

curlhttp://192.168.10.23:1216/

9_Compose编排

9.1_安装 Docker Compose

① 下载并安装

curl-L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname-s`-`uname-m`-o /usr/local/bin/docker-composechmod+x /usr/local/bin/docker-compose

curl -L:跟随重定向下载
`uname -s`-`uname -m`:自动适配操作系统和架构

② 验证版本

docker-compose--version

10_Harbor私有仓库

10.1_部署 Harbor

① 下载离线安装包(略,假设已解压至/usr/local/harbor

② 编辑配置文件

vim/usr/local/harbor/harbor.yml
hostname:192.168.10.23http:port:80data_volume:/data

hostname:Harbor 访问地址(IP 或域名)
http.port:Web UI 监听端口
data_volume:镜像与数据库存储路径

③ 执行安装

cd/usr/local/harbor ./prepare ./install.sh

④ 查看服务状态

docker-composeps

10.2_客户端配置与镜像推送

① 配置 Docker 信任 HTTP 仓库

vim/usr/lib/systemd/system/docker.service

ExecStart行末尾添加:

--insecure-registry 192.168.10.23

② 重启 Docker 服务

systemctl daemon-reload systemctl restartdocker

③ 登录 Harbor

dockerlogin -u admin -p Harbor12345 http://192.168.10.23

④ 打标签并推送镜像

dockertag nginx:latest192.168.10.23/myproject-yjs/nginx:v1dockerpush192.168.10.23/myproject-yjs/nginx:v1

myproject-yjs:Harbor 中已创建的项目名(需提前在 Web UI 创建)


结语

镜像分层:每条 Dockerfile 指令生成一层,缓存机制提升构建效率
前台运行:容器内主进程必须前台运行(PID 1),否则容器退出
Compose 编排:YAML 文件定义多服务,depends_on控制启动顺序
Harbor 安全:HTTP 仓库需显式配置--insecure-registry才能推送

[!question] 为什么 Docker 中的 CentOS 镜像只有 200MB?
因为镜像只需提供 rootfs(基本命令、工具、库),底层直接复用宿主机 kernel,无需包含 bootfs。

[!question] Dockerfile 中 ADD 和 COPY 有什么区别?
ADD 支持 URL 下载和自动解压 tar.gz 等归档文件;COPY 仅复制本地文件,更透明安全。

[!question] 容器运行后修改了文件,删除容器后文件还在吗?
不在。所有修改写入顶层 read-write 层,删除容器即删除该层,修改丢失。

[!question] Harbor 默认使用什么端口提供 Web 服务?
默认 HTTP 端口为 80,可在 harbor.yml 中通过http.port修改。

[!question] Docker Compose 的配置文件默认叫什么?
默认为docker-compose.yml,可通过-f参数或COMPOSE_FILE环境变量指定其他文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 22:10:35

Dify平台儿童睡前故事生成质量评测

Dify平台儿童睡前故事生成质量评测 在智能语音设备走进千家万户的今天&#xff0c;越来越多家长开始通过AI为孩子讲述睡前故事。但问题也随之而来&#xff1a;一个“随机生成”的童话&#xff0c;会不会突然出现怪物吃掉小动物的情节&#xff1f;一段本该温馨的叙述&#xff0c…

作者头像 李华
网站建设 2026/6/18 17:27:04

【紧急预警】Open-AutoGLM与manus兼容性问题频发?一文解决80%常见故障

第一章&#xff1a;Open-AutoGLM与manus兼容性问题概述Open-AutoGLM 是一个面向自动化生成式语言模型任务的开源框架&#xff0c;旨在提升模型在多场景下的适配能力。然而&#xff0c;在与 manus&#xff08;一种常用于工业级文档自动化处理的中间件系统&#xff09;集成过程中…

作者头像 李华
网站建设 2026/6/21 17:52:47

揭秘智谱Open-AutoGLM底层架构:90%的人都不知道的7个隐藏功能

第一章&#xff1a;Open-AutoGLM的诞生背景与核心定位随着大语言模型&#xff08;LLM&#xff09;在自然语言处理领域的广泛应用&#xff0c;自动化任务执行与智能决策系统的需求日益增长。传统模型依赖人工提示工程与固定流程&#xff0c;难以适应复杂多变的应用场景。在此背景…

作者头像 李华
网站建设 2026/6/19 3:21:44

学长亲荐9个AI论文工具,自考学生轻松搞定毕业论文!

学长亲荐9个AI论文工具&#xff0c;自考学生轻松搞定毕业论文&#xff01; 自考路上的得力助手&#xff0c;AI 工具如何帮你轻松应对论文挑战&#xff1f; 对于自考学生来说&#xff0c;毕业论文往往是整个学习过程中最令人头疼的一环。从选题、开题到撰写、降重&#xff0c;每…

作者头像 李华
网站建设 2026/6/21 2:40:54

Open-AutoGLM入门到精通:5步实现全自动大模型调优

第一章&#xff1a;Open-AutoGLM是什么意思Open-AutoGLM 是一个面向自动化自然语言处理任务的开源框架&#xff0c;专注于提升大语言模型在复杂推理与多步任务中的表现。该框架结合了图神经网络&#xff08;GNN&#xff09;与生成式语言模型&#xff08;GLM&#xff09;的优势&…

作者头像 李华
网站建设 2026/6/20 14:45:20

Open-AutoGLM智能体部署难题全解析,99%新手都会忽略的4个关键点

第一章&#xff1a;Open-AutoGLM智能体部署难题全解析在实际生产环境中部署 Open-AutoGLM 智能体时&#xff0c;开发者常面临资源调度、模型加载延迟与服务稳定性等多重挑战。这些问题不仅影响推理效率&#xff0c;还可能导致服务不可用。深入理解其核心瓶颈是实现高效部署的前…

作者头像 李华