ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 배포 - Dockerfile 작성하기
    Infra/CI-CD 2022. 12. 25. 14:23

    Dockerfile 작성하기

    Node.js 앱을 도커 환경에서 실행하려면 먼저 이미지를 생성하고 그 이미지를 이용해서 컨테이너를 실행한 후 그 컨테이너 안에서 Node.js앱을 실행해야 한다. 그래서 그 이미지를 작성하려면 Dockerfile을 먼저 작성해야 한다. 

     

    즉 Dockerfile은 도커 image를 만들기위한 지시서다.

     

    Dockerfile 명령어

    Dockerfile에 적힌 명령어는 도커 서버에게 무엇을 하라고 알려주는 것이다.

    # 베이스 이미지를 명시해준다.
    FROM baseImage
    
    # 추가적으로 필요한 파일들을 다운로드 받는다.
    RUN command
    
    # 컨테이너 시작시 실행 될 명령어를 명시해준다.
    CMD ["executable"]

     

    FROM

    이미지 생성시 기반이 되는 이미지 레이어이다. <이미지 이름>:<태그> 형식으로 작성 태그를 안붙이면 자동적으로 가장 최신것으로 다운 받는다. 베이스가 되는 이미지로 host(컴퓨터)에 설치될 OS가 주로 해당한다.

    ex) ubuntu:14.04

     

    RUN

    도커이미지가 생성되기 전에 수행항 쉘 명령어 이다.

     

    WORKDIR

    WORKDIR 명령어는 도커파일에서  리눅스의 명령어의 cd와 유사하게 뒤에 오는 모든 명령어(RUN, CMD, COPY,ADD)에 대한 명령을 수행항 작업 디렉토리를 설정한다. 특히 빌드될 이미지에 최상위 디폴트로 존재 하게 될 파일이나 폴더 이름과 COPY해오게 될 파일이나 폴더에 동일한 이름이 있다면, 기존에 파일에 덮어쓰게되는 문제가 생길 수 있으며, 도커파일의 작업의 결과물이 최상위 경로에 존재하게 되면 가독성 또한 좋지 않게 된다. 

    COPY

    도커 클라이언트의 현재 디렉토리에서 파일을 추가한다. WORKDIR를 별도로 지정했다면 로컬에 있는 파일들이 도커 컨테이너로 복사될 때 WORKDIR에 지정한 디렉토리에 복사된다.

     

    CMD

    컨테이너가 시작되었을 때 실행한 실행 파일 또는 셀 스크립트 입니다. 해당 명령어는 DockerFile내 1회만 쓸 수 있다.

     

    이미지를 실행해 컨테이너를 생성할 때 베이스 이미지(레이어)위에 쓰기 가능한 새 레이어("컨테이너 레이어")를 추가한다.

     

    실제 작성한 Dockerfile

    FROM node:10
    
    WORKDIR /usr/src/app
    
    COPY package*.json ./
    
    RUN npm install
    
    COPY ..
    
    EXPOSE 8070
    CMD["node","server.js"]

     

     

    npm install은 무엇인가?

    - npm은 Node.js로 만들어진 모듈을  웹에서 받아서 설치하고 관리해주는 프로그램입니다.

    - npm install은 package.json에 적혀있는 종속성들을 웹에서 자동으로 다운 받아서 설치해주는 명령어이다.

    - 결론적으로 현재 노드 JS앱을 만들때 필요한 모듈을 다운받아서 설치하는 역할을 한다.

     

    "node" "server"는 무엇인가?

    - 노드 웹 서버를 작동시키려면 node+엔트리 파일 이름을 입력해야한다.

     

    정리

    이렇게 Dockerfile을 다 작성한후 docker build . 를 해서 dockerfile에 작성한 내용을 docker 서버에 보내줘서 이미지를 생성한다.

     

     

     

     

    댓글

Designed by Tistory.