본문 바로가기
Docker

Docker Compose를 사용한 멀티 컨테이너 애플리케이션 관리 / docker-compose.yml 파일 작성법: 서비스 정의, 네트워크 설정

by Maccrey Coding 2024. 9. 12.
반응형

 

Docker Compose는 복잡한 애플리케이션을 여러 개의 컨테이너로 나누어 관리할 수 있게 도와주는 도구입니다.

여러 개의 컨테이너를 함께 실행하고 설정하는 데 필요한 정보를 docker-compose.yml 파일에 정의합니다.

이 블로그에서는 docker-compose.yml 파일의 기본적인 작성법과 서비스 정의, 네트워크 설정 방법에 대해 초보자가 이해하기 쉽게 설명하겠습니다.

1. docker-compose.yml 파일이란?

docker-compose.yml 파일은 Docker Compose에서 사용할 설정 파일입니다.

이 파일에는 여러 컨테이너(서비스), 네트워크, 볼륨 등의 설정을 정의할 수 있습니다. YAML 형식으로 작성되며, 구성 요소들을 계층적으로 표현할 수 있습니다.

2. 서비스 정의

서비스는 Docker 컨테이너를 정의합니다. 각각의 서비스는 애플리케이션의 일부로서 독립적인 컨테이너로 실행됩니다. 예를 들어, 웹 서버, 데이터베이스 서버, 캐시 서버 등이 각각 하나의 서비스가 될 수 있습니다.

2.1 서비스 정의 기본 구조

서비스를 정의하는 기본적인 구조는 다음과 같습니다.

version: '3.8'

services:
  service_name:
    image: image_name:tag
    ports:
      - "host_port:container_port"
    volumes:
      - host_path:container_path
    environment:
      - ENV_VAR_NAME=value
  • version: Compose 파일의 버전을 정의합니다.
  • services: 컨테이너 서비스를 정의하는 블록입니다.
  • service_name: 서비스의 이름을 정의합니다.
  • image: 사용할 Docker 이미지를 정의합니다.
  • ports: 호스트와 컨테이너 간의 포트를 매핑합니다.
  • volumes: 호스트와 컨테이너 간의 디렉토리 매핑을 설정합니다.
  • environment: 컨테이너의 환경 변수를 설정합니다.

2.2 서비스 정의 예제

간단한 웹 애플리케이션과 데이터베이스를 설정하는 예제를 보겠습니다.

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - mynetwork

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - mynetwork
  • web: Nginx 웹 서버를 사용하는 서비스입니다. 호스트의 8080 포트를 컨테이너의 80 포트와 매핑합니다.
  • db: MySQL 데이터베이스를 사용하는 서비스입니다. 환경 변수로 루트 비밀번호와 초기 데이터베이스 이름을 설정합니다.

3. 네트워크 설정

네트워크는 여러 컨테이너가 서로 통신할 수 있도록 설정하는 부분입니다. Docker Compose는 기본적으로 모든 서비스가 동일한 네트워크에 연결되도록 설정합니다. 필요에 따라 사용자 정의 네트워크를 생성할 수 있습니다.

3.1 네트워크 설정 기본 구조

네트워크를 설정하는 기본 구조는 다음과 같습니다.

networks:
  network_name:
    driver: network_driver
  • networks: 네트워크 설정을 정의하는 블록입니다.
  • network_name: 네트워크의 이름을 정의합니다.
  • driver: 네트워크 드라이버를 정의합니다. 기본적으로 bridge가 사용됩니다.

3.2 네트워크 설정 예제

다음 예제에서는 mynetwork라는 사용자 정의 네트워크를 설정합니다.

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    networks:
      - mynetwork

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - mynetwork

networks:
  mynetwork:
    driver: bridge

volumes:
  db_data:
  • networks: mynetwork라는 이름의 네트워크를 정의합니다. driver는 기본적으로 bridge를 사용합니다.
  • volumes: 데이터베이스 데이터의 영속성을 보장하기 위해 db_data라는 볼륨을 정의합니다.

4. docker-compose.yml 파일 작성 시 고려사항

  • 환경 변수: 컨테이너에서 사용할 환경 변수를 설정할 때는 .env 파일을 사용하여 보안을 강화할 수 있습니다.
  • 볼륨: 데이터의 영속성을 보장하려면 볼륨을 사용하여 호스트와 컨테이너 간의 데이터 공유를 설정합니다.
  • 포트 매핑: 호스트와 컨테이너 간의 포트 매핑을 설정하여 외부와의 통신을 관리합니다.
  • 네트워크: 여러 컨테이너가 서로 통신할 수 있도록 네트워크를 적절히 설정합니다.

 

Docker Compose는 여러 개의 컨테이너를 쉽게 정의하고 관리할 수 있게 도와주는 도구입니다. docker-compose.yml 파일을 작성하면, 다양한 서비스를 설정하고 네트워크를 구성할 수 있습니다. 이를 통해 복잡한 애플리케이션을 단순하고 일관된 방식으로 관리할 수 있습니다.

 

이 블로그에서는 Docker Compose의 기본 개념과 docker-compose.yml 파일 작성법을 초보자가 이해하기 쉽게 설명했습니다.

이 내용을 바탕으로 다양한 애플리케이션을 구성하고 관리하는 데 도움이 되길 바랍니다.

추가적인 기능이나 고급 설정은 Docker Compose 공식 문서를 참고하세요.

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형