使用docker容器化部署nodejs服务
目录
1. 编写 Dockerfile
# 轻量级的 Node.js 18 Alpine 镜像作为基础
FROM node:18-alpine
# 置容器内的工作目录
WORKDIR /usr/src/app
# 先复制 package.json 和 package-lock.json
# 这样可以利用 Docker 缓存,只有当依赖变更时才重新安装,加快构建速度
COPY package*.json ./
# 安装生产环境依赖
RUN npm ci --only=production
# 复制应用源代码
COPY . .
# 声明容器运行时监听的端口
EXPOSE 3000
# 启动应用
CMD ["node", "app.js"]
2. 构建 Docker 镜像
在包含 Dockerfile 的项目根目录下,执行以下命令构建镜像
docker build -t my-express-app .
3. 运行容器并映射上传目录
务必确保宿主机上的 /data/app/xxx/upload 目录已经存在。Docker 不会自动创建宿主机路径,如果目录不存在,容器启动将会失败
# 1. 确保宿主机目录存在
mkdir -p /data/app/xxx/upload
# 2. 运行容器,并将上传目录映射到宿主机
docker run -d \
--name my-express-container \
-p 3000:3000 \
-v /data/app/xxx/upload:/usr/src/app/upload \
my-express-app
参数解析
-d: 后台运行容器。
–name my-express-container: 为容器指定一个名称,方便后续管理。
-p 3000:3000: 将宿主机的 3000 端口映射到容器的 3000 端口。
-v /data/app/xxx/upload:/usr/src/app/upload: 核心配置。将宿主机的 /data/app/xxx/upload 目录挂载到容器内的 /usr/src/app/upload 目录。
左侧:宿主机的绝对路径。
右侧:容器内的路径,必须与 Express 应用中 multer 或其他文件上传中间件配置的存储路径一致。
my-express-app: 之前构建的镜像名称、
也可使用yml文件快速启动
docker-compose.yml 文件详情
version: '3.8'
services:
app:
# 指定 Dockerfile 所在目录,docker compose 会自动构建镜像
build: .
container_name: my-express-container
ports:
- "3000:3000"
volumes:
# 将宿主机上传目录挂载到容器内对应路径
- /data/app/xxx/upload:/usr/src/app/upload
# 可选:设置环境变量,如 NODE_ENV=production
environment:
- NODE_ENV=production
# 可选:容器异常退出时自动重启
restart: unless-stopped
启动
# 1. 确保宿主机上传目录已创建
mkdir -p /data/app/xxx/upload
# 2. 一键构建并启动
docker compose up -d --build
对你有帮助?请作者喝杯咖啡~
支付宝
微信