Coursera 笔记

Module 04 · Create and Deploy Microservices using Serverless

Building Container Images for Microservices构建微服务容器镜像

Coursera ↗

容器与 Docker 简介

什么是容器(Container)?

容器是一个独立的、自包含的、可执行的软件单元。

  • 封装内容: 应用程序的源代码、其库、依赖项和运行时都被打包在容器内。
  • 可移植性: 一旦构建,容器可以在任何设备(笔记本电脑、台式机、本地服务器)或云中运行。
  • 优势: 容器小巧、快速且便携 ,因为与虚拟机(VM)不同,它们不需要为每个实例配备客户操作系统(guest operating system),而是可以利用主机操作系统(host operating system)的特性和资源。
  • 微服务的完美匹配: 微服务的关键要素之一是其计算资源的小巧和隔离性,这使得容器成为微服务架构中此类小型轻量级服务的完美匹配。

什么是 Docker?

Docker 是一个用于将应用程序构建和运行为容器的软件平台。

  • 影响力: Docker 促成了容器化技术的爆炸式增长。
  • 平台: 它提供了一个开源平台,以简单直接的方式构建和运行容器。
  • 行业地位: Docker 是 IBM Cloud Engine 中使用的主要容器技术。
  • 容器镜像: 容器镜像是云引擎应用程序的基础。

构建容器镜像:Dockerfile

容器镜像 vs. 容器

  • 镜像(Image): 是一个不可变的文件,包含应用程序运行所需的所有资产(源代码、库和依赖项)。镜像是只读的;如果更改镜像,则会创建一个新镜像。
    • 类比: 类似于面向对象编程中的类(Class),充当运行中容器的模板。
  • 容器(Container): 是容器镜像的运行实例。当容器镜像被实例化时,我们就得到了一个正在运行的实例,称为容器。

Dockerfile 详解

Dockerfile 充当构建镜像的蓝图(blueprint)。它概述了构建所需容器的所有指令。

您只需编写一个正确的 Dockerfile,Docker 就会处理其余部分。

Dockerfile 指令 作用 示例解析
FROM 指定基础镜像,后续指令将在此基础上构建。基础镜像通常来自公共仓库,如操作系统或特定语言(例如 Python)。 FROM python:3.9-slim
COPY 将文件复制到镜像中的指定文件夹(例如 /app 文件夹)。 COPY . /app
ENV 设置环境变量。 ENV LISTEN_PORT 8080
EXPOSE 指示 Docker 容器在指定端口上侦听流量。 EXPOSE 8080
RUN 执行命令,例如安装所需的 Python 库。 RUN pip install -r requirements.txt
CMD 提供执行容器的默认值。它定义了应在容器中运行的可执行文件。 CMD ["python", "``app.py``"]

📌 注意: 一个 Dockerfile 中只能有一条 CMD 指令。


容器注册表(Container Registry)

容器镜像构建完成后,可以将其推送到容器仓库(Container Repository),以便更好地管理。此仓库称为容器注册表(Container Registry)。

  • 常见注册表: Docker Hub 和 IBM Cloud Container Registry 等。
  • 拉取和使用: 注册表中的容器镜像可以使用唯一的镜像名称轻松拉取和使用。

镜像名称结构

镜像名称由以下三部分组成:

  1. 主机名(Hostname): 标识镜像应推送到的注册表。
  • 示例: icr.io 代表 IBM Container Registry。
  1. 仓库(Repository): 一组相关容器镜像的集合。通常是同一应用程序或服务的不同版本,因此应用程序或服务的名称是一个好的仓库名称。
  2. 标签(Tag): 提供有关镜像的特定版本或变体的信息(例如 v1.0.0 或 latest)。


总结

  • 容器是一个独立的、可执行的软件单元,打包了其所有依赖项。
  • Docker 是一个非常流行的容器构建和运行平台。
  • 您可以编写 Dockerfile 来指示 Docker 平台构建容器镜像。
  • 容器镜像构建完成后,可以推送到容器注册表,然后通过其镜像名称拉取使用。