记录一下之前单机 Docker 化 NodeJs 服务一些配置。
# 基础镜像
FROM node:alpine
# 设置时区
RUN apk --update add tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata
# 工作目录
WORKDIR /usr/src/app
COPY ./entrypoint.sh /usr/local/bin/
RUN apk --no-cache add curl
# 设置源
RUN npm config set registry https://registry.npm.taobao.org
# 安装 PNPM
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
# 设置脚本可执行
RUN chmod +x /usr/local/bin/entrypoint.sh
version: "3"
services:
gadfly:
build: ./ # 构建路径
image: xxx:v1 # 自定义镜像名称
container_name: xxx_server # 自定义容器名称
command: /bin/sh -c entrypoint.sh # 运行启动脚本
expose:
- 3000
networks:
- nginx_proxy # 为了和其他容器互通而建立的网络
volumes:
- ./:/usr/src/app # 映射文件
networks:
nginx_proxy:
external: true
由于我的是 NestJs ,每次运行前需要 build, 像 EggJs 可以在脚本里判断 node_modules 存在与否来决定是否需要执行依赖安装等操作。
#!/bin/sh
set -e
set -o pipefail
echo "[i] ***** current path *****"
echo `pwd`
echo "[i] ***** pnpm install *****"
pnpm install
echo "[i] ***** building *****"
npm run build
echo "[i] ***** server start *****"
npm run start:prod