构建和更新 Docker 容器:面向初学者的实用动手指南

发布: (2025年12月12日 GMT+8 02:56)
5 min read
原文: Dev.to

Source: Dev.to

介绍

在当今快速发展的开发环境中,一致性和可移植性至关重要。应用程序必须能够在不同的机器、环境,甚至云端可靠运行。Docker 通过将应用程序及其依赖打包成 容器,确保它在任何地方的行为都保持一致。

在本实战指南中,你将学习如何将一个简单的 Node.js “Todo List” 应用容器化。你不需要事先了解 Node.js——重点是理解 Docker 如何构建、打包和运行应用。

完成本教程后,你将能够:

  • 使用 Dockerfile 构建 Docker 镜像
  • 在容器中运行你的应用
  • 将应用暴露到本地主机
  • 理解镜像、容器和层之间的交互

前置条件

确保已安装以下工具:

  • Docker Desktop(最新版本)
  • Git(用于克隆示例应用)
  • VS Code 或其他代码编辑器

这些工具可以帮助你顺畅地构建和运行容器。

步骤 1:准备应用

在 VS Code 中打开一个新文件夹,并命名为 container

文件夹视图

在该文件夹中打开终端。

终端视图

克隆示例 Node.js 应用:

git clone https://github.com/docker/getting-started-app.git

你会看到如下文件结构:

getting-started-app/
│── .dockerignore
│── package.json
│── README.md
│── spec/
│── src/
└── yarn.lock

文件结构

这就是你即将容器化的源代码。

步骤 2:创建 Dockerfile

getting-started-app 文件夹内,创建一个名为 Dockerfile 的文件并添加以下内容:

Dockerfile 示例

# syntax=docker/dockerfile:1

FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

说明

  • FROM – 选择一个轻量级的 Node.js 基础镜像
  • WORKDIR – 设置容器内的工作目录
  • COPY – 将你的源代码复制到容器中
  • RUN – 安装生产环境依赖
  • CMD – 定义启动应用的命令
  • EXPOSE – 声明应用监听的端口

步骤 3:构建 Docker 镜像

切换到项目文件夹:

cd /path/to/getting-started-app

切换到文件夹

构建镜像:

docker build -t getting-started .

Docker 构建输出

发生了什么:

  • Docker 下载 Node.js 基础镜像(如果本地不存在)
  • 将你的应用文件复制进镜像
  • 安装依赖
  • 将所有内容打包成名为 getting-started 的 Docker 镜像

步骤 4:运行容器

启动容器:

docker run -d -p 127.0.0.1:3000:3000 getting-started

参数说明

  • -d – 让容器在后台运行(分离模式)
  • -p HOST:CONTAINER – 将容器的 3000 端口映射到本地主机的 3000 端口

在浏览器中访问 http://127.0.0.1:3000。你的 Todo List 应用应该已经运行。添加任务、标记完成,观察一切如何在容器内部工作。

步骤 5:验证运行中的容器

检查哪些容器处于活动状态:

docker ps

你会看到容器 ID、镜像名称、端口映射和状态——这表明你的应用已在运行。

步骤 6:更新应用

假设你想把 “empty text” 提示改为:

You have no todo items yet! Add one above!

编辑 src/static/js/app.js,将第 56 行改为:

- No items yet! Add one above!
+ You have no todo items yet! Add one above!

编辑代码

使用更新后的代码重新构建 Docker 镜像:

docker build -t getting-started .

使用新镜像启动一个容器:

docker run -d -p 127.0.0.1:3000:3000 getting-started

现在,你的更改已经在运行中的应用中生效。

Back to Blog

相关文章

阅读更多 »