개요
N의 공상이라는 프로젝트를 진행하면서, Spring 프로젝트와 MySQL 컨테이너를 실행시켜야 하는데, 두 개를 따로 하는 것보다는 Docker Compose라는 Docker의 기술을 활용한다면 더욱 쉽게 관리할 수 있을 것 같아서 도커 컴포즈에 대한 내용을 공부하고 정리해보자!
1. 도커 컴포즈(Docker Compose)란?
여러 컨테이너를 동시에 관리하고 구성할 수 있도록 도와주는 도구이다.
단일 어플리케이션을 실행하기 위해 여러 서비스(ex : 웹 서버, 데이터베이스)가 필요한 경우, 이를 하나의 설정 파일로 정의하고 손쉽게 실행, 관리할 수 있도록 설계되었다.
1-1. 사용 이유?
-> 간편한 설정 관리
: 하나의 YAML 파일에 여러 컨테이너의 설정을 정의할 수 있다.
-> 효율적인 멀티 컨테이너 관리
: 단일 명령어를 통해 모든 컨테이너를 시작하거나 중지할 수 있다.
-> 환경 격리
: 로컬 개발 환경과 프로덕션 환경 간의 차이를 최소화 할 수 있다.
-> 손쉬운 확장
: 컨테이너의 스케일링을 쉽게 설정할 수 있다.
1-2. 도커 파일(Docker File)과의 비교
만드는 대상 자체가 다르다고 생각한다! 도커 파일은 이미지를 위한 것. 도커 컴포즈는 여러 컨테이너들을 위한 것
도커 파일(Docker File)
-> 특정 애플리케이션의 이미지를 만들기 위한 것!
-> 네트워크 및 볼륨은 만들 수 없다.
-> 도커 컴포즈에서 필수적으로 사용됨
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install flask
CMD ["python", "app.py"]
도커 컴포즈(Docker Compose)
-> 여러 컨테이너로 구성된 멀티 컨테이너 애플리케이션을 정의하고 관리한다.
-> 각 컨테이너 간의 의존성과 네트워크를 관리한다.
-> 네트워크 및 볼륨을 만들 수 있다.
-> 간단한 명령어를 통해 컨테이너 실행 및 삭제가 가능하다.
version: '3.9'
services:
web:
build: .
ports:
- "5000:5000"
db:
image: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
2. 도커 컴포즈(Docker Compose) 기본 구조
도커 컴포즈는 docker-compose.yml 라는 이름을 사용해 정의해야 한다.
version: '3.9'
services:
web:
build: ./app
ports:
- "5000:5000"
environment:
APP_ENV: development
depends_on:
- db
db:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
구조를 위에 작성해야 하는 것부터 하나씩 살펴보자.
1) version
-> 컴포즈 파일의 버전을 적는다.
2) services
-> 실행할 컨테이너(서비스)들을 정의하는 섹션이다. 각 서비스에는 이름, 이미지, 빌드 옵션, 포트, 환경 변수 등을 포함할 수 있다.
여기서는 web과 db 컨테이너를 따로 적었다!
services 내 주요 설정들에 대해서도 하나씩 보자.
: image
-> 사용할 도커 이미지를 지정한다.
: build
-> 도커 파일 경로를 지정해 이미지를 빌드한다.
: ports
-> 호스트와 컨테이너 간의 포트 매핑을 설정한다.
: environment
-> 환경 변수를 설정한다.
: depends_on
-> 서비스 간 의존성을 정의해 특정 서비스가 먼저 시작되도록 설정한다.
3) volumes
-> 컨테이너와 호스트 간의 파일 공유를 설정한다.
4) networks
-> 서비스 간 네트워크를 설정한다.
3. 주요 명령어
실행
docker-compose up [options] [SERVICE...]
: -d
-> 백그라운드에서 실행
: --build
-> 이미지를 빌드하고 실행
: --scale <service-name>=<count>
-> 특정 서비스를 지정한 개수로 확장
종료
docker-compose down [options]
: -v
-> 볼륨도 함께 삭제
상태 확인
-> 현재 실행 중인 컴포즈 서비스의 상태를 표시
-> 각 서비스의 컨테이너 상태와 포트 매핑 정보 등을 확인할 수 있음
docker-compose ps
로그 확인
docker-compose logs
명령 실행
-> 실행 중인 컨테이너 내부로 들어가 명령을 실행함
docker-compose exec <service-name> <command>
이상 간략하게 도커 컴포즈에 대한 내용을 정리했고, 이제 스프링이랑 MySQL을 실제 적용해봐야겠다
'Infra > Docker' 카테고리의 다른 글
[Docker] 도커 파일 (0) | 2025.01.16 |
---|---|
[Docker] 기본 명령어 정리 (0) | 2024.12.13 |
[Docker] 도커 알아보기! (1) | 2024.12.11 |