<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>OpenShift on Snow</title>
        <link>https://SymphonyW.github.io/zh-cn/tags/openshift/</link>
        <description>Recent content in OpenShift on Snow</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Snow</copyright>
        <lastBuildDate>Sat, 08 Aug 2026 18:03:11 +0800</lastBuildDate><atom:link href="https://SymphonyW.github.io/zh-cn/tags/openshift/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Docker、Kubernetes、OpenShift 的关系、特点与区别</title>
        <link>https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/</link>
        <pubDate>Sat, 08 Aug 2026 18:03:11 +0800</pubDate>
        
        <guid>https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/</guid>
        <description>&lt;img src="https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/bg.png" alt="Featured image of post Docker、Kubernetes、OpenShift 的关系、特点与区别" /&gt;&lt;h1 id=&#34;dockerkubernetesopenshift-的关系特点与区别&#34;&gt;Docker、Kubernetes、OpenShift 的关系、特点与区别
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;很多人学习云原生时会先听到 Docker，然后听到 Kubernetes，最后又遇到 OpenShift。三者经常被放在一起讨论，但它们不是同一层面的工具：&lt;strong&gt;Docker 偏应用打包与容器运行，Kubernetes 偏集群编排，OpenShift 则是在 Kubernetes 之上做企业级平台化。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/bg.png&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/bg.png&#34; alt=&#34;Docker、Kubernetes、OpenShift 的关系封面&#34; width=&#34;1600&#34; height=&#34;900&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;177&#34; data-flex-basis=&#34;426px&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;先给出一句话版本：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;工具&lt;/th&gt;
&lt;th&gt;一句话定位&lt;/th&gt;
&lt;th&gt;主要解决的问题&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;容器工具链&lt;/td&gt;
&lt;td&gt;如何把应用和依赖打成镜像，并在单机上稳定运行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kubernetes / K8s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;容器编排平台&lt;/td&gt;
&lt;td&gt;如何在多台机器上调度、发布、扩缩容和自愈容器化应用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenShift&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;企业级 Kubernetes 平台&lt;/td&gt;
&lt;td&gt;如何把 Kubernetes 变成适合多团队、合规、安全、运维和交付的平台&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一三者关系不是替代链而是职责分层&#34;&gt;一、三者关系：不是替代链，而是职责分层
&lt;/h2&gt;&lt;p&gt;很多误解来自一句话：“Kubernetes 替代了 Docker。”这句话不严谨。&lt;/p&gt;
&lt;p&gt;更准确的说法是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; 让开发者更容易构建镜像、运行容器、管理本地开发环境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt; 不关心你必须用 Docker 来构建镜像，它关心的是：集群里应该跑哪些 Pod、跑几个副本、挂什么配置、暴露什么服务、怎么滚动升级。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenShift&lt;/strong&gt; 基于 Kubernetes，并额外提供企业常用的平台能力，比如 Web 控制台、项目隔离、Route、构建流水线、Operator、安全策略、身份认证和平台运维工具。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/relationship-map.png&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/relationship-map.png&#34; alt=&#34;Docker、Kubernetes、OpenShift 职责分层关系图&#34; width=&#34;1600&#34; height=&#34;1050&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;152&#34; data-flex-basis=&#34;365px&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;这里有两个关键点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes 不等于 Docker&lt;/strong&gt;：Kubernetes 通过 CRI（Container Runtime Interface）对接容器运行时，常见运行时包括 &lt;code&gt;containerd&lt;/code&gt;、&lt;code&gt;CRI-O&lt;/code&gt; 等。早期 Kubernetes 曾通过 dockershim 直接集成 Docker Engine，但 dockershim 已从 Kubernetes v1.24 起移除。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenShift 不等于另一个 Kubernetes 替代品&lt;/strong&gt;：OpenShift 仍然是 Kubernetes，底层 API、Pod、Deployment、Service、ConfigMap、Secret 等核心资源都来自 Kubernetes。它的价值在于把 Kubernetes 产品化、平台化、企业化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果用一个分层视角来看：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/platform-layers.png&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/platform-layers.png&#34; alt=&#34;从基础设施到 OpenShift 平台的能力分层&#34; width=&#34;1600&#34; height=&#34;1100&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;145&#34; data-flex-basis=&#34;349px&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二docker把应用装进标准化容器&#34;&gt;二、Docker：把应用装进标准化容器
&lt;/h2&gt;&lt;p&gt;Docker 最核心的价值是把“应用如何运行”标准化。&lt;/p&gt;
&lt;p&gt;传统部署里，一个应用能否跑起来，取决于目标机器是否安装了正确版本的 JDK、Python、Node.js、系统库、配置文件和环境变量。Docker 的思路是：把应用代码、运行时、系统依赖和启动命令一起打包成镜像，然后用这个镜像启动容器。&lt;/p&gt;
&lt;h3 id=&#34;1-docker-的核心概念&#34;&gt;1. Docker 的核心概念
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;概念&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;th&gt;你可以怎么理解&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dockerfile&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;描述镜像如何构建&lt;/td&gt;
&lt;td&gt;一份“环境装配说明书”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image 镜像&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;只读模板，包含运行应用所需文件、依赖和配置&lt;/td&gt;
&lt;td&gt;应用交付包&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container 容器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;镜像的运行实例&lt;/td&gt;
&lt;td&gt;真正在跑的进程环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Registry 镜像仓库&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;存储和分发镜像&lt;/td&gt;
&lt;td&gt;容器镜像的制品仓库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;用一个 YAML 文件定义多容器本地环境&lt;/td&gt;
&lt;td&gt;本地开发环境编排工具&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一个非常典型的 Dockerfile 可能长这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; node:22-alpine&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WORKDIR&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; /app&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;COPY&lt;/span&gt; package*.json ./&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; npm ci --omit&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dev&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;COPY&lt;/span&gt; . .&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;EXPOSE&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; 3000&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;CMD&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;node&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;server.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个文件表达的是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;基于 &lt;code&gt;node:22-alpine&lt;/code&gt; 做基础环境；&lt;/li&gt;
&lt;li&gt;把项目文件复制进去；&lt;/li&gt;
&lt;li&gt;安装依赖；&lt;/li&gt;
&lt;li&gt;声明端口；&lt;/li&gt;
&lt;li&gt;指定容器启动命令。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;开发机、测试环境、生产环境只要运行同一个镜像，运行方式就能大幅一致。&lt;/p&gt;
&lt;h3 id=&#34;2-docker-的特点&#34;&gt;2. Docker 的特点
&lt;/h3&gt;&lt;p&gt;Docker 的优势很明显：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;环境一致&lt;/strong&gt;：镜像包含运行所需依赖，减少“我电脑上可以跑”的问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;交付标准化&lt;/strong&gt;：镜像可以用 Tag、Digest、签名、扫描等方式纳入制品管理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启动快、资源轻&lt;/strong&gt;：容器共享宿主机内核，通常比虚拟机更轻量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地开发体验好&lt;/strong&gt;：Docker Desktop、Docker CLI、Docker Compose 让本地起 MySQL、Redis、Nginx 等依赖非常方便。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生态成熟&lt;/strong&gt;：Docker Hub 和各类镜像仓库提供大量现成基础镜像。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-docker-的边界&#34;&gt;3. Docker 的边界
&lt;/h3&gt;&lt;p&gt;Docker 很适合解决“一个容器怎么构建、怎么运行”的问题，但它不是完整的生产集群平台。&lt;/p&gt;
&lt;p&gt;当应用变成几十个服务、几百个容器、横跨多台服务器时，你还需要回答：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;容器应该调度到哪台机器？&lt;/li&gt;
&lt;li&gt;某台机器挂了，服务如何自动恢复？&lt;/li&gt;
&lt;li&gt;如何让多个副本滚动升级？&lt;/li&gt;
&lt;li&gt;如何做服务发现和负载均衡？&lt;/li&gt;
&lt;li&gt;如何控制配置、密钥、存储、网络策略？&lt;/li&gt;
&lt;li&gt;如何让平台维持“期望状态”？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些就是 Kubernetes 的主场。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三kubernetes让一群容器按期望状态运行&#34;&gt;三、Kubernetes：让一群容器按期望状态运行
&lt;/h2&gt;&lt;p&gt;Kubernetes，常简称 K8s，是容器编排平台。它的核心不是“启动一个容器”，而是“让一组容器化应用在集群中长期稳定运行”。&lt;/p&gt;
&lt;p&gt;Kubernetes 的关键思想是 &lt;strong&gt;声明式 API + 控制循环&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你告诉 Kubernetes：“我希望这个服务永远有 3 个副本，使用这个镜像，对外暴露 80 端口。”Kubernetes 会不断观察真实状态，如果发现只剩 2 个副本，就再拉起 1 个；如果某个节点不可用，就把工作负载调度到其他节点。&lt;/p&gt;
&lt;h3 id=&#34;1-k8s-的核心对象&#34;&gt;1. K8s 的核心对象
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对象&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cluster&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一组运行 Kubernetes 的机器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Node&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;集群中的工作节点，可以是虚拟机或物理机&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pod&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kubernetes 最小调度单元，内部可以包含一个或多个容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;声明无状态应用的副本数、镜像版本和滚动更新策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;为一组 Pod 提供稳定访问入口和服务发现&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingress&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理 HTTP/HTTPS 入口流量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ConfigMap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理非敏感配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Secret&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理密码、Token、证书等敏感信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Namespace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;做资源隔离和命名空间划分&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;下面是一个最简 Deployment：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;apps/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deployment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;replicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;matchLabels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;registry.example.com/team/web:1.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;containerPort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这段 YAML 的意思是：运行 3 个 &lt;code&gt;web&lt;/code&gt; Pod，每个 Pod 里有一个容器，容器镜像是 &lt;code&gt;registry.example.com/team/web:1.0.0&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;2-k8s-的特点&#34;&gt;2. K8s 的特点
&lt;/h3&gt;&lt;p&gt;Kubernetes 的核心能力包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;调度&lt;/strong&gt;：根据资源、亲和性、污点、拓扑等条件，把 Pod 放到合适节点。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自愈&lt;/strong&gt;：容器退出、Pod 异常、节点不可用时，控制器会尝试恢复到期望状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;水平扩缩容&lt;/strong&gt;：通过 HPA 等机制按 CPU、内存或自定义指标扩缩副本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;滚动更新和回滚&lt;/strong&gt;：逐批替换旧版本 Pod，降低发布风险。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务发现&lt;/strong&gt;：Service 为动态变化的 Pod 提供稳定访问入口。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配置和密钥管理&lt;/strong&gt;：ConfigMap 和 Secret 让配置与镜像解耦。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生态开放&lt;/strong&gt;：CNI、CSI、CRI、Ingress Controller、Service Mesh、Operator 等生态组件非常丰富。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-k8s-的边界&#34;&gt;3. K8s 的边界
&lt;/h3&gt;&lt;p&gt;Kubernetes 强大，但它不是“开箱即用的完整企业平台”。裸 Kubernetes 往往还需要你自己选型和集成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;镜像仓库和镜像扫描；&lt;/li&gt;
&lt;li&gt;CI/CD 或 GitOps；&lt;/li&gt;
&lt;li&gt;统一登录和权限模型；&lt;/li&gt;
&lt;li&gt;多租户项目管理；&lt;/li&gt;
&lt;li&gt;监控、日志、告警；&lt;/li&gt;
&lt;li&gt;应用入口网关和证书；&lt;/li&gt;
&lt;li&gt;集群安装、升级、备份和运维；&lt;/li&gt;
&lt;li&gt;安全基线、准入控制、网络策略。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也是为什么很多企业会选择托管 Kubernetes 服务，或者选择 OpenShift 这类更完整的平台。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四openshift把-kubernetes-做成企业级平台&#34;&gt;四、OpenShift：把 Kubernetes 做成企业级平台
&lt;/h2&gt;&lt;p&gt;OpenShift 是 Red Hat 的 Kubernetes 平台。它不是重新发明一套编排系统，而是在 Kubernetes 之上加入一组更“有默认答案”的企业级能力。&lt;/p&gt;
&lt;p&gt;如果说 Kubernetes 是一套强大的“平台内核”，OpenShift 更像是把内核、控制台、权限、网络入口、构建、流水线、安全策略、Operator 和运维能力组合起来，交付给企业内部团队使用。&lt;/p&gt;
&lt;h3 id=&#34;1-openshift-常见能力&#34;&gt;1. OpenShift 常见能力
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力&lt;/th&gt;
&lt;th&gt;Kubernetes 原生情况&lt;/th&gt;
&lt;th&gt;OpenShift 的平台化增强&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web 控制台&lt;/td&gt;
&lt;td&gt;Kubernetes Dashboard 不是核心默认体验&lt;/td&gt;
&lt;td&gt;提供面向开发者和管理员的 Console&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;项目隔离&lt;/td&gt;
&lt;td&gt;Namespace 是基础对象&lt;/td&gt;
&lt;td&gt;Project 在 Namespace 基础上封装更贴近团队使用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;应用入口&lt;/td&gt;
&lt;td&gt;Ingress 需要选择控制器&lt;/td&gt;
&lt;td&gt;Route 是 OpenShift 常用入口模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;身份认证&lt;/td&gt;
&lt;td&gt;可扩展，但需要集成&lt;/td&gt;
&lt;td&gt;通常集成 OAuth、LDAP、OIDC 等企业身份系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;安全约束&lt;/td&gt;
&lt;td&gt;PSA、RBAC、Admission 等能力分散&lt;/td&gt;
&lt;td&gt;SCC、安全默认值和平台策略更强&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;构建镜像&lt;/td&gt;
&lt;td&gt;K8s 本身不负责构建镜像&lt;/td&gt;
&lt;td&gt;常见提供 Build、Source-to-Image、镜像流等能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operator&lt;/td&gt;
&lt;td&gt;Kubernetes 可使用 Operator&lt;/td&gt;
&lt;td&gt;OpenShift 深度使用 Operator 管理平台组件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;运维升级&lt;/td&gt;
&lt;td&gt;需要自己设计流程&lt;/td&gt;
&lt;td&gt;更强调安装、升级、生命周期和 Day-2 运维&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;说明：不同 OpenShift 版本、安装方式和启用组件会有差异，具体能力以实际发行版和官方文档为准。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-openshift-的特点&#34;&gt;2. OpenShift 的特点
&lt;/h3&gt;&lt;p&gt;OpenShift 的典型优势是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;更完整的开箱体验&lt;/strong&gt;：控制台、登录、项目、路由、构建、平台组件管理更统一。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认安全更严格&lt;/strong&gt;：对容器权限、用户、镜像运行方式通常更保守，更适合企业治理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;面向多团队协作&lt;/strong&gt;：Project、RBAC、配额、模板、Operator 等能力更适合平台团队给业务团队供给环境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;企业支持和生命周期管理&lt;/strong&gt;：Red Hat 生态、支持服务、升级路径和认证矩阵对企业很重要。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;混合云与私有化场景友好&lt;/strong&gt;：很多企业需要在本地数据中心、私有云、公有云之间保持一致的平台能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-openshift-的代价&#34;&gt;3. OpenShift 的代价
&lt;/h3&gt;&lt;p&gt;OpenShift 的代价也要说清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;学习曲线更高&lt;/strong&gt;：除了 Kubernetes 概念，还要理解 Route、Project、SCC、BuildConfig、ImageStream 等 OpenShift 组件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;平台更重&lt;/strong&gt;：安装、资源占用、升级流程和权限模型都比本地 Docker 或裸 K8s 复杂。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认约束更多&lt;/strong&gt;：一些在普通 K8s 或 Docker 中能跑的镜像，可能因为 root 用户、特权容器、文件权限等问题在 OpenShift 中被拦下。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成本更高&lt;/strong&gt;：企业订阅、平台运维、人力投入都需要纳入预算。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以 OpenShift 不是“永远比 K8s 更好”，而是更适合有企业级平台需求的团队。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五核心区别对比&#34;&gt;五、核心区别对比
&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/decision-guide.png&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/decision-guide.png&#34; alt=&#34;Docker、Kubernetes、OpenShift 选型速览&#34; width=&#34;1600&#34; height=&#34;1050&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;152&#34; data-flex-basis=&#34;365px&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;更细一点可以这样对比：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;Docker&lt;/th&gt;
&lt;th&gt;Kubernetes&lt;/th&gt;
&lt;th&gt;OpenShift&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;主要定位&lt;/td&gt;
&lt;td&gt;容器工具链&lt;/td&gt;
&lt;td&gt;容器编排平台&lt;/td&gt;
&lt;td&gt;企业级 Kubernetes 平台&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;管理范围&lt;/td&gt;
&lt;td&gt;单机容器、本地开发、镜像构建&lt;/td&gt;
&lt;td&gt;多节点集群、工作负载、服务发现&lt;/td&gt;
&lt;td&gt;K8s 集群 + 企业平台能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最小运行单元&lt;/td&gt;
&lt;td&gt;Container&lt;/td&gt;
&lt;td&gt;Pod&lt;/td&gt;
&lt;td&gt;Pod（基于 K8s）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;配置方式&lt;/td&gt;
&lt;td&gt;Dockerfile、Compose YAML、CLI&lt;/td&gt;
&lt;td&gt;YAML、kubectl、API&lt;/td&gt;
&lt;td&gt;YAML、oc CLI、Console、Operator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否负责镜像构建&lt;/td&gt;
&lt;td&gt;是，核心能力之一&lt;/td&gt;
&lt;td&gt;不负责，通常外接 CI/CD&lt;/td&gt;
&lt;td&gt;常见内置或集成构建能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否负责集群调度&lt;/td&gt;
&lt;td&gt;不擅长&lt;/td&gt;
&lt;td&gt;是，核心能力&lt;/td&gt;
&lt;td&gt;是，基于 K8s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否适合本地开发&lt;/td&gt;
&lt;td&gt;很适合&lt;/td&gt;
&lt;td&gt;可用但偏重&lt;/td&gt;
&lt;td&gt;通常偏重&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否适合生产多节点&lt;/td&gt;
&lt;td&gt;需要配合其他系统&lt;/td&gt;
&lt;td&gt;适合&lt;/td&gt;
&lt;td&gt;很适合企业生产&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;默认安全治理&lt;/td&gt;
&lt;td&gt;基础能力&lt;/td&gt;
&lt;td&gt;能力丰富但需要设计&lt;/td&gt;
&lt;td&gt;默认更强、更有约束&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;典型用户&lt;/td&gt;
&lt;td&gt;开发者、测试、单机部署&lt;/td&gt;
&lt;td&gt;平台工程师、SRE、云原生团队&lt;/td&gt;
&lt;td&gt;企业平台团队、运维、安全、业务团队&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;生态开放性&lt;/td&gt;
&lt;td&gt;容器生态成熟&lt;/td&gt;
&lt;td&gt;CNCF 生态核心&lt;/td&gt;
&lt;td&gt;K8s 生态 + Red Hat 生态&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六一条完整链路里它们怎么配合&#34;&gt;六、一条完整链路里它们怎么配合
&lt;/h2&gt;&lt;p&gt;实际生产环境里，三者不是非此即彼，常常会同时出现。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/workflow.png&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/docker-k8s-openshift/workflow.png&#34; alt=&#34;Docker 打包、K8s 调度、OpenShift 平台化的典型交付链路&#34; width=&#34;1600&#34; height=&#34;900&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;177&#34; data-flex-basis=&#34;426px&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;一个典型流程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;开发者写代码和 &lt;code&gt;Dockerfile&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;本地用 Docker 或 Docker Compose 调试服务。&lt;/li&gt;
&lt;li&gt;CI 系统执行 &lt;code&gt;docker build&lt;/code&gt;、&lt;code&gt;buildx&lt;/code&gt;、BuildKit，或者 OpenShift 的 Source-to-Image 构建镜像。&lt;/li&gt;
&lt;li&gt;镜像推送到 Harbor、Quay、Docker Hub、GitHub Container Registry 等仓库。&lt;/li&gt;
&lt;li&gt;Kubernetes 使用 Deployment、StatefulSet、Job 等资源部署镜像。&lt;/li&gt;
&lt;li&gt;Service、Ingress 或 OpenShift Route 提供访问入口。&lt;/li&gt;
&lt;li&gt;OpenShift Console、Operator、监控、日志、GitOps、权限和安全策略负责平台化治理。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以你可以这样记：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Docker：把应用变成标准镜像
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Kubernetes：把镜像变成集群中的稳定服务
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenShift：把 Kubernetes 变成企业内部可治理、可交付、可运维的平台
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;七常见误区&#34;&gt;七、常见误区
&lt;/h2&gt;&lt;h3 id=&#34;1-kubernetes-不支持-docker-了所以-docker-没用了&#34;&gt;1. “Kubernetes 不支持 Docker 了，所以 Docker 没用了？”
&lt;/h3&gt;&lt;p&gt;不是。&lt;/p&gt;
&lt;p&gt;Kubernetes 移除的是对 Docker Engine 的特殊直接集成 dockershim，不是拒绝 Docker 构建出来的镜像。只要镜像符合 OCI / Docker 镜像格式，Kubernetes 仍然可以通过 containerd、CRI-O 等运行时拉取并运行。&lt;/p&gt;
&lt;p&gt;换句话说：&lt;strong&gt;你仍然可以用 Docker 构建镜像，只是 Kubernetes 节点不一定用 Docker Engine 来运行容器。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-docker-compose-可以替代-kubernetes-吗&#34;&gt;2. “Docker Compose 可以替代 Kubernetes 吗？”
&lt;/h3&gt;&lt;p&gt;看场景。&lt;/p&gt;
&lt;p&gt;Docker Compose 很适合本地开发、Demo、小型单机部署。它能把多个容器、网络、卷统一写进一个 &lt;code&gt;compose.yaml&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;但 Compose 不擅长处理多节点调度、故障自愈、滚动升级、服务发现、集群权限、多租户和复杂网络策略。如果你需要生产级多节点平台，Kubernetes 更合适。&lt;/p&gt;
&lt;h3 id=&#34;3-openshift-就是-kubernetes-换皮吗&#34;&gt;3. “OpenShift 就是 Kubernetes 换皮吗？”
&lt;/h3&gt;&lt;p&gt;也不是。&lt;/p&gt;
&lt;p&gt;OpenShift 基于 Kubernetes，但它不是只加了一个 UI。它还提供安装、升级、身份、权限、项目、路由、构建、镜像流、安全约束、Operator 管理和平台运维等大量工程能力。对企业来说，这些“周边工程”往往比 Kubernetes 内核本身更耗时。&lt;/p&gt;
&lt;h3 id=&#34;4-学-openshift-前必须精通-docker-和-k8s-吗&#34;&gt;4. “学 OpenShift 前必须精通 Docker 和 K8s 吗？”
&lt;/h3&gt;&lt;p&gt;不必等到“精通”，但建议按这个顺序建立心智模型：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先理解容器、镜像、Dockerfile；&lt;/li&gt;
&lt;li&gt;再理解 Pod、Deployment、Service、Ingress、ConfigMap、Secret；&lt;/li&gt;
&lt;li&gt;最后理解 OpenShift 的 Project、Route、SCC、Build、Operator、Console。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样学 OpenShift 时就不会把平台增强能力和 Kubernetes 原生能力混在一起。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;八怎么选型&#34;&gt;八、怎么选型
&lt;/h2&gt;&lt;p&gt;可以用这张表做初步判断：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;推荐选择&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;本地开发需要快速启动数据库、缓存、中间件&lt;/td&gt;
&lt;td&gt;Docker / Docker Compose&lt;/td&gt;
&lt;td&gt;轻量、简单、开发体验好&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;单机部署一个小服务&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;成本低，维护简单&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多服务、多副本、多节点生产部署&lt;/td&gt;
&lt;td&gt;Kubernetes&lt;/td&gt;
&lt;td&gt;编排、自愈、服务发现、扩缩容能力完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;团队已有 K8s 能力，希望保持最大开放性&lt;/td&gt;
&lt;td&gt;Kubernetes&lt;/td&gt;
&lt;td&gt;生态通用，云厂商和社区支持广&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;企业内部要给多个团队提供统一应用平台&lt;/td&gt;
&lt;td&gt;OpenShift&lt;/td&gt;
&lt;td&gt;权限、租户、安全、控制台、运维能力更完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;强合规、私有化、混合云、需要厂商支持&lt;/td&gt;
&lt;td&gt;OpenShift&lt;/td&gt;
&lt;td&gt;更强调企业支持、生命周期和安全治理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;只是学习容器基础&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;先掌握镜像和容器，再上 K8s 更顺&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果你是个人开发者或小团队，通常从 Docker 开始，再学习 Kubernetes。等到团队规模、生产复杂度、安全合规和平台治理需求上来，再评估 OpenShift。&lt;/p&gt;
&lt;p&gt;如果你是企业平台团队，问题可能不是“要不要 Kubernetes”，而是“我们是自己拼一套 Kubernetes 平台，还是采用 OpenShift 这类更完整的企业发行版”。这时要重点比较：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;平台团队人数和能力；&lt;/li&gt;
&lt;li&gt;安全合规要求；&lt;/li&gt;
&lt;li&gt;集群规模和升级频率；&lt;/li&gt;
&lt;li&gt;业务团队自助使用诉求；&lt;/li&gt;
&lt;li&gt;预算和厂商支持需求；&lt;/li&gt;
&lt;li&gt;对开源灵活性和产品约束的接受程度。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;九总结&#34;&gt;九、总结
&lt;/h2&gt;&lt;p&gt;把三者放在一张图里：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;应用源码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Dockerfile / docker build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;容器镜像
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Kubernetes Pod / Deployment / Service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenShift Project / Route / Console / Operator / 安全治理
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;最终结论：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Docker 是容器入口&lt;/strong&gt;：让应用可打包、可复制、可运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes 是编排核心&lt;/strong&gt;：让容器化应用在集群中按期望状态运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenShift 是企业平台&lt;/strong&gt;：让 Kubernetes 更适合大规模、多团队、强治理的生产环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;学云原生时，最重要的不是背工具名，而是看清每一层解决的问题。只要记住“Docker 管容器，K8s 管集群，OpenShift 管平台”，三者的关系就很清楚了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/get-started/docker-overview/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker Docs: What is Docker?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-an-image/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker Docs: What is an image?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://kubernetes.io/docs/concepts/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kubernetes Documentation: Concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://kubernetes.io/docs/setup/production-environment/container-runtimes/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kubernetes Documentation: Container Runtimes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://kubernetes.io/blog/2022/02/17/dockershim-faq/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kubernetes Blog: Dockershim Removal FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.redhat.com/en/documentation/openshift_container_platform/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Red Hat Documentation: OpenShift Container Platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
