Docker 中心是非常优质的映像源,可帮助你开始构建自己的容器化应用。 你可以下载提供你所需基本功能的映像,然后在它的基础上添加自己的应用程序以创建新的自定义映像。 可以通过编写 Dockerfile 自动执行完成此过程的步骤。
在线上服装商店的场景中,公司决定将 Docker 设定为发展方向。 下一步是确定容器化 Web 应用程序的最佳方式。 该公司计划使用 ASP.NET Core 生成许多应用。 你已经注意到 Docker Hub 具有包含此框架的基础映像。 作为概念证明,你希望从此基本映像开始,并添加一个 Web 应用的代码来创建新的自定义映像。 你还希望此过程可以轻松地重复执行,以便在每次发布 Web 应用的新版本时,都能自动执行此过程。
在本单元中,你将学习如何创建自定义 Docker 映像,以及如何通过编写 Dockerfile 来自动执行此过程。
若要创建包含应用程序的 Docker 映像,通常首先是确定要添加文件和配置信息的基本映像。 确定合适的基础映像的过程通常从 Docker Hub 上的映像搜索开始。 你需要一个已包含应用程序框架以及 Linux 发行版(如 Ubuntu 或 Alpine)的所有实用程序和工具的映像。 例如,如果有想要打包到容器中的 ASP.NET Core 应用程序,则 Microsoft 会发布已包含 ASP.NET Core 运行时且名称为 的映像。
在自定义映像时,可以首先使用具有基本映像的容器,然后再对其进行更改。 更改通常会涉及多种活动,例如将文件从本地文件系统复制到容器,以及运行各种工具和实用程序来编译代码。 完成后,使用 命令将更改保存到新的映像。
手动完成上述过程非常耗时且容易出错。 虽然可以使用脚本语言(例如 Bash)编写此过程,但 Docker 通过 Dockerfile 提供一种更加高效的自动映像创建方式。
Dockerfile 是包含生成映像所需的全部命令的纯文本文件。 Dockerfile 使用专为生成和配置映像设计的最小化脚本语言编写。 它们记录从基础映像开始生成映像所需的操作。
以下示例演示生成 .NET 6.0 应用程序并将其打包为新映像的 Dockerfile。
在此文件中,执行以下操作:
按照约定,应打包为 Docker 映像的应用程序的源代码根目录中通常具有 Dockerfile,且几乎都命名为 。
命令通过运行 Dockerfile 创建新映像。 此命令的语法有多个参数:
- -f 标志指示要使用的 Dockerfile 的名称。
- -t 标志指定要创建的映像的名称,在本示例中为 myapp:v1。
- 最后一个参数 . 为 COPY 命令的源文件提供生成上下文:生成过程中所需的主计算机上的文件集。