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 작성 방법은 꼭 숙지하고 있는게 좋습니다.
'Infra' 카테고리의 다른 글
[Kubernetes] Kubernetes Deployment 이해하기 (0) | 2025.07.15 |
---|---|
[Kubernetes] Kubernetes란 무엇인가? (0) | 2025.07.15 |
[Kubernetes]Kubernetes 설치 및 설정 (rocky8 Linux 기준) (1) | 2025.07.09 |
[Docker] Docker 명령어 정리 (1) | 2025.07.01 |
[Docker] Docker와 Container에 대해 이해하기 (0) | 2025.06.30 |