Blog Content

    티스토리 뷰

    [Docker] 4. Dockerizing Node.js

    https://www.katacoda.com/courses/docker 사이트에서 학습 후 정리한 내용입니다.


    Dockerizing Node.js applications


    FROM node:10-alpine #어떤 이미지를 빌드할것인지 정의

    WORKDIR /src/app #Create app directory

    #install app dependencies

    COPY package.json /src/app/package.json 

    RUN npm install

    COPY . . #Bundle app source

    EXPOSE 3030

    CMD [ "npm", "start" ]


    1. Base Images

    앞서 살펴봤듯이 모든 이미지는 기본 이미지로 시작되었다.

    Node 10.0 에 대한 이미지는 node:10-alpine이다.

    이것은 공식적인 이미지보다 더 작고 간소화된 알파인 기반의 빌드버전이다.


    Base Image와 함께 어플리케이션이 실행되는 기본 디렉토리를 만들어야 한다.

    RUN <command> : 마치 쉘에서 수행중인 것처럼 명령어를 실행할 수 있다.

    WORKDIR <directory> : 작업중인 디렉토리를 지정할 수 있다.


    FROM node:10-alpine

    WORKDIR /src/app


    2. NPM install

    빌드 시간을 최소한으로 유지하기 위해

    Docker는 Dockerfile에 한 줄의 실행 결과를 캐시하여

    향후 빌드에서 사용한다.

    무엇인가 변경된 경우, Docker는 현재와 모든 행을 무효화하여 모든 것이 최신 상태인지 확인한다.


    NPM을 사용하면 package.json 파일이 변경되었을 경우에만

    npm install로 재실행한다.

    아무 변경이 없으면 캐시된 버전을 사용하여 배포 속도를 높일 수 있다.


    다음 명령어를 Dockerfile에 추가한다.


    COPY package.json /src/app/package.json

    RUN npm install


    만약 캐시를 사용하지 않으려면 -no-cache=true 옵션을 docker build 명령어에 추가한다.


    3. Configuring Application

    dependency들을 설치한 후 나머지 어플리케이션 소스 코드를 복사한다.

    npm install을 실행하기 전에 코드를 복사하면 코드가 변경될 때마다 매번 실행하게 된다.

    package.json만 복사하면 패키지 내용이 변경된 경우에만 실행되도록 한다.

    다음 코드를 Dockerfile에 작성한다.


    COPY . .

    EXPOSE 3030

    CMD [ "npm", "start" ]


    4. Building & Launching Container

    docker build -t my-nodejs-app . : 이미지 빌드

    docker run -d --name my-running-app -p 3000:3000 my-nodejs-app : 빌드된 이미지 실행시키기

    curl http://docker:3000 : curl을 사용해 제대로 접근하고 있는지 테스트해본다.


    5. Environment Variables

    Docker를 사용하면, 컨테이너를 시작할 때 환경 변수를 정의할 수 있다.

    예를 들면 Node.js 응용프로그램에서 production 환경에서 실행하고 싶을 때,

    NODE_ENV를 지정하여 옵션을 줄 수 있다.

    -e 옵션을 사용하여 이름과 값을 -e NODE_ENV = production 과 같이 설정할 수 있다.


    명령어

    docker run -d --name my-production-running-app -e NODE_ENV=production -p 3000:3000 my-nodejs-app

    Comments