news 2026/4/15 15:01:17

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/4/9 10:27:53

清华大学开源的Open-AutoGLM究竟藏着哪些黑科技?(独家深度拆解)

第一章&#xff1a;清华大学开源的Open-AutoGLM究竟藏着哪些黑科技&#xff1f;&#xff08;独家深度拆解&#xff09;Open-AutoGLM 是清华大学自然语言处理实验室推出的一款面向自动化图学习与生成语言建模融合的开源框架&#xff0c;其核心在于打通图神经网络&#xff08;GNN…

作者头像 李华
网站建设 2026/4/16 11:04:08

Dify平台入职培训内容生成系统设计

Dify平台入职培训内容生成系统设计 在企业数字化转型的浪潮中&#xff0c;人力资源管理正面临前所未有的效率挑战。尤其是新员工入职培训这一环节&#xff0c;传统模式下高度依赖HR人工整理资料、重复回答相同问题、难以个性化适配岗位需求——不仅耗时费力&#xff0c;还容易因…

作者头像 李华
网站建设 2026/4/14 17:18:18

Dify平台感恩日记提示生成功能用户反馈

Dify平台感恩日记提示生成功能用户反馈 在心理健康类产品日益注重“微干预”设计的今天&#xff0c;如何让用户每天愿意打开应用、写下几行文字&#xff0c;成了一道看似简单却极难破解的产品难题。许多用户知道写感恩日记有益情绪调节&#xff0c;但真正能坚持下来的寥寥无几—…

作者头像 李华
网站建设 2026/4/14 4:18:49

10、.NET Windows Forms 控件全解析

.NET Windows Forms 控件全解析 1. 控件基础 在 .NET 中, Form 类代表窗口,是所有其他窗口的基类,而 Control 类则是“具有可视化表示的组件”的基类,屏幕上所有可交互的元素都基于它构建。可以通过继承现有的控件类来创建自定义控件,通常不直接继承 Control 类,…

作者头像 李华
网站建设 2026/4/15 22:07:04

2、.NET编程模型深度解析

.NET编程模型深度解析 1. .NET编程基础概述 在深入了解 .NET 编程之前,我们需要先了解其编程模型,特别是中间语言(IL)。与其他字节码系统不同,IL 是面向对象的(OO)。大多数其他中间代码形式,如 Java 字节码,非常简单,且字节码指令通常直接映射到处理器或虚拟机指令…

作者头像 李华
网站建设 2026/4/16 9:18:13

Open-AutoGLM开源框架部署实战(从环境配置到运行验证)

第一章&#xff1a;Open-AutoGLM开源源码部署教程Open-AutoGLM 是一个基于 AutoGLM 架构的开源项目&#xff0c;旨在提供轻量级、可扩展的大语言模型推理与微调能力。该项目支持本地化部署&#xff0c;适用于科研实验与企业私有化场景。环境准备 部署前需确保系统满足以下基础环…

作者头像 李华