6.2 前端项目容器化

系列 - 应用程序容器化
摘要
本实验将指导你如何将两个不同类型的前端项目(Node.js应用和静态网站)容器化。通过实践,你将学习如何编写Dockerfile、构建Docker镜像以及运行容器,这些都是前端开发中常见的容器化操作。
项目简介
node-bulletin-board是一个简单的公告板应用,使用Node.js和Express框架构建。这个项目将演示如何容器化一个需要运行时环境的JavaScript应用。
Node.js项目基础概念

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,让开发者可以使用JavaScript编写服务器端代码。它使JavaScript从浏览器扩展到了服务器,为前端开发提供了完整的工具链支持。

npm(Node Package Manager)是Node.js的默认包管理工具,用于安装、共享和管理JavaScript代码包。它维护着世界上最大的开源代码库,开发者可以通过简单的命令安装和使用成千上万的第三方库。

package.json是Node.js项目的核心配置文件,记录项目的元数据和依赖关系。它定义了项目所需的各种依赖包及其版本,包含启动、测试、构建等脚本命令,是前端项目容器化过程中的关键文件,容器通常会根据它安装依赖并执行相应的构建命令。

node-bulletin-board 是一个使用 JavaScript 语言构建的项目,执行以下命令使用 git 工具将该项目下载到本地:

bash

git clone https://git.seahi.me/docker/node-bulletin-board

bash

cd node-bulletin-board/bulletin-board-app

创建 Dockerfile 内容如下:

技巧
如果已经有 Dockerfile,先清空内容再添加以下内容

dockerfile

FROM node:6.11.5

WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .

CMD [ "node", "server.js" ]
Dockerfile解析
  • FROM node:6.11.5 - 指定基础镜像,这里使用Node.js 6.11.5版本
  • WORKDIR /usr/src/app - 定义工作目录,后续步骤都在该目录下执行
  • COPY package.json . - 先复制package.json文件到工作目录
  • RUN npm install - 安装项目依赖
  • COPY . . - 复制所有项目文件到工作目录
  • CMD [ "node", "server.js" ] - 定义容器启动时默认执行的命令
为什么先复制package.json再安装依赖?
这是Docker构建的最佳实践之一。通过先复制package.json并安装依赖,可以利用Docker的缓存机制。只有当package.json发生变化时,才会重新执行npm install,否则会使用缓存,大大提高构建速度。

执行以下命令构建Docker镜像:

bash

docker build -t bulletin-board:1.0 .

构建镜像过程

技巧
不使用 -f 参数的话,Docker会默认使用当前目录下名为 Dockerfile 的文件进行构建。如果你的Dockerfile使用了其他名称,可以通过 -f 参数指定,例如:docker build -t 镜像名称:标签 -f 自定义Dockerfile名 .

执行以下命令启动容器:

bash

docker run --name bulletin-board -p 8000:8080 -d bulletin-board:1.0

启动容器

命令参数解析
  • --name bulletin-board: 指定容器名称
  • -p 8000:8080: 端口映射,将宿主机的8000端口映射到容器内的8080端口
  • -d: 后台运行容器
  • bulletin-board:1.0: 使用的镜像名称和标签

打开浏览器访问 http://localhost:8000

浏览器访问结果

信息
Pacman项目是一个纯静态的Web应用,不需要Node.js运行时。这个任务将演示如何容器化一个静态网站,这也是前端项目的另一种常见形式。

执行以下命令克隆Pacman游戏项目:

bash

git clone https://git.seahi.me/docker/pacman

进入项目目录,创建 Dockerfile 文件并添加以下内容:

dockerfile

FROM nginx:alpine
COPY . /usr/share/nginx/html
Dockerfile解析
  • FROM nginx:alpine - 使用轻量级的nginx镜像作为基础镜像,alpine版本体积更小
  • COPY . /usr/share/nginx/html - 将当前目录下的所有文件复制到nginx的默认网站目录
技巧
对于静态网站,使用nginx作为Web服务器是一种常见且高效的方案。nginx:alpine镜像体积小、启动快,非常适合部署静态内容。

执行以下命令构建镜像:

bash

docker build -t pacman:1.0 .

运行容器:

bash

docker run --name pacman -p 8080:80 -d pacman:1.0
命令参数说明
  • --name pacman: 指定容器名为pacman
  • -p 8080:80: 将宿主机的8080端口映射到容器内部的80端口(nginx默认端口)
  • -d: 后台运行容器

在浏览器中打开 http://localhost:8080 查看游戏:

Pacman游戏界面

Vue项目地址:https://git.seahi.me/docker/my-vue-app

1、编写一个Dockerfile,将该Vue应用容器化,要求:

  • 使用多阶段构建
  • 第一阶段编译Vue应用
  • 第二阶段使用nginx部署

2、构建并运行容器,验证应用是否正常工作

提示
1、npm run build 命令将编译后的Vue项目存储在当前目录中的 dist 目录中! 2、参考上节课的分阶段构建和本节课的任务二。
Vue简介
Vue.js是一个流行的JavaScript前端框架,用于构建用户界面和单页应用。它与Node.js生态系统紧密相连,通常使用npm(Node包管理器)安装和管理依赖,并依赖Node.js环境进行开发、构建和打包。

相关内容