Dockerfile 작성하기
도커파일 작성에 대한 문법을 알아봅니다.(참고: ‘도커 교과서’책)
Dockerfile은 애플리케이션을 패키징하기 위한 간단한 스크립트다. Dockerfile은 일련의 인스트럭션으로 구성돼 있는데, 인스트럭션을 실행한 결과로 도커 이미지가 만들어진다.
그리고 여타 스크립트 언어와 마찬가지로 Dockerfile 문법도 매우 유연하다. 자주 쓰이는 작업은 별도의 명령이 마련돼 있으며, 원하는 작업을 직접 작성할 수 있고, 표준 셸 문법도 가능하다.
인스트럭션이란? 컴퓨터는 컴퓨터가 이해할 수 있는 언어인 기계어로 작성된 프로그램을 받아들인 후, 그 지시에 따라 움직인다. 이 기계어 프로그램에서 사용하는 동작 지시가 인스트럭션이다. 인스트럭션은 컴퓨터 프로그램의 기본으로서 컴퓨터의 동작을 지시하는 부호 단위인 셈이다.
아래는 예시 스크립트이다.
FROM diamol/node
ENV TARGET="google.co.kr"
ENV METHOD="HEAD"
ENV INTERVAL="3000"
WORKDIR /web-ping
COPY app.js .
CMD["node", "/web-ping/app.js"]
인스트럭션
- FROM: 모든 이미지는 다른 이미지로부터 출발한다. 이 이미지는 diamol/node 이미지를 시작점으로 지정했다. diamol/node 이미지에는 web-ping 애플리케이션을 실행하는 데 필요한 런타임인 Node.js가 설치돼 있다.
- ENV: 환경 변수 값을 지정하기 위한 인스트럭션이다. 값을 지정하기 위해 [key]=”[value]” 형식을 따른다. 이 스크립트에는 ENV 인스트럭션이 세 번 사용돼 세 개의 환경 변수를 설정했다.
- WORKDIR: 컨테이너 이미지 파일 시스템에 디렉터리를 만들고, 해당 디렉터리를 작업 디렉터리로 지정하는 인스트럭션이다. 리눅스와 윈도우 컨테이너 모두 구분자로 슬래시를 사용한다. 그러므로 스크립트에 나온 인스트럭션은 리눅스 컨테이너에서는 /web-ping 디렉터리를 만들고, 윈도우 컨테이너에서는 C:\web-ping 디렉터리를 만든다.
- COPY: 로컬 파일 시스템의 파일 혹은 디렉터리를 컨테이너 이미지로 복사하는 인스트럭션이다. [원본경로] [복사경로] 형식으로 지정하면 된다. 이 스크립트에서는 로컬 파일 시스템에 있는 app.js 파일을 이미지의 작업 디렉터리로 복사했다.
- CMD: 도커가 이미지로부터 컨테이너를 실행했을 때 실행할 명령을 지정하는 인스트럭션이다. 여기서는 Node.js 런타임이 애플리케이션을 시작하도록 app.js를 지정했다.
- RUN: 빌드 중에 컨테이너 안에서 명령을 실행한 다음 그 결과를 이미지 레이어에 저장하는 기능을 한다. RUN 인스트럭션에서 실행할 수 있는 명령에는 특별한 제한이 없지만, FROM 인스트럭션에서 지정한 이미지에서 실행할 수 있는 것이어야 한다.
- ENTRYPOINT: CMD 인스트럭션과 같은 기능을 하는 인스트럭션이다. 해당 이미지로 컨테이너가 실행되면 도커가 이 인스트럭션에 정의된 명령을 실행한다.
- EXPOSE: 외부로 공개하는 포트번호