Dockerfile 是用于创建容器映像的文本文档。它为映像构建器提供有关要运行的命令、要复制的文件、启动命令等的说明。
举例来说,以下 Dockerfile 将生成一个可运行的 Python 应用程序:
FROM python:3.12
WORKDIR /usr/local/app
Install the application dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
Copy in the source code
COPY src ./src
EXPOSE 5000
Setup an app user so the container doesn't run as the root user
RUN useradd app
USER app
CMD [["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]](http://www.hncloud.com)
常用指令
一些最常见的指令包括Dockerfile:
FROM <image>- 这指定了构建将扩展的基础图像。
WORKDIR <path>- 该指令指定“工作目录”或图像中将复制文件和执行命令的路径。
COPY <host-path> <image-path>- 该指令告诉构建器从主机复制文件并将其放入容器映像中。
RUN <command>- 该指令告诉构建器运行指定的命令。
ENV <name> <value>- 该指令设置正在运行的容器将使用的环境变量。
EXPOSE <port-number>- 该指令在图像上设置配置,指示图像想要公开的端口。
USER <user-or-uid>- 该指令为所有后续指令设置默认用户。
CMD "[<command>", "<arg1>"]- 该指令设置使用此映像的容器将运行的默认命令。
要阅读所有说明或了解更多详细信息,请查看 Dockerfile 参考。
尝试一下
正如您在前面的示例中看到的那样,Dockerfile 通常遵循以下步骤:
确定基础映像Determine your base image
安装应用程序依赖项
复制任何相关的源代码和/或二进制文件
配置最终图像
在本快速上手指南中,您将编写一个 Dockerfile 来构建一个简单的 Node.js 应用程序。如果您不熟悉基于 JavaScript 的应用程序,请不要担心。这对于遵循本指南来说不是必需的。
设置
下载此 ZIP 文件并将内容提取到您机器上的目录中。
创建Dockerfile
现在您有了项目,您就可以创建了Dockerfile。
下载并安装Docker Desktop。
Dockerfile在与该文件相同的文件夹中创建一个名为的文件package.json。
Dockerfile 文件扩展名
需要注意的是,没有Dockerfile文件扩展名。有些编辑器会自动为文件添加扩展名(或抱怨没有扩展名)。
在中Dockerfile,通过添加以下行来定义您的基础图像:
FROM node:20-alpine
现在,使用WORKDIR指令定义工作目录。这将指定将来的命令将在何处运行,并且目录文件将在容器映像内复制。
WORKDIR /app
使用以下指令将计算机上项目的所有文件复制到容器映像中COPY:
COPY . .
使用yarnCLI 和包管理器安装应用程序的依赖项。为此,请使用以下RUN指令运行命令:
RUN yarn install --production
最后,使用以下指令指定要运行的默认命令CMD:
CMD ["node", "./src/index.js"]
这样,你应该有以下 Dockerfile:
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "./src/index.js"]
此 Dockerfile 尚未准备好投入生产
值得注意的是,此 Dockerfile 尚未遵循所有最佳实践(按设计)。它将构建应用程序,但构建速度不会像预期的那样快,镜像也不会像预期的那样安全。
继续阅读以了解有关如何使图像最大化构建缓存、以非 root 用户身份运行以及多阶段构建的更多信息。
使用以下方式快速容器化新项目docker init
该docker init命令将分析您的项目并快速创建一个 Dockerfile、一个compose.yaml和一个.dockerignore,帮助您快速启动和运行。由于您在这里专门学习 Dockerfile,因此您现在不会使用它。但是, 请在此处了解更多信息。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。