Docker Compose란?
Docker Compose는 하나의 YAML 파일을 사용하여 여러 컨테이너를 쉽게 구성하고 실행할 수 있도록 도와줍니다.
✅ 1. Docker Compose 설치 방법
Docker Compose는 여러 개의 컨테이너를 한 번에 정의하고 관리할 수 있는 도구입니다. 먼저 설치 방법을 안내해드릴게요.
🔹 Windows & macOS (Docker Desktop 포함)
Docker Desktop을 설치하면 Compose가 자동으로 포함됩니다.
📌 다운로드: Docker Desktop 공식 사이트
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)에 의존한다고 가정하면, 몇 가지 문제가 발생할 수 있습니다.
주요 고려사항:
- 실행 순서 MySQL이 먼저 실행되어야 하고, 초기화가 완료된 후에 Nginx가 접근해야 합니다. 하지만 docker run을 개별적으로 실행하면 이러한 순서를 자동으로 보장할 수 없습니다.
- 네트워크 설정 기본적으로 docker run을 사용하면 각 컨테이너는 독립적으로 실행되므로 web 컨테이너가 db 컨테이너의 내부 네트워크 이름을 알지 못합니다. 이를 해결하려면 --network 옵션을 사용하여 동일한 사용자 정의 네트워크에 추가해야 합니다.이 방식으로 하면 web 컨테이너에서 db 컨테이너의 이름(db)을 통해 접근할 수 있습니다.
-
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
- 환경 변수 관리 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)
- 여러 컨테이너를 한 번에 실행 및 관리
- 설정이 간결하고 유지보수가 쉬움
- 개발 환경을 쉽게 공유 및 배포 가능
'프로그래밍 > 프로그래밍 기타' 카테고리의 다른 글
도커에서 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 |