个性化阅读
专注于IT技术分析

如何使用单个Dockerfile合并多个基本镜像?

如果你正在使用Docker容器从事大型微服务项目, 则开发周期包括一些阶段。现在, 保持不同码头工人文件在开发的不同阶段使用大量资源会导致冗余, 因为几个项目组件可能包含公用文件。真的不需要单独使用码头工人文件用于构建阶段, 开发阶段, 发布阶段和测试阶段。

在更高版本的Docker中, 它提供了多阶段使用码头工人文件。使用多阶段码头工人文件, 你可以使用多个基本图像以及以前的中间图像层来构建新的图像层。基本上, 它使你可以创建完整的Docker指令层次结构, 这些指令可用于创建具有不同功能的不同镜像集, 但都可以在一个单一的操作中完成docker文件。使用两个命令–从和AS, 尤其是允许你创建多阶段docker文件。它允许你在先前的层之上创建多个图像层, 并且AS命令为中间图像层提供了虚拟名称。最后从在命令docker文件创建实际的最终图像。

在本文中, 我们将看到一个多阶段的示例docker文件以及如何在Docker项目中使用它。

1.创建一个多阶段的dockerfile

首先, 让我们考虑docker文件下面。

#Create the base OS image
FROM python:3 AS base

#Update the OS ubuntu image
RUN apt-get -y update

#Install packages
RUN apt-get -y install firefox \
&& apt-get -y install vim

#Create another image layer on top of base to install requirements
FROM base AS requirements

#Install the requirements
RUN pip3 install -r requirements.txt

#Create an intermediate image layer for testing purpose
FROM requirements as test

#Create the build context
COPY /usr/src/my-app /desktop/my-app

#Test the final app
CMD ["python3", "index.py"]

让我们来看看上面docker文件一步步。

  1. 首先, 我们直接从Docker注册表中提取了python 3基本镜像。还将默认情况下将基本镜像的操作系统设置为Ubuntu。我们为该图像层使用了一个名为” base”的虚拟名称。
  2. 然后, 我们在Ubuntu操作系统上运行apt更新。
  3. 之后, 我们将安装一些基本软件包, 例如Firefox浏览器和vim文本编辑器。
  4. 使用基础镜像, 我们在其之上创建另一个镜像层, 称为” requirements”, 该镜像层从名为” requirements.txt”的单独文件中安装依赖项。
  5. 使用该图像作为基础图像, 我们创建了另一个称为” test”的中间图像层, 该层创建构建上下文并复制文件和目录, 最后运行python应用程序进行测试。

2.创建需求文件

在需求文件中, 我们提到了要安装的依赖项。

flask
pandas
numpy

3.创建index.py文件

我们要运行的主文件, 并在其中指定了dockerfile的 CMD争论是index.py文件。在里面index.py文件中, 我们仅出于说明目的包含打印声明。

print("srcmini")

4.构建Docker镜像

要构建Docker镜像, 我们使用Docker Build命令。

sudo docker build -t sample-image .
建立镜像

建立镜像

5.运行Docker容器

成功构建Docker镜像后, 我们可以使用Docker run命令运行容器。

sudo docker run -it sample-image
运行容器

运行容器

我们可以清楚地看到FROM和AS命令的组合如何帮助我们为所有项目或项目组件创建唯一的层次结构。基本上, 它使我们能够根据组合这些命令的方式来执行图像组件的继承, 包括分层或多重继承。

事实证明, 这非常有用, 因为它使你可以一次完成所有任务docker文件这样就简化了版本管理, 使你可以更好地了解整个项目, 并通过消除在不同镜像中使用相同文件的需求而减少了最终镜像的整体大小, 因为现在只有一个最终镜像。

总而言之, 在本文中, 我们讨论了如何使用Docker多阶段构建来使用和继承多个基础, 以及在单个视图中自定义图像层docker文件.


赞(5)
未经允许不得转载:srcmini » 如何使用单个Dockerfile合并多个基本镜像?

评论 抢沙发

评论前必须登录!