[Docker] Dockerfile 구성하기

 

Docker를 활용한 애플리케이션 배포는 오늘날 많은 개발 환경에서 표준으로 자리 잡고 있습니다. 그 중심에 있는 것이 바로 Dockerfile입니다. 이 글에서는 Dockerfile이 무엇인지, 어떤 식으로 작성하고 사용하는지에 대해 간단히 정리해보겠습니다.

 

Dockerfile이란?

Dockerfile은 Docker 이미지를 빌드하기 위한 스크립트 파일입니다. 이미지 생성 과정에서 실행해야 할 명령들을 순차적으로 기술함으로써, 컨테이너 환경 구성을 자동화할 수 있습니다. 수동으로 설치하고 구성하는 과정을 반복하지 않아도 되므로, 일관성과 재현성이 확보되는 장점이 있습니다.

 

주요 명령어 정리

Dockerfile은 다양한 명령어로 구성됩니다. 자주 사용하는 명령어들을 아래와 같이 정리할 수 있습니다

FROM

이미지의 기반이 되는 베이스 이미지를 지정합니다. 

FROM ubuntu:18.04

해당 명령으로 Ubuntu 18.04를 기반으로 이미지를 생성합니다.

 

RUN

이미지 빌드 과정 중에 실행될 명령어입니다. 보통 패키지를 설치하거나 설정 파일을 수정할 때 사용합니다.

RUN apt-get update && apt-get install -y nginx

 

CMD

컨테이너가 시작될 때 기본적으로 실행할 명령어를 정의합니다. 하나의 Dockerfile에는 하나의 CMD만 유효하며, 여러 번 선언해도 마지막 CMD만 적용됩니다.

CMD ["nginx", "-g", "daemon off;"]

 

EXPOSE

컨테이너가 외부에 공개할 포트를 지정합니다. 이 명령어 자체로 포트를 열진 않지만, 문서화의 의미로 사용됩니다.

EXPOSE 80
 
 

ENV

환경 변수를 설정합니다. 이후 RUN, CMD, ENTRYPOINT 등에서 사용할 수 있습니다.

ENV ENVIRONMENT=production

 

ADD와 COPY

파일이나 디렉터리를 이미지에 복사합니다. COPY는 단순 복사만 가능하지만, ADD는 URL 다운로드와 압축 해제까지 지원합니다.

ADD docker.tar /usr/share/nginx/html

 

ENTRYPOINT

컨테이너가 실행될 때 호출할 명령어를 지정합니다. CMD와 함께 사용하여 인자를 분리해 줄 수 있습니다.

ENTRYPOINT ["/entrypoint.sh"]

 

WORKDIR

작업 디렉터리를 설정합니다. 이후 명령은 이 디렉터리 기준으로 실행됩니다.

WORKDIR /app

 

VOLUME

컨테이너의 특정 디렉터리를 외부 볼륨과 연결합니다. 데이터를 컨테이너 외부와 공유하거나 유지해야 할 경우 유용합니다.

VOLUME /data

 

 

실습 예제

다음은 간단한 Nginx 서버를 Docker로 구성하는 예제입니다.

# STEP 1: 최신 Ubuntu 이미지 사용
FROM ubuntu:latest

# STEP 2: Nginx 설치
RUN apt-get update && apt-get install -y -q nginx

# STEP 3: 정적 파일 복사
ADD docker.tar /usr/share/nginx/html

# STEP 4: Nginx 데몬 실행
CMD ["nginx", "-g", "daemon off;"]

위와 같은 Dockerfile을 작성한 후, 아래 명령어로 이미지를 빌드할 수 있습니다.

docker build -t my-nginx .

그리고 다음과 같이 컨테이너를 실행합니다.

docker run -p 8080:80 my-nginx

웹 브라우저에서 http://localhost:8080에 접속하면 정적으로 구성된 웹 페이지를 확인할 수 있습니다.

 

이런 식으로 Dockerfile을 활용하면, 매번 수작업으로 환경을 설정할 필요 없이 손쉽게 동일한 개발 환경을 재현할 수 있습니다. DevOps나 배포 자동화를 염두에 둔다면, Dockerfile 작성 방법은 꼭 숙지하고 있는게 좋습니다.