Module 04 · Create and Deploy Microservices using Serverless
Building Container Images for Microservices构建微服务容器镜像
容器与 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 等。
- 拉取和使用: 注册表中的容器镜像可以使用唯一的镜像名称轻松拉取和使用。
镜像名称结构
镜像名称由以下三部分组成:
- 主机名(Hostname): 标识镜像应推送到的注册表。
- 示例:
icr.io代表 IBM Container Registry。
- 仓库(Repository): 一组相关容器镜像的集合。通常是同一应用程序或服务的不同版本,因此应用程序或服务的名称是一个好的仓库名称。
- 标签(Tag): 提供有关镜像的特定版本或变体的信息(例如
v1.0.0或latest)。

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