본문 바로가기
프로그래밍/프로그래밍 기타

도커 컴포즈(Docker Compose)

by freeelifee 2025. 4. 15.
728x90

Docker Compose란?

Docker Compose는 하나의 YAML 파일을 사용하여 여러 컨테이너를 쉽게 구성하고 실행할 수 있도록 도와줍니다.

 1. Docker Compose 설치 방법

Docker Compose는 여러 개의 컨테이너를 한 번에 정의하고 관리할 수 있는 도구입니다. 먼저 설치 방법을 안내해드릴게요.

🔹 Windows & macOS (Docker Desktop 포함)

Docker Desktop을 설치하면 Compose가 자동으로 포함됩니다.

📌 다운로드: Docker Desktop 공식 사이트

https://www.docker.com/

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

🔹 Linux (Ubuntu 기준)

1️⃣ Docker Compose 다운로드

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2️⃣ 실행 권한 부여

sudo chmod +x /usr/local/bin/docker-compose

3️⃣ 설치 확인

docker-compose --version

# 출력
Docker Compose version v2.33.1-desktop.1

➡ 정상적으로 설치되면 버전 정보가 출력됩니다.

✅ 2. Docker Compose 기본 구조 (docker-compose.yml)

version: '3.8'  # Docker Compose 버전
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"

📌 구성 요소 설명

  • services → 여러 컨테이너(웹 서버 web, 데이터베이스 db) 정의
  • image → 사용할 Docker 이미지 (nginx, mysql)
  • ports → 포트 설정 (8080:80, 3306:3306)
  • volumes → 호스트 디렉터리(./html)와 컨테이너 내부 경로(/usr/share/nginx/html) 연결
  • environment → 환경 변수 설정 (MySQL 비밀번호 등)

이 docker-compose.yml 파일을 docker run 명령어로 실행하려면 각 서비스에 대해 개별적으로 컨테이너를 실행해야 합니다. docker-compose up 명령어를 사용하면 자동으로 설정된 내용을 바탕으로 컨테이너가 생성되지만, docker run을 사용할 경우 직접 컨테이너를 실행해야 합니다.

Nginx 컨테이너 실행:

docker run -d -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html --name web nginx

MySQL 컨테이너 실행:

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=mydb --name db mysql

📌 각 명령의 의미

  • -d: 백그라운드에서 실행
  • -p: 포트 매핑 (호스트포트:컨테이너포트)
  • -v: 볼륨 매핑 (호스트 디렉토리:컨테이너 디렉토리)
  • -e: 환경 변수 설정
  • --name: 컨테이너 이름 지정

이 방식으로 실행하면 docker-compose 없이도 개별 컨테이너를 실행할 수 있습니다. 다만 docker-compose up을 사용하면 의존 관계를 자동으로 처리하는 장점이 있습니다.


각각 docker run 명령으로 컨테이너를 실행하면 직접 의존 관계를 관리해야 합니다. 예를 들어, web 서비스(Nginx)가 db 서비스(MySQL)에 의존한다고 가정하면, 몇 가지 문제가 발생할 수 있습니다.

주요 고려사항:

  1. 실행 순서 MySQL이 먼저 실행되어야 하고, 초기화가 완료된 후에 Nginx가 접근해야 합니다. 하지만 docker run을 개별적으로 실행하면 이러한 순서를 자동으로 보장할 수 없습니다.
  2. 네트워크 설정 기본적으로 docker run을 사용하면 각 컨테이너는 독립적으로 실행되므로 web 컨테이너가 db 컨테이너의 내부 네트워크 이름을 알지 못합니다. 이를 해결하려면 --network 옵션을 사용하여 동일한 사용자 정의 네트워크에 추가해야 합니다.이 방식으로 하면 web 컨테이너에서 db 컨테이너의 이름(db)을 통해 접근할 수 있습니다.
  3. docker network create mynetwork
    docker run -d --network mynetwork --name db -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=mydb mysql
    docker run -d --network mynetwork --name web -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx
    
  4. 환경 변수 관리 docker-compose.yml에서는 환경 변수를 쉽게 설정할 수 있지만, 개별 docker run 실행 시에는 직접 환경 변수를 지정해야 합니다.

docker-compose up을 사용하면 자동으로 네트워크와 실행 순서를 관리할 수 있어서 더 편리합니다.

docker run을 사용해도 가능하지만, 네트워크 설정, 실행 순서, 환경 변수 등을 직접 처리해야 합니다.

✅ 3. Docker Compose 명령어

🔹 컨테이너 실행

docker-compose up -d

➡ 모든 서비스를 백그라운드에서 실행 (-d: detached mode)

🔹 컨테이너 중지

docker-compose down

➡ 모든 컨테이너 중지 및 네트워크 제거

🔹 실행 중인 서비스 확인

docker-compose ps

🔹 로그 확인

docker-compose logs -f

🔹 서비스 개별 실행

docker-compose up -d web

➡ web 서비스만 실행

🔹 컨테이너 삭제 없이 다시 시작

docker-compose restart

✅ 4. Docker Compose의 장점

  • 코드로 인프라 정의 (Infrastructure as Code)
  • 여러 컨테이너를 한 번에 실행 및 관리
  • 설정이 간결하고 유지보수가 쉬움
  • 개발 환경을 쉽게 공유 및 배포 가능
728x90

'프로그래밍 > 프로그래밍 기타' 카테고리의 다른 글

도커에서 mysql 이미지 실행하기  (0) 2025.04.15
도커 볼륨(Docker Volume)  (0) 2025.04.15
쿠버네티스(Kubernetes)  (0) 2025.04.15
도커(Docker)  (0) 2025.04.15
ChatGPT API 사용법  (0) 2025.04.11