美文网首页
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