본문 바로가기

About/Docker

[Docker] Dockerfile에서 RUN과 CMD의 차이점

Docker는 컨테이너화된 어플리케이션을 생성하고 관리하는 데 사용되는 도구입니다. 이 과정에서 Dockerfile이라는 텍스트 문서를 사용하여 컨테이너의 설정과 명령을 정의합니다. Dockerfile 내에서 주로 사용되는 두 가지 지시어는 RUNCMD 입니다. 이 두 지시어의 기능과 사용 방법을 이해하는 것은 Docker 이미지를 효과적으로 구축하는 데 매우 중요합니다.

RUN 지시어

RUN 지시어는 Docker 이미지가 빌드될 때 실행되는 명령어입니다. 이 지시어는 이미지 내에서 소프트웨어 패키지를 설치하거나 설정을 변경하는 데 주로 사용됩니다. RUN 명령은 새로운 레이어를 생성하고, 해당 레이어 위에 변경사항을 적용합니다.

예시:

# Ubuntu 기반 이미지에서 Apache를 설치
FROM ubuntu
RUN apt-get update
RUN apt-get install -y apache2

 

이 예시에서, RUN 명령은 Ubuntu 이미지에 Apache 웹 서버를 설치하는 데 사용됩니다. 각 RUN 명령은 새로운 레이어를 생성하여 이미지에 변경사항을 추가합니다.

CMD 지시어

반면에, CMD 지시어는 Docker 컨테이너가 시작될 때 실행되는 기본 명령어를 정의합니다. CMD는 컨테이너가 실행될 때 한 번만 사용되며, Dockerfile에는 한 개의 CMD 명령만 있어야 합니다. 만약 여러 개의 CMD가 정의되어 있다면, 마지막 CMD만 사용됩니다.

예시:

# Apache를 실행하는 Ubuntu 기반 이미지
FROM ubuntu
RUN apt-get update
RUN apt-get install -y apache2
CMD ["apache2ctl", "-D", "FOREGROUND"]

 

여기서 CMD 명령은 Apache 웹 서버가 포어그라운드 모드로 실행되도록 합니다. 이 명령은 컨테이너가 시작될 때 실행되며, 사용자가 다른 명령을 지정하지 않는 한 기본적으로 사용됩니다.

정리

  • RUN: 이미지 빌드 시 실행되며, 소프트웨어 설치나 설정 변경 등에 사용됩니다. 각 RUN 명령은 새로운 레이어를 생성합니다.
  • CMD: 컨테이너가 시작될 때 실행되는 기본 명령을 정의합니다. Dockerfile에는 하나의 CMD만 있어야 합니다.

 

이러한 차이점을 이해하는 것은 Docker를 사용하여 효율적이고 관리가 용이한 컨테이너를 구축하는 데 중요한 역할을 합니다. Docker의 공식 문서에서는 이러한 지시어들에 대해 더 자세한 정보를 제공합니다(Docker 공식 문서).