周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档
  • 基础

  • 虚拟化

  • Docker

    • 容器生态系统
      • 容器生态系统
        • 鸟瞰容器生态系统
        • 容器核心技术
        • 容器规范
        • 容器 runtime
        • 容器管理工具
        • 容器定义工具
        • Registry
        • 容器 OS
        • 容器平台技术
        • 容器编排引擎
        • 容器管理平台
        • 基于容器的 PaaS
        • 容器支持技术
        • 容器网络
        • 服务发现
        • 监控
        • 数据管理
        • 日志管理
        • 安全性
    • 运行第一个容器
    • Docker安装
    • Docker部署MySQL
    • Docker运行JAR
  • OpenStack

  • 心情杂货

  • 更多
  • Docker
周振林
2025-03-24
目录

容器生态系统

# 容器生态系统

对于像容器这类平台级别的技术,通常涉及的知识范围会很广,相关的软件,解决方案也会很多,初学者往往容易迷失。

那怎么办呢?

我们可以从生活经验中寻找答案。 当我们去陌生城市旅游想了解一下这个城市一般我们会怎么做?

我想大部分人应该会打开手机看一下这个城市的地图:

  1. 城市大概的位置和地理形状是什么?

  2. 都由哪几个区或县组成?

  3. 主要的交通干道是哪几条?

同样的道理,学习容器技术我们可以先从天上鸟瞰一下:

  1. 容器生态系统包含哪些不同层次的技术?

  2. 不同技术之间是什么关系?

  3. 哪些是核心技术哪些是辅助技术?

首先得对容器技术有个整体认识,之后我们的学习才能够有的放矢,才能够分清轻重缓急,做到心中有数,这样就不容易迷失了。

接下来我会根据自己的经验帮大家规划一条学习路线,一起探索容器生态系统。

学习新技术得到及时反馈是非常重要的,所以我们马上会搭建实验环境,并运行第一个容器,感受什么是容器。

千里之行始于足下,让我们从了解生态系统开始吧。

# 鸟瞰容器生态系统

一谈到容器,大家都会想到 Docker。

Docker 现在几乎是容器的代名词。确实,是 Docker 将容器技术发扬光大。同时,大家也需要知道围绕 Docker 还有一个生态系统。Docker 是这个生态系统的基石,但完善的生态系统才是保障 Docker 以及容器技术能够真正健康发展的决定因素。

大致来看,容器生态系统包含核心技术、平台技术和支持技术。

doc15fbca833b27474b972f94dd6845b7da.webp

下面分别介绍。

# 容器核心技术

容器核心技术是指能够让 container 在 host 上运行起来的那些技术。

doc20e7d4db26904893911f1c83bf38dae4.webp

这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry 以及 容器 OS,下面分别介绍。

# 容器规范

容器不光是 Docker,还有其他容器,比如 CoreOS 的 rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含 Docker、CoreOS、Google在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。

doc3e723999fa234c179df8323ce9229a52.webp

目前 OCI 发布了两个规范:runtime spec 和 image format spec。 有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行。这样就保证了容器的可移植性和互操作性。

# 容器 runtime

runtime 是容器真正运行的地方。runtime 需要跟操作系统 kernel 紧密协作,为容器提供运行环境。

如果大家用过 Java,可以这样来理解 runtime 与容器的关系:

Java 程序就好比是容器,JVM 则好比是 runtime。JVM 为 Java 程序提供运行环境。同样的道理,容器只有在 runtime 中才能运行。

doc828f9b07cf9a43b7a25a68045b2256da.webp

lxc、runc 和 rkt 是目前主流的三种容器 runtime。

lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作为 runtime。

runc 是 Docker 自己开发的容器 runtime,符合 oci 规范,也是现在 Docker 的默认 runtime。

rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,因而能够运行 Docker 的容器。

# 容器管理工具

光有 runtime 还不够,用户得有工具来管理容器啊。容器管理工具对内与 runtime 交互,对外为用户提供 interface,比如 CLI。这就好比除了 JVM,还得提供 java 命令让用户能够启停应用不是。

docde64defea0484a71b0837729d256eaa5.webp

lxd 是 lxc 对应的管理工具。

runc 的管理工具是 docker engine。docker engine 包含后台 deamon 和 cli 两个部分。我们通常提到 Docker,一般就是指的 docker engine。

rkt 的管理工具是 rkt cli。

# 容器定义工具

容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。

docae15fb586c4148629d9ca6a55c0d8914.webp

docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。

dockerfile 是包含若干命令的文本文件,可以通过这些命令创建出 docker image。

ACI (App Container Image) 与 docker image 类似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。

# Registry

容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry。

doc04b29856b1614634a2a97ce9b1fce824.webp

企业可以用 Docker Registry 构建私有的 Registry。

Docker Hub(https://hub.docker.com) 是 Docker 为公众提供的托管 Registry,上面有很多现成的 image,为 Docker 用户提供了极大的便利。

Quay.io(https://quay.io/)是另一个公共托管 Registry,提供与 Docker Hub 类似的服务。

# 容器 OS

由于有容器 runtime,几乎所有的 Linux、MAC OS 和 Windows 都可以运行容器。但这不并没有妨碍容器 OS 的问世。

doce2f3f9b758da45b6855c2f4783e4827a.webp

容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。

目前已经存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。

# 容器平台技术

容器核心技术使得容器能够在单个 host 上运行。而容器平台技术能够让容器作为集群在分布式环境中运行。

docccb2fa07db6445f092d1f387afd895b0.webp

容器平台技术包括容器编排引擎、容器管理平台和基于容器的 PaaS。

# 容器编排引擎

基于容器的应用一般会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过 API 对外提供服务。为了保证应用的高可用,每个组件都可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。

大家可以看到,这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群。而这,就是容器编排引擎要干的工作。

所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。

doc59e46798e1094dbb98f9cf139c9285ba.webp

docker swarm 是 Docker 开发的容器编排引擎。

kubernetes 是 Google 领导开发的开源容器编排引擎,同时支持 Docker 和 CoreOS 容器。

mesos 是一个通用的集群资源调度平台,mesos 与 marathon 一起提供容器编排引擎功能。

以上三者是当前主流的容器编排引擎。

# 容器管理平台

容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能,比如 application catalog 和一键应用部署等。

doc4f9b2aed8e804291abb90f1a1704c056.webp

Rancher 和 ContainerShip 是容器管理平台的典型代表。

# 基于容器的 PaaS

基于容器的 PaaS 为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用的开发。

docbb892633b26f4340aee72586f127aba7.webp

Deis、Flynn 和 Dokku 都是开源容器 PaaS 的代表。

# 容器支持技术

下面这些技术被用于支持基于容器的基础设施。

docff9d0bd90f4f4a31a652d738b15a9731.webp

# 容器网络

容器的出现使网络拓扑变得更加动态和复杂。用户需要专门的解决方案来管理容器与容器,容器与其他实体之间的连通性和隔离性。

doc8ffb1598ac70409a86c28a8ad887db78.webp

docker network 是 Docker 原生的网络解决方案。除此之外,我们还可以采用第三方开源解决方案,例如 flannel、weave 和 calico。不同的方案设计和实现方式不同,各有优势和特定,我们可以根据实际需要来选型。

# 服务发现

动态变化是微服务应用的一大特点。当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。容器也会根据 host 的资源使用情况在不同 host 中迁移,容器的 IP 和端口也会随之发生变化。

在这种动态的环境下,必须要有一种机制让 client 能够知道如何访问容器提供的服务。这就是服务发现技术要完成的工作。

服务发现会保存容器集群中所有微服务最新的信息,比如 IP 和端口,并对外提供 API,提供服务查询功能。

docfa62f6186c164e1db95bd6787687264f.webp

etcd、consul 和 zookeeper 是服务发现的典型解决方案。

# 监控

监控对于基础架构非常重要,而容器的动态特征对监控提出更多挑战。

针对容器环境,已经涌现出很多监控工具和方案。

docfa3c299e18104b27b08ac5e102a2e56d.webp

docker ps/top/stats 是 Docker 原生的命令行监控工具。除了命令行,Docker 也提供了 stats API,用户可以通过 HTTP 请求获取容器的状态信息。

sysdig、cAdvisor/Heapster 和 Weave Scope 是其他开源的容器监控方案。

# 数据管理

容器经常会在不同的 host 之间迁移,如何保证持久化数据也能够动态迁移,是 Flocker 这类数据管理工具提供的能力。

doc1a681378bce248c59ae7c72c5abb6ba8.webp

# 日志管理

日志为问题排查和事件管理提供了重要依据。

doc107229c8c137482c82aa49dcfe6f51f1.webp

# 安全性

对于年轻的容器,安全性一直是业界争论的焦点。

doca00ad636696647909dd2edbd89cfce2d.webp

OpenSCAP 能够对容器镜像进行扫描,发现潜在的漏洞。

前面我们已经鸟瞰了整个容器生态系统,对容器所涉及的技术体系有了全面的认识。那我们这本教程会讨论其中的哪些内容呢?

会覆盖容器生态系统 91.6% 的技术!

下一节开始实战,运行我们的第一个容器。

Last Updated: 2025/06/18, 08:59:15
KVM网络配置
运行第一个容器

← KVM网络配置 运行第一个容器→

最近更新
01
Docker安装
06-10
02
Docker运行JAR
06-10
03
Docker部署MySQL
06-10
更多文章>
Copyright © 2019-2025 鲁ICP备19032096号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式