美文网首页
NodeJS 构建 Docker精简版镜像

NodeJS 构建 Docker精简版镜像

作者: 简栋梁 | 来源:发表于2020-04-02 14:03 被阅读0次

原理

Docker 多阶段构建

Dockerfile 每条命令,都会添加一层镜像空间。空间层数越多,镜像体积越大。
通过多阶段构建,压缩多层空间,产出单层空间的 Docker镜像。

缺点
不仅构建出核心镜像,同时还会构建出一些依赖型镜像。

精简版 NodeJS 镜像

使用体积更小的 NodeJS 镜像,减去了 NPM,以及其他二进制文件,极大缩小基础体积。

镜像版本 特点
gcr.io/distroless/nodejs 体积小,兼顾安全性
node:x-alpine 体积最小,但是存在兼容性问题

单容器方案

编写 Dockerfile
FROM node:12.13-alpine As development

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --only=development

COPY . .

RUN npm run build

FROM node:12.13-alpine as production

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --only=production

COPY . .

COPY --from=development /usr/src/app/dist ./dist

CMD ["node", "dist/main"]
构建镜像
docker build -t your-app-name .
运行容器
docker run -d -p 3000:3000 --restart=always your-app-name

多容器方案

编写 docker-compose.yml
version: '3.7'

services:
  main:
    container_name: main
    build:
      context: .
      target: development
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - ${SERVER_PORT}:${SERVER_PORT}
      - 9229:9229
    command: npm run start:dev
    env_file:
      - .env
    networks:
      - webnet
    depends_on:
      - redis
      - postgres
  redis:
    container_name: redis
    image: redis:5
    networks:
      - webnet
  postgres:
    container_name: postgres
    image: postgres:12
    networks:
      - webnet
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      PG_DATA: /var/lib/postgresql/data
    ports:
      - 5432:5432
    volumes:
      - pgdata:/var/lib/postgresql/data
networks:
  webnet:
volumes:
  pgdata:
批量启动容器
docker-compose up --build -V

相关文章

网友评论

      本文标题:NodeJS 构建 Docker精简版镜像

      本文链接:https://www.haomeiwen.com/subject/odqvuhtx.html