Docker Compose

hyejin·2024년 4월 17일
0

study-2024

목록 보기
3/17
post-thumbnail
post-custom-banner

Docker Compose란?

단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구

Docker Compose가 필요한 이유

하나의 어플리케이션이 여러 개의 컨테이너를 가진다면 이미지를 하나씩 빌드하고 컨테이너를 하나씩 실행시켜야한다. 하지만, docker-compose를 사용하면 이를 테스트하거나 실행하기 위해 각각의 컨테이너를 수동으로 생성하고 실행하는 번거로움을 줄일 수 있다.

예를 들어, 웹 서버와 데이터베이스로 구성된 어플리케이션을 실행할 때, docker-compose를 사용하면 두 컨테이너를 하나의 설정 파일로 정의하여 관리할 수 있다. 이를 통해 컨테이너들 간의 연결 관계를 쉽게 설정하고, 복잡한 다층 구조의 어플리케이션을 간편하게 운영할 수 있다. doker-compose를 활용하면 컨테이너들을 하나의 네트워크로 묶어 관리할 수 있어서 작업의 효율성을 높일 수 있다.

Docker Compose 파일 구조

docker-compose는 YAML 파일을 사용하여 각 컨테이너가 어떻게 상호작용하는지, 어떤 네트워크와 볼륨을 사용하는지 정의할 수 있다.

docker-compose.yml

  • 어플리케이션을 설정하고 실행하는데 사용되는 파일
  • 어플리케이션을 구성하는 여러 서비스가 정의되며, 서비스에는 어플리케이션이 필요로하는 모든 것을 포함(웹 어플리케이션, 데이터베이스, 캐싱서비스 등)
  • 각 서비스는 독립적인 컨테이너, docker-compose.yml 파일에 정의된 서비스들의 실행과 관리 가능
  • 빌드 프로세스 제공(정의된 서비스에 대한 이미지 생성, 컨테이너 생성 및 실행 가능)
  • docker 커맨드보다 간단하고 직관적으로 어플리케이션 관리

docker-compose.yml 파일 구조

  • version
    Docker Engine과 호환되는 Docker Compose 파일의 버전을 명시한다.(예를 들어, version:"3.8"과 같이 명시)

    # docker-compose.yml
    
    version: "3.8"
  • services
    애플리케이션의 서비스를 정의한다. 이 서비스는 컨테이너의 집합으로, 독립적으로 확장하거나 교체할 수 있는 컴퓨팅 자원을 나타내며, 각 서비스는 Docker 이미지와 실행을 위한 설정을 포함한다.

    version: '3.8'
    
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
        volumes:
          - ./web:/usr/share/nginx/html
        networks:
          - my_network
      database:
        image: mysql:latest
        environment:
          MYSQL_ROOT_PASSWORD: example_password
          MYSQL_DATABASE: my_database
          MYSQL_USER: my_user
          MYSQL_PASSWORD: my_password
        networks:
          - my_network
    
    networks:
      my_network:
    • 첫 번째 서비스: 웹 애플리케이션을 나타내며 Nginx를 사용
      • 호스트의 80번 포트와 컨테이너의 80번 포트를 연결하여 웹 애플리케이션에 접근할 수 있도록 함
      • 호스트의 ./web 디렉토리를 컨테이너의 /usr/share/nginx/html 디렉토리와 연결하여 정적 파일을 제공할 수 있도록 설정
    • 두 번째 서비스: 데이터베이스를 나타내며 MySQL을 사용
      • 환경 변수를 통해 MySQL 루트 비밀번호, 데이터베이스 이름, 사용자 이름, 사용자 비밀번호를 설정
    • 두 서비스가 속할 공통 네트워크를 정의(두 서비스 간의 통신이 가능하도록 설정)

Docker Compose 서비스를 정의하기 위한 옵션


Docker Compose 명령어

# docker-compose.yml 파일에 정의된 서비스들의 이미지를 빌드(이미지를 새로 빌드하여 업데이트된 코드를 반영)
$ docker-compose build

# docker-compose.yml 파일에 정의된 모든 서비스 시작(이미지가 없는 경우 이미지를 빌드하고 컨테이너 생성)
# -d 옵션: 백그라운드에서 실행
$ docker-compose up [-d]

# 정의된 서비스들을 시작(이미지를 새로 빌드하지 않고, 중지된 서비스를 다시 시작)
$ docker-compose start

# 정의된 서비스들을 중지(컨테이너를 중지하지만 제거는 하지않음)
$ docker-compose stop

# 정의된 서비스들을 재시작(이미지를 새로 빌드하지 않고, 중지된 서비스를 다시 시작)
$ docker-compose restart

# 정의된 서비스들을 중지하고 컨테이너 제거
$ docker-compose down

# 정의된 서비스들의 상태 확인(실행 중인 컨테이너와 포트 매핑 정보)
$ docker-compose ps

# 정의된 서비스들의 로그 확인
$ docker-compose logs

# 중지된 컨테이너를 제거(종료된 서비스의 컨테이너를 정리)
$ docker-compose rm

# 프로젝트 내 이미지 목록
$ docker-compose images

# 프로젝트 내 실행중인 프로세스 목록
$ docker-compose top

[참고자료]

도커 컴포즈1
도커 컴포즈2
도커 컴포즈 파일 구조1
도커 컴포즈 파일 구조2
도커 컴포즈 명령어
도커 컴포즈 실습

profile
노는게 제일 좋아
post-custom-banner

0개의 댓글