우선 Docker
를 쓴게 막 엄청 오래된건 아니였지만 그래도 나름 한 1년정도는 자주 애용하였다. 그런데 이제 와서 왜 Dockerfile
을 작성하려고 하냐.. 그건 바로 정리되지 않은 지식덕분에 결국엔 구글링을 전부 해본다는게 문제였다.
그래서 오늘은 Dockerfile
작성 방법을 아주 "간단하게" 포스팅 해보려고 한다.
DockerFile 은 도커에서 이용하는 이미지를 기반으로 하여 새로운 이미지를 스크립트 파일(DockerFile) 을 통해 내가 설정한 이미지를 생성할 수 있는 일종의 Image Config 파일이다.
사실 이전에 포스팅 했던 'MS 공식문서로 이해하는 ~~' 시리즈에서 DockerFile에 대한 내용은 어느정도 정리를 해놓았다.
하지만 지금은 진행하고 있는 프로젝트(회사 X) 에서 작성한 DockerFile 에 대한 의미를 파악함과 동시에 작성법을 정리해보려고 한다.
우선 아래는 내가 작성한 DockerFile
이다.
FROM node:12
WORKDIR /app
COPY package*.json ./
RUN echo "Docker Container Start!!"
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
맨 윗줄부터 등장하는 FROM
은 무슨의미일까?
FROM
은 베이스 이미지를 지정하는 것이다. 보통 ubuntu
나 내가 작성한것 처럼 node
도 많이 사용한다.
ubuntu
를 작성하면 OS를 베이스 이미지로 저장한 것이니 베이스가 OS가 될 것이고. 나처럼 node
로 작성한 사람은 베이스 이미지가 node.js 이다. 어떤 환경에서 컨테이너를 만들것인지에 따라 천차만별이고, 나같은 경우는 OS는 필요없이 node
환경 아래서만 작동하는 컨테이너 앱을 만들 예정이여서 node
로 진행하였다.
node
뒤에 나오는 ':' 은 버전을 의미한다.
WORKDIR
은 Instruction 뜻 그대로 '작업 디렉터리' 이다. 이는 쉽게 말하면 Shell
에서 쓰이는 cd
커맨드와 비슷하다. 나는 /app
으로 지정하였으니 컨테이너 내부에 /app
경로에서 작업을 진행하게 된다.
COPY
Instruction 은 Host OS(본인 컴퓨터 운영체제)의 파일 혹은 디렉터리를 컨테이너 안의 경로로 복사하는 것이다.
즉, package.json
파일을 나의 WORKDIR
안에 복사하는 것이다.
RUN
은 위에서 복사한 package.json
파일을 Install 하거나 나처럼 괜히 echo
날리고 싶으면 쓰면 된다..!
이 커맨드는 bin/sh -c
커맨드를 통해 작성된 커맨드(위 예제에서는 npm install
) 를 실행하기 때문에 무조건 Shell
이 있는 플랫폼에서 커맨드를 실행시켜야 한다.
EXPOSE
Instruction 은 띄워진 컨테이너(Run된 컨테이너) 에 접근할 때 외부로 노출시킬 포트를 지정할 때 사용된다. 나는 3000으로 명시했으니 외부에서 컨테이너로 접근할때 3000번 포트를 이용하게 된다.
CMD
는 DockerFile을 이용하여 내가 만든 컨테이너를 시작 시킬때 실행할 커맨드를 지정할 수 있다.
간단하게 $ node index.js
쯤으로 생각하면 된다!
정말 기본적인 커맨드만 나열해보았다. 하지만 다 자주 쓰이는 커맨드이니 잘 숙지하고 있으면 좋을 것 같다.
다음엔 docker-compose
에 대해서 작성하려고 한다!