Dockerfile와 docker-compose.yml 파일의 차이

도커를 생성하셨으면 이제 실제 애플리케이션을 컨테이너화 해야됩니다.

이때 사용되는 파일은 Dockerfile 과 docker-compose.yml 파일입니다.

두 파일 모두 컨테이너화를 위해 사용되는데 서로 다른 목적과 사용 사례를 갖고 있습니다.

 

Dockerfile 이란?

  • 개별 컨테이너 정의 : 단일 도커 이미지를 정의하는데 사용됩니다. 이미지는 컨테이너를 시작하는데 사용되는 템플릿입니다.
  • 컨테이너 빌드 지시사항 : 컨테이너를 빌드하기 위한 지시사항을 포함합니다. 기본 이미지, 작업 디렉토리, 파일 복사, 환경 변수 설정 등을 포함합니다.
  • 단일 서비스 정의 : 사용하면 하나의 서비스 또는 애플리케이션의 컨테이너를 정의합니다. 보통 하나의 Dockerfile은 하나의 애플리케이션을 컨테이너화하기 위해 사용됩니다.

docker-compose.yml 이란?

  • 다중 컨테이너 애플리케이션 정의 : 파일은 다중 컨테이너 애플리케이션의 전체 구성을 정의하는 데 사용됩니다. 여러 서비스 또는 컨테이너를 함께 실행하고 관리할 때 유용합니다.
  • 서비스 간 의존성 관리 : 서비스 간의 읜존성과 상호 작용을 정의합니다. 이를 통해 여러 컨테이너를 함께 시작하고 관리할 수 있습니다.
  • 환경 설정 및 네트워크 구성 : 각 서비스의 환경 변수, 포트 맵핑, 불륨 마운트, 서비스 간의 네트워크 구성 정의 등을 설정할 수 있습니다.

 

그래서 Dockerfile 이랑 docker-compose.yml 파일의 차이가 뭐야?

  • docker-compose.yml 을 통해 다중 컨테이너 애플리케이션을 정의합니다.
  • docker-compose.yml 을 통해 생성되는 컨테이너의 설정은 Dockerfile을 통해 이루어집니다.

즉, docker-compose.yml 을 통해 전체적인 애플리케이션 컨테이너를 생성하고 각 컨테이너의 세부 설정은 Dockerfile을 사용합니다.

 

 

[docker-compose.yml 파일과 각 dockerfile 경로]

docker-compose.yml 의 위치는 1depth 로써, 각 컨테이너(mysql, rabbitmq, kafka) 의 경로에 dockerfile 이 존재합니다.

1depth/
│
└── docker-compose.yml
│
├── mysql/
│   └── Dockerfile_mysql
│
├── rabbitmq/
│   └── Dockerfile_rabbitmq
│
└── kafka/
    └── Dockerfile_kafka

 

 

[docker-compose.yml 예시]

version: '3'  # Docker Compose 파일의 버전 지정

services:  # 각 서비스를 정의합니다.
  mysql:  # 서비스 이름
    image: mysql:latest  # 사용할 도커 이미지
    container_name: mysql-container  # 컨테이너 이름
    environment:  # 환경 변수 설정
      MYSQL_ROOT_PASSWORD: <password>  # MySQL 루트 비밀번호 설정
    ports:  # 포트 매핑
      - "3306:3306"  # 호스트와 컨테이너의 포트를 매핑

  rabbitmq:
    image: rabbitmq:latest
    container_name: rabbitmq-container
    ports:
      - "5672:5672"
      - "15672:15672"

  kafka:
    image: wurstmeister/kafka:latest
    container_name: kafka-container
    ports:
      - "9092:9092"

 

 

결론

  1. docker-compose.yml 을 통해 애플리케이션 컨테이너화를 합니다.
  2. 각 애플리케이션 컨테이너 경로의 dockerfile을 통해 설정을 합니다.

+ Recent posts