본문 바로가기
DevOps

DockerFile 작성하기

by 이곳느 2021. 12. 28.

DockerFile 동작

서론

우선 Docker 를 쓴게 막 엄청 오래된건 아니였지만 그래도 나름 한 1년정도는 자주 애용하였습니다. 그런데 이제 와서 왜 Dockerfile 을 작성하려고 하냐.. 그건 바로 정리되지 않은 지식덕분에 결국엔 구글링을 전부 해본다는게 문제였습니다.

그래서 오늘은 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 은 무슨의미일까요?

FROM 은 베이스 이미지를 지정하는 것입니다. 보통 ubuntu 나 node로 많이 사용합니다.

ubuntu 를 작성하면 OS를 베이스 이미지로 저장한 것이니 베이스가 OS가 될 것이고. 위 처럼 node 로 작성한 사람은 베이스 이미지가 node.js 입니다.

어떤 환경에서 컨테이너를 만들것인지에 따라 천차만별이고, 저 같은 경우는 OS는 필요없이 node 환경 아래서만 작동하는 컨테이너 앱을 만들 예정이여서 node 로 진행하였습니다.

node 뒤에 나오는 ':' 은 버전을 의미합니다.

WORKDIR

WORKDIR 은 Instruction 뜻 그대로 '작업 디렉터리' 입니다. 이는 쉽게 말하면 Shell 에서 쓰이는 cd 커맨드와 비슷합니다. 저는 /app 으로 지정하였으니 컨테이너 내부에 /app 경로에서 작업을 진행하게 되겠죠?

COPY

COPY Instruction 은 Host OS(본인 컴퓨터 운영체제)의 파일 혹은 디렉터리를 컨테이너 안의 경로로 복사하는 것입니다.

즉, package.json 파일을 나의 WORKDIR 안에 복사하는 것입니다.

RUN

RUN 은 위에서 복사한 package.json 파일을 Install 하거나 echo 등으로 로그를 남기고 싶다던지 등등 커맨드 명령을 실행하고 싶으면 쓰면 됩니다.

이 커맨드는 bin/sh -c 커맨드를 통해 작성된 커맨드(위 예제에서는 npm install ) 를 실행하기 때문에 무조건 Shell 이 있는 플랫폼에서 커맨드를 실행시켜야 합니다.

EXPOSE

EXPOSE Instruction 은 띄워진 컨테이너(Run된 컨테이너) 에 접근할 때 외부로 노출시킬 포트를 지정할 때 사용됩니다. 저는 3000으로 명시했으니 외부에서 컨테이너로 접근할때 3000번 포트를 이용하게 됩니다.

CMD

CMD 는 DockerFile을 이용하여 내가 만든 컨테이너를 시작 시킬때 실행할 커맨드를 지정할 수 있습니다.

간단하게 $ node index.js 쯤으로 생각하면 됩니다.