容器化

目的

  • 节省时间和成本(简化部署和配置)

    容器化的优势

  • 无需配置配置、操作系统和软件

  • 彼此隔离,同一硬件多个容器,高效利用技能,提高安全性
  • 最大的兼容性

    传统解决方案中的挑战

  • 环境的管理(网络、数据、配置、安全性等)

  • 交付的连续性(所有依赖项都要匹配)
  • 硬件的高效利用
  • 可移植性

    基本概念

  • 容器 -> 松散隔离的环境,可生成和运行软件包

  • 映像 -> 用于分发应用程序的单位
  • Docker -> 容器化平台,不使用虚拟机,多操作系统支持

Docker 映象工作原理

image.png

软件

容器中的软件包括应用程序、系统包、二进制文件、库、配置文件和操作系统

容器映像

可移植程序包

  • 运行时成为容器,容器是映像的实例
  • 无法修改,只能创建新映像

    容器操作系统

    映像包含的操作系统,独立于主机操作系统

    Unionfs 可堆叠的统一文件系统

    image.png

    基础映像 scrath

    空映像

    父级映像

    用于创建映像的容器映像

    Dockerfile

  • 创建映像

  • 更新基础操作系统 / 安卓软件
  • 要包含的应用程序
  • 要公开的服务
  • 启动容器时运行的命令
  • ENTRYPOINT -> 映像运行后容器执行的进程

管理 Docker 映像

可通过 Docker CLI 来管理映像,包括生成、列出、删除和运行映像

  • docker build 根据 dockerfile 的定义来生成映像
  • 映像标记 {imageName}:{tag} 用 tag 进行版本设置
  • docker images 列出注册表中的映像
  • docker rmi 在注册表中删除映像

管理 Docker 容器

image.png
docker ps 列出正在运行的容器
docker run 运行容器
docker pause 暂停容器
docker restart 重启容器
docker stop 停止容器
docker rm 删除容器

Docker 容器存储配置

临时容器存储数据

  • 临时的,删除容器时数据一并销毁
  • 与底层主机耦合
  • 驱动程序性能较低

    保持数据

    使用卷

  • 主机上的特定文件夹,其中的数据只由 Docker 进程修改

  • docker volume create
  • 卷装载后将与主机隔离
  • 多个容器可以使用同一个卷
  • 容器停止使用卷,不会自动删除卷

绑定装载

  • 主机上的任意文件和文件夹
  • 主机可以修改装载的内容

Docker 容器网络配置

  1. 桥接网络
    • 内部专用网络,与主机网络隔离
    • 每个容器都分配一个 IP 和子网掩码
    • —publish 80:8080 端口 80 映射到主机端口 8080
  2. 主机网络
  3. 无网络

Docker 特性

Docker 是用于运行容器化应用的工具

容器化应用包括应用和文件系统,这些要素组成其运行的环境。 例如,容器化应用可以包含数据库和其他关联的软件以及运行该应用所需的配置信息。

容器化应用通常拥有更小的内存占用

虚拟机必须支持整个操作系统和相关的支持环境
Docker 容器则没有此负担,因为 Docker 使用主计算机的操作系统内核来支持容器
下载并启动 Docker 映像通常比下载和运行提供相似功能的虚拟机要更快且更省空间

创建容器化应用

通过生成包含 Docker 使用的一组文件和一系列配置信息的映像来创建容器化应用
通过要求 Docker 启动基于映像的容器来运行应用
容器启动时,Docker 使用映像配置来决定容器内运行的应用程序
Docker 提供操作系统资源和必要的安全性以确保并发运行的容器保持相对隔离

Docker 的优点

  • 容器不需要使用虚拟机,节省资源用于其他容器

image.png

  • 同一主机运行多个容器而互相隔离

image.png

  • 在任何地方运行,利用运行时兼容性
  • 轻量化,顺利且快速地重新部署和扩展缩减
  • 开发和运维标准化交付格式,适合持续集成
  • 安装、更新和删除应用程序不影响其他容器
  • 云原生支持

Docker 的缺点

  • 容器共享操作系统内核
  • 需要在存储和网络配置方面确保安全性
  • 管理更加复杂,难以监视容器内部服务的详情


Linux 和 Windows Docker 映像

单个 Docker 映像可以基于 Windows,也可以基于 Linux,但不能同时基于两者

Docker 注册表

在注册表中可以存储和提供 Docker 映像。 注册表是 Web 服务,Docker 可以连接到它以上传和下载容器映像
注册表被整理为一系列存储库。 每个存储库都包含多个 Docker 映像,这些映像共享一个公用名,通常具有相同的用途和功能。 但这些映像通常具有不同的版本,可通过标记进行识别