[Docker] Dockerfile 사용법

calm0_0·2023년 12월 1일
0

Docker

목록 보기
2/2

Dockerfile


Dockerfile 이란

Dockerfile 이란 Docker 이미지를 만들게 해주는 파일이다.

Dockerfile 예시

Node.js의 Express.js 프로젝트를 Docker 이미지로 만들기 위해 다음과 같이 Dockerfile을 작성하였다.

FROM node:latest

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000
CMD [ "node", "app.js" ]

각 명령문의 의미

FROM: 베이스 이미지 생성

컨테이너에서 사용할 초기 이미지를 지정한다. 이 베이스 이미지를 기반으로 컨테이너에 추가적인 세팅을 할 수 있다.

FROM [이미지명]:[태크명]

FROM node:alpine
FROM ubuntu  

태그명을 적지 않으면 latest 버전을 사용한다.

WORKDIR: 작업 디렉토리 지정

컨테이너의 작업 디레토리로 전환하기 위해 사용한다.

WORK [작업 디렉토리의 절대 경로]

WORKDIR /usr/src/app

WORKDIR 실행 이후에 실행되는 명령문들은 지정한 디렉토리를 기준으로 실행된다.

COPY: 파일 복사

COPY [복사할 파일 경로] [컨테이너에서 파일이 위치할 경로]

COPY package*.json ./

Dockerfile이 위치한 디렉토리를 기준으로 복사할 파일을 지정하여 컨테이너 내부의 해당 경로에 파일을 복사한다.

RUN: 명령문 실행

이미지 생성 과정에서 실행하는 명령어이다.

의존성, 패키지 설치와 같은 명령어를 RUN을 이용해 실행한다.

RUN [명령문]

RUN npm install

CMD: 컨테이너 시작 시 실행되는 명령어

CMD는 컨테이너가 시작할 때마다 실행할 명령어를 설정한다.

Dockerfile에서 한 번만 사용할 수 있다. (여러 개를 사용한다면 마지막 명령만 적용)

CMD ["<파라미터1>", "<파라미터2>"]
CMD <전체 커맨드>

CMD [ "node", "app.js" ]
CMD node app.js

EXPOSE

컨테이너 내부에서 사용 중인 포트를 문서화하는 역할이다.

컨테이너에서 사용할 포트를 지정하는 것은 아니다. 포트를 열어두려면 docker run -p 옵션을 사용해야 한다.

EXPOSE [포트 번호]

EXPOSE 3000

Dockerfile 읽어보기

이제 아까 보았던 예제가 어떻게 구성되어 있는지 확인해보자.

FROM node:latest  # node.js latest 버전을 베이스 이미지로 생성한다

WORKDIR /usr/src/app  # 컨테이너의 작업 디렉토리를 /usr/src/app 설정하고

COPY package*.json ./  # package*.json 을 작업 디렉토리의 현재 경로로 복사하여

RUN npm install  # npm install 명령어로 패키지를 설치한다

COPY . .  # Dockerfile이 위치한 경로의 파일들을 작업 디렉토리의 현재 경로에 복사한다

EXPOSE 3000  # 컨테이너 내부에서 3000번 포트를 활용할 것을 문서화

CMD [ "node", "app.js" ]  # 컨테이너 시작 시 node app.js 명령어를 실행한다.

빌드 및 실행

작성된 Dockerfile 은 다음과 같이 빌드하고 실행할 수 있다.

$ docker build -t hello-server ./  # 현재 경로의 Dockerfile을 빌드
$ docker image ls  # 이미지 생성 확인

$ docker run -d -p 3000:3000 hello-server  # 생성한 이미지를 컨테이너로 실행
$ docker ps  # 컨테이너 실행 확인
profile
공부한 내용들을 정리하는 블로그

0개의 댓글