docker构建并启动前端完整流程
admin 服务器
docker文件示例代码:
# Use a minimal image for development FROM node:18-alpine # Set working directory inside the container WORKDIR /app # Copy package.json and package-lock.json (or yarn.lock) into the container COPY package.json package-lock.json* ./ # Install the app dependencies with --legacy-peer-deps to bypass the peer dependency conflict RUN npm install --legacy-peer-deps # Copy the rest of the application files into the container COPY . . # Expose the port the app will run on EXPOSE 3000 # Start the Next.js app in development mode CMD ["npm", "run", "dev"]
这段 Dockerfile 用于构建一个基于 Node.js 18 Alpine 版本的容器,并运行一个 Next.js 应用。
逐行解析
1. 选择基础镜像
FROM node:18-alpine
- 使用
node:18-alpine作为基础镜像,alpine是 轻量级 Linux 版本,比node:18体积更小,减少 Docker 镜像的大小。
2. 设置工作目录
WORKDIR /app
- 在 容器内 创建
/app目录,并把它作为 当前工作目录。 - 之后的所有操作都会在
/app目录下执行。
3. 复制package.json和package-lock.json
COPY package.json package-lock.json* ./
- 只复制
package.json和package-lock.json,避免不必要的文件影响npm install缓存。 package-lock.json*这样写是为了:- 兼容
package-lock.json和package-lock.json.gz(如果存在)。
- 兼容
4. 安装依赖
RUN npm install --legacy-peer-deps
npm install安装 Node.js 依赖。--legacy-peer-deps选项用于:- 跳过 peerDependencies(依赖版本冲突时不报错)。
- 适用于 旧项目或有冲突的依赖。
5. 复制项目代码
COPY . .
- 复制 本地所有文件 到 容器的
/app/目录。 - 这里 不会重复安装依赖,因为
npm install早就运行过了。
6. 开放端口
EXPOSE 3000
- 这个 只是声明 容器会使用
3000端口,但默认不会让外部访问。 - 真正让外部访问时,需要
-p参数:这样才能 映射端口,让浏览器访问docker run -p 3000:3000 my-next-app
http://localhost:3000。
7. 运行 Next.js 应用
CMD ["npm", "run", "dev"]
- 容器启动时执行 npm run dev,即 开发模式运行 Next.js。
- 这个命令等价于:
npm run dev
dev脚本通常在package.json里:"scripts": { "dev": "next dev" }- Next.js 开发服务器会在 localhost:3000 运行。
完整流程
- 基于 node:18-alpine 创建一个容器
- 在 /app 目录下工作
- 复制 package.json 并安装依赖
- 复制整个项目代码
- 暴露 3000 端口
- 运行 npm run dev 启动 Next.js 服务器
如何使用
1. 构建镜像
docker build -t my-next-app .
2. 运行容器
docker run -p 3000:3000 my-next-app
然后在浏览器访问:
http://localhost:3000
如果一切正常,你会看到 Next.js 应用的页面!
