如何使用Dockerfile创建容器映像

如何使用Dockerfile创建容器映像

Dockerfile是一个基于文本的文档,用于创建容器映像。它为映像构建器提供有关要运行的命令、要复制的文件、启动命令等的说明。在这篇博客中,我们将介绍如何编写一个Dockerfile来生成一个可立即运行的应用程序容器映像。

Dockerfile 示例

以下是一个简单的Dockerfile示例,它将生成一个可立即运行的Python应用程序:

dockerfile 复制代码
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"]

Dockerfile 通用指令

Dockerfile中一些最常见的指令包括:

  • FROM - 指定构建将扩展的基本图像。
  • WORKDIR - 指定"工作目录"或图像中复制文件和执行命令的路径。
  • COPY - 从主机复制文件并将它们放入容器映像中。
  • RUN - 运行指定的命令。
  • ENV - 设置正在运行的容器将使用的环境变量。
  • EXPOSE - 配置映像要公开的端口。
  • USER - 为所有后续指令设置默认用户。
  • CMD ["", ""] - 设置使用此映像的容器将运行的默认命令。

要通读所有说明或更详细地了解,请查看Dockerfile参考.

快速入门:构建Node.js应用程序的Dockerfile

在这个快速动手指南中,我们将编写一个Dockerfile来构建一个简单的Node.js应用程序。如果您不熟悉基于JavaScript的应用程序,请不要担心,按照以下步骤操作即可。

设置

  1. 下载并解压这个ZIP文件到您的机器上。
  2. 下载并安装Docker Desktop
  3. 在与package.json相同的文件夹中创建一个名为Dockerfile的文件。

创建Dockerfile

在Dockerfile中,通过添加以下行来定义您的基本映像:

dockerfile 复制代码
FROM node:20-alpine

使用WORKDIR指令定义工作目录。这将指定未来命令将在哪里运行,目录文件将被复制到容器映像中:

dockerfile 复制代码
WORKDIR /usr/local/app

使用COPY指令将机器上项目中的所有文件复制到容器映像中:

dockerfile 复制代码
COPY . .

使用yarn CLI和包管理器安装应用程序的依赖项。为此,请使用RUN指令运行命令:

dockerfile 复制代码
RUN yarn install --production

最后,使用CMD指令指定要运行的默认命令:

dockerfile 复制代码
CMD ["node", "./src/index.js"]

有了这些步骤,你应该有以下Dockerfile:

dockerfile 复制代码
FROM node:20-alpine
WORKDIR /usr/local/app
COPY . .
RUN yarn install --production
CMD ["node", "./src/index.js"]

需要注意的是,此Dockerfile尚未遵循所有最佳实践(按设计)。它将构建应用程序,但构建不会像它们可能的那样快,并且图像可能不够安全。以下是一些改进建议:

  1. 使用多阶段构建:减少最终映像的大小。
  2. 缓存依赖项:最大化构建缓存,提高构建速度。
  3. 非root用户运行:提高容器的安全性。
相关推荐
容器魔方39 分钟前
KubeEdge社区2025年需求征集
云原生·容器·云计算
Abdullah al-Sa2 小时前
Docker教程(喂饭级!)
c++·人工智能·docker·容器
web2u2 小时前
Docker入门及基本概念
java·运维·服务器·spring·docker·容器
笑虾2 小时前
Docker 自制镜像:Ubuntu 安装 samba+Webmin
ubuntu·docker·samba
元气满满的热码式3 小时前
Docker实战-使用docker compose搭建博客
运维·docker·容器
哥是黑大帅6 小时前
Docker基于Ollama本地部署大语言模型
python·docker·语言模型
升讯威在线客服系统8 小时前
如何通过 Docker 在没有域名的情况下快速上线客服系统
java·运维·前端·python·docker·容器·.net
Karoku06610 小时前
【CI/CD】CI/CD环境搭建流程和持续集成环境配置
运维·ci/cd·docker·容器·kubernetes·prometheus
Bright166815 小时前
centos9安装k8s集群
云原生·容器·kubernetes
!!!52517 小时前
华为云镜像加速器
docker·容器·华为云