Infra/CI-CD

배포 - Dockerfile 작성하기

Surge100 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 서버에 보내줘서 이미지를 생성한다.