[DevOps] DockerFile 작성하기

Song-YunMin·2021년 7월 27일
1

DevOps

목록 보기
9/9
post-thumbnail

서론

우선 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 쯤으로 생각하면 된다!

후기

정말 기본적인 커맨드만 나열해보았다. 하지만 다 자주 쓰이는 커맨드이니 잘 숙지하고 있으면 좋을 것 같다.

다음엔 docker-compose 에 대해서 작성하려고 한다!

profile
고독한 서버 개발 3년차

0개의 댓글