nuxt의 가벼운 용기 그림 만들기

주안점


  • distroless 이미지 활용
  • nuxt의 시작은nuxt가 아니라 사용nuxt-start
  • nuxtstandalone를 통해 node 구축modules 감소
  • https://github.com/GoogleContainerTools/distroless
    https://github.com/nuxt/nuxt.js/tree/dev/distributions/nuxt-start
    https://nuxtjs.org/docs/configuration-glossary/configuration-build/#standalone

    절차.


    세그먼트 이미지는 패키지를 사용합니다.따로 제이슨 제작.
    package.runtime.json
    {
      "name": "hoge",
      "version": "1.0.0",
      "dependencies": {
        "nuxt-start": "^2.15.8"
      }
    }
    
    Docker file은 3개의 스테이지로 구성된 다중 스테이지 건물입니다.
    최종 노드modules에는 nuxt-start만 포함되지만distroless 이미지에는 케이스가 없어 RUN 명령을 실행할 수 없기 때문에 설치nuxt-start에만 사용할 레벨을 만듭니다.
    # build-env
    FROM node:16 as build-env
    WORKDIR /app
    
    COPY package.json yarn.lock /app/
    RUN yarn install
    
    COPY . /app
    RUN yarn build --standalone
    
    # install-env
    FROM node:16 as install-env
    WORKDIR /app
    
    COPY package.runtime.json /app/package.json
    COPY yarn.lock /app/
    RUN yarn install --production
    
    # runtime-env
    FROM gcr.io/distroless/nodejs:16
    
    ENV HOST=0.0.0.0
    WORKDIR /app
    COPY --from=build-env /app/.nuxt /app/.nuxt
    COPY --from=install-env /app/node_modules /app/node_modules
    COPY static /app/static
    # srcDir: 'src' の場合でも static は直下
    # COPY src/static /app/static
    
    CMD ["node_modules/nuxt-start/bin/nuxt-start.js"]
    
    이렇게 하면 250MB 정도의 이미지가 100MB로 줄어든다.

    좋은 웹페이지 즐겨찾기