Dockerfile 是一个文本文档,其中包含组装 Docker 映像的说明。当我们通过执行docker build 命令告诉 Docker 构建我们的镜像时,Docker 会读取这些指令,执行它们,并因此创建一个 Docker 镜像。
让我们来看看为我们的应用程序创建 Dockerfile 的过程。在项目的根目录中,创建一个名为的文件Dockerfile并在文本编辑器中打开该文件。
添加到 Dockerfile 的第一行是# syntax解析器指令。虽然是可选的,但该指令指示 Docker 构建器在解析 Dockerfile 时使用什么语法,并允许启用 BuildKit 的旧 Docker 版本在开始构建之前升级解析器。解析器指令 必须出现在 Dockerfile 中任何其他注释、空格或 Dockerfile 指令之前,并且应该是 Dockerfiles 中的第一行。
# syntax=docker/dockerfile:1
我们建议使用docker/dockerfile:1,它始终指向版本 1 语法的最新版本。BuildKit 在构建之前会自动检查语法的更新,确保您使用的是最新版本。
接下来,我们需要在我们的 Dockerfile 中添加一行,告诉 Docker 我们希望为我们的应用程序使用什么基础镜像。
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
Docker 镜像可以从其他镜像继承。因此,我们将使用官方 Python 镜像,而不是创建我们自己的基础镜像,该镜像已经拥有运行 Python 应用程序所需的所有工具和包。
为了在运行其余命令时更容易,让我们创建一个工作目录。这会指示 Docker 使用此路径作为所有后续命令的默认位置。通过这样做,我们不必输入完整的文件路径,而是可以使用基于工作目录的相对路径。
WORKDIR /app
通常,下载了用 Python 编写的项目后要做的第一件事就是安装pip包。这可确保您的应用程序已安装其所有依赖项。
在我们可以运行之前pip3 install,我们需要将我们的requirements.txt文件放入我们的图像中。我们将使用该COPY命令来执行此操作。该COPY命令有两个参数。第一个参数告诉 Docker 您想要复制到镜像中的文件。第二个参数告诉 Docker 您希望将该文件复制到何处。我们将把requirements.txt文件复制到我们的工作目录中/app。
COPY requirements.txt requirements.txt
一旦我们requirements.txt在图像中拥有我们的文件,我们就可以使用RUN命令来执行命令pip3 install。这与我们在pip3 install本地机器上运行完全相同,但这次模块安装到映像中。
RUN pip3 install -r requirements.txt
此时,我们有一个基于 Python 3.8 版的镜像,并且我们已经安装了我们的依赖项。下一步是将我们的源代码添加到图像中。我们将COPY像使用requirements.txt上面的文件一样使用该命令。
COPY . .
此COPY命令获取位于当前目录中的所有文件并将它们复制到映像中。现在,我们要做的就是告诉 Docker 当我们的镜像在容器内执行时我们想要运行什么命令。我们使用CMD命令执行此操作。请注意,我们需要通过指定使应用程序在外部可见(即从容器外部)–host=0.0.0.0。
CMD [ “python3”, “-m” , “flask”, “run”, “–host=0.0.0.0”]
这是完整的 Dockerfile。
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ “python3”, “-m” , “flask”, “run”, “–host=0.0.0.0”]
Ubuntu是一个以桌面应用为主的Linux操作系统。它是一个开放源代码的自由软件,提供了一个健壮、功能丰富的计算环境,既适合家庭使用又适用于商业环境。Ubuntu将为全球数百个公司提供商业支持。 ...
查看全文Docker采取了一种保守的方法来清理未使用的对象(通常称为“垃圾收集”),例如图像,容器,卷和网络:除非您明确要求Docker这样做,否则通常不会删除这些对象。这可能会导致Docker使用额外的磁盘空...
查看全文新浪科技讯 北京时间5月27日晚间消息,据报道,四位知情人士今日透露,亚马逊、微软和谷歌这三大云计算服务提供商,正在竞争波音公司(Boeing)价值10亿美元的云服务合同。 这些...
查看全文新浪科技讯 北京时间5月27日晚间消息,据报道,多位知情人士今日称,继加州、纽约州和华盛顿州之后,马萨诸塞州和宾夕法尼亚州的总检察长也加入到对亚马逊的反垄断调查中。 如今,越来越...
查看全文
您好!请登录