본문 바로가기
Docker

[Docker] Docker Compose 는 무엇인가

by yonikim 2024. 1. 7.
728x90

 

Docker Compose 란?


Docker Compose 는 여러개의 도커 컨테이너를 정의하고 실행하기 위한 도구이다.

Docker Compose 를 사용하면 복잡한 멀티 컨테이너 도커 애플리케이션을 쉽게 관리할 수 있다. 여러개의 서비스가 함께 동작하는 애플리케이션을 개발, 테스트, 배포할 때 특히 유용하다. 

 

Docker Compose 는 yaml 파일을 사용하여 도커 애플리케이션의 구성을 정의한다. 이 yaml 파일에는 애플리케이션에 필요한 서비스, 네트워크, 볼륨 등의 설정이 포함된다. 또한, 여러 서비스간의 의존성, 실행순서, 환경변수 등을 지정할 수 있다. 

 

 

Docker Compose 파일의 구성요소


간단한 docker-compose.yml 파일의 예시를 살펴보자. 

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

 

이 예시에서는 web 과 db 라는 두개의 서비스를 정의하고 있다. 

web 은 nginx 이미지를 사용하며 host 의 8080 포트와 컨테이너의 80 포트를 매핑하고 있다.

db 는 postgres 이미지를 사용하며 환경변수에서 비밀번호를 설정해주고 있다. 

 

Docker Compose 파일의 구성요소를 좀더 자세히 살펴보면 아래와 같다.

 

 

1. 버전(version)

Docker Compose 파일의 버전을 지정한다. 다양한 버전이 존재하며, 사용하는 Docker Compose 의 버전에 따라 파일의 구조가 달라질 수 있다. 

version: '3'

 

 

2. 서비스(services)

여러개의 서비스를 정의한다. 각 서비스는 도커 이미지를 기반으로 하며, 해당 서비스의 설정 및 의존성을 정의한다. 

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

 

 

3. 네트워크(networks)

도커 네트워크를 정의한다. 여러 서비스 간에 통신이 필요한 경우 네트워크를 정의하여 그 안에서 서비스 간 통신이 가능하게 할 수 있다. 

networks:
  my_network:
services:
  web:
    networks:
      - my_network
  db:
    networks:
      - my_network

 

 

4. 볼륨(volumnes)

도커 볼륨을 정의한다. 도커 컨테이너의 데이터를 영속적으로 저장하거나 공유하기 위해 사용된다.

volumes:
  my_volume:
services:
  web:
    volumes:
      - my_volume:/app/data

 

 

5. 환경변수(environment)

서비스의 환경변수를 설정한다. 도커 이미지가 환경변수를 지원하는 경우, 해당 환경변수를 정의하여 사용할 수 있다. 

services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

 

 


 

Docker Compose 를 사용하면 이러한 설정을 기반으로 여러 컨테이너를 쉽게 실행하고 관리할 수 있다. 일반적으로 사용되는 몇가지 명령어는 다음과 같다.

 

1. `docker-compose up`

docker-compose.yml 파일에 정의된 모든 서비스를 시작한다. 필요한 이미지가 없는 경우 자동으로 이미지를 빌드한다. 

$ docker-compose up

 

 

2. `docker-compose down`

docker-compose.yml 파일에 정의된 모든 서비스를 중지하고 관련된 컨테이너를 제거한다. 

$ docker-compose down -v

 

옵션:

  • `-v` 또는 `--volumne`: 관련된 볼륨도 함께 제거한다.

 

3. `docker-compose ps`

현재 실행중인 서비스의 상태를 표시한다. 서비스의 이름, ID, 상태, 포트 매핑 등의 정보를 제공한다.

$ docker-compose ps

 

 

4. `docker-compose logs`

실행 중인 서비스의 로그를 표시할 때 사용한다. 이 명령어를 실행하면 모든 서비스의 로그가 출력되거나, 특정 서비스의 로그만 출력할 수 있다.

# 모든 서비스의 로그 출력
$ docker-compose logs

# 특정 서비스의 로그 출력
$ docker-compose logs web

 

옵션:

  • service_name: 특정 서비스의 로그만 표시한다.
  • `-f` 또는 `--flow`: 로그를 실시간으로 출력한다. 새로운 로그가 생성될 때마다 업데이트된다. 
  • `--tail={숫자}`: 최근 {숫자}개의 로그 라인만 출력한다.
  • `-t` 또는 `--timestamps`: 각 로그 라인에 타임스탬프를 표시한다.

 

 

 

728x90