정의
- Docker를 사용하여 멀티 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구
- docker-compose.yml 파일을 통해 여러 개의 컨테이너를 하나의 애플리케이션 스택으로 정의하여 이를 한 번에 실행, 관리 및 확장할 수 있음
- 개발 또는 테스트 환경에서 여러 개의 서비스나 컨테이너들을 조합하여 애플리케이션을 구성하고자 할 때 주로 사용
- 여러 개의 컨테이너를 동시에 실행하고, 서로 간의 네트워크 연결, 데이터 볼륨 공유 등을 손쉽게 설정할 수 있음
docker-compose.yml 형식
version: '3' # docker-compose 버전 지정
services: # 실행하려는 컨테이너들 정의
# 오픈소스 이미지를 사용하는 경우
redis-server: # 서비스명(다른 컨테이너에서 호스트를 지정할 때 사용됨)
image: # 이미지명
container_name: # 컨테이너명 지정
ports: # 포트 설정
- 컨테이너 외부:컨테이너 내부
volumes: # 볼륨 설정
- 컨테이너 외부:컨테이너 내부
restart: # 컨테이너 종료 시 재시작 여부 (주로 always 적용)
environment: # 환경 변수 설정
-
networks: # 사용할 네트워크 설정
-
# DB의 경우(주로 오픈 소스 이미지 사용)
mariadb: # 서비스명
image: # 이미지명
container_name: # 컨테이너명 지정
volumes:
- ./mariadb/conf.d:/etc/mysql/conf.d # 설정 파일 공간
- ./mariadb/data:/var/lib/mysql # DB의 데이터가 파일 형태로 저장되는 공간
- ./mariadb/initdb.d:/docker-entrypoint-initdb.d # Docker 컨테이너가 최초 실행 시 불러올 스크립트가 위치하는 공간
environment: # 환경 변수 지정
MYSQL_DATABASE: # DB명
MYSQL_USER: # DB 사용자 지정
MYSQL_ROOT_PASSWORD: # DB ROOT 비밀번호 설정
TZ: # 시간대 지정
restart: # 컨테이너 종료 시 재시작 여부 (주로 always 적용)
ports: # 포트번호 설정(컨테이너 외부:컨테이너 내부)
- 3306:3306
networks: # 사용할 네트워크 설정
-
# 이미지를 직접 build하는 경우
springboot:
build:
context: # Dockerfile 경로 지정 (docker-compose.yml 위치 기준)
dockerfile: # dockerfile의 명칭이 Dockerfile이 아닌 경우 dockerfile 경로 직접 지정
container_name: # 컨테이너명 지정
ports: # 포트번호 설정(컨테이너 외부:컨테이너 내부)
- "8080:8080"
volumes: # 볼륨(마운트) 설정(컨테이너 외부:컨테이너 내부)
-
depends_on: # 해당 서비스가 실행되기 전에 의존해야 하는 서비스 목록
mariadb: # 의존한 서비스명
condition: service_started # mariadb 컨테이너 실행 후 해당 서비스의 컨테이너 실행
restart: # 컨테이너 종료 시 재시작 여부 (주로 always 적용)
networks: # 사용할 네트워크 설정
- test_network
networks:
test_network:
driver: bridge # 네트워크 드라이버 설정 (주로 bridge 적용)
- version, services, networks 세 부분으로 나뉨
- version = docker compose 버전 설정
- services = 각 서비스의 컨테이너 생성에 대한 설정
- networks = 사용할 네트워크에 대한 설정
도커 볼륨(Docker Volume)
- 호스트 머신의 폴더 (로컬 컴퓨터 폴더)
- 컨테이너 내부 폴더와 컨테이너 외부 폴더를 서로 연결해주는 역할
- 익명 볼륨(컨테이너가 존재하는 동안에만 존재), 명명 볼륨(컨테이너가 종료된 후에도 유지)
- docker-compose.yml에서 서로 볼륨으로 지정되어 마운트된 파일들은 변경 시 연결된 다른 파일에도 변경 사항이 반영됨
ex) /app/A.txt:/etc/app/B.txt인 경우 => A.txt가 변경되면 B.txt에도 변경 사항이 반영되고 그 반대의 경우도 성립
※ 마운트(Mount) = 물리적인 장치를 특정 디렉터리에 연결 시켜주는 것
기본 명령어
- docker-compose up = docker-compose.yml를 토대로 이미지 생성 => 컨테이너 생성 => 컨테이너 실행
(-d 추가 입력 시 백그라운드 실행, 특정 서비스에 대해서만 명령하고 싶으면 해당 서비스명을 입력)
- docker-compose down = docker-compose.yml에 정의된 서비스의 컨테이너들 모두 삭제
'DevOps > Docker' 카테고리의 다른 글
Docker Volume (0) | 2023.09.12 |
---|---|
Dockerfile 기본 문법 (0) | 2023.02.03 |
Docker 기본 명령어 (0) | 2022.12.21 |
댓글