Docker Compose
도커 컴포즈
: 여러 개의 컨테이너가 하나의 애플리케이션으로 동작할 때 묶음으로 관리하기 위한 도구
: docker run 명령어를 통해 여러 개의 컨테이너를 실행하는 것과 같은 효과
=> TEST 단계에서 docker run 명령어를 남발할 경우 번거로움
Docker Compose의 동작원리
: 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성
: 도커 컴포즈의 설정파일은 docker run 명령어의 옵션을 그대로 사용가능
: 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의 할 수 있음
: 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 변경 가능
: 컨테이너의 service discovery 자동화
=> 컨테이너가 많아지고 정의해야 할 옵션이 많을 경우 활용
설치방법
: 도커 컴포즈 깃허브 (https://github.com/docker/compose)에서 설치
=> README 참조 (최신 버전 확인)
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
: 도커 컴포즈 다운로드
chmod +x /usr/local/bin/docker-compose
: 실행 권한 부여
docker-compose --version
: 도커 컴포즈 버전 확인 (정상 설치 여부 확인)
도커 컴포즈 설정 파일 작성 (YAML파일)
: docker-compose.yml 생성 (vi docker-compose.yml)
ㆍ도커 컴포즈 파일의 기본구조
# 스키마 버전 정의 (필수)
version: "3.7"
# 도커 컴포즈에서 실행할 서비스 항목 (필수)
services:
# 네트워크 설정 (선택 사항)
networks:
# 볼륨 설정 (선택 사항)
volumnes:
ㆍ도커 컴포즈 파일 예시
version: "3.7"
services:
# service 이름
app:
# 이미지
image: node:14.15.5-alpine
# 컨테이너 실행시 실행될 명령
command: sh -c "yarn install && yarn run dev"
# 포트 매핑
ports:
- 3000:3000
# 컨테이너 내 작업공간(없으면 만들어줌)
working_dir: /app
# 볼륨 설정 (호스트:컨테이너)
# 호스트OS의 현재 디렉터리와 컨테이너의 /app 디렉터리를 연결
volumes:
- ./:/app
# 환경변수
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
# 의존성 설정(db가 먼저 생성된 후에 app이 생성)
depends_on:
- db
# 오류가 나면 바로 다시 시작
restart: always
# 데이터베이스 설정
db:
image: mariadb:10.5
# 볼륨 설정 (호스트:컨테이너)
# 도커 볼륨 설정
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
# 볼륨을 따로 생성
volumes:
todo-mysql-data:
ㆍ도커 컴포즈 실행
: docker-compose up -d
도커 컴포즈 로그 체킹
ㆍdocker-compose logs -f
: -f (로그를 실시간으로 출력)
ㆍdocker-compose logs 서비스_이름
: 특정 컨테이너(서비스)에 대한 로그 확인
: 도커 컴포즈 내에 선언한 service에 대한 로그 (위 예시에서 app과 db)
ㆍdocker-compose down
: 모든 도커 컴포즈 컨테이너 제거
Refference