docker-compose.yml
파일 작성법에 대해 정리한다.
docker-compose
는 일반적으로 프로젝트 최상단에 위치하며, 아래와 같은 구조를 가진다.
version: "3.5"
services:
web:
# 웹 애플리케이션 설정
db:
# 데이터베이스 설정
networks:
# 네트워크 설정
volumes:
# 볼륨 설정
docker-compose
의 버전은 1~3까지 있다.
최신 소프트웨어를 사용하기 위해서는 3으로 해주면 된다.
실질적인 컨테이너 집합 요소이다.
services
안에 입력하는 값으로 하나의 컨테이너가 만들어져 유기적으로 동작한다.
예시
spring-db와 spring-app 컨테이너가 생성된다.
services:
spring-db:
container_name: spring-db
image: mysql:8.0.13
restart: always
environment:
- MYSQL_DATABASE=test
- MYSQL_ROOT_PASSWORD=testpw
- MYSQL_ROOT_HOST=%
- TZ=Asia/Seoul
command:
- --lower_case_table_names=1
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./db/data:/var/lib/mysql:rw
ports:
- 3306:3306
spring-app:
build: .
depends_on:
- spring-db
...
docker - 5. docker-compose를 이용하여 spring boot와 mysql 실행하기에서 사용한 것을 예시로 들었다.
컨테이너 이름을 지정한다.
Docker Hub에 올라가 있는 image 중 사용할 이미지와 태그를 입력한다.
컨테이너 오류 등으로 종료되었을 때 다시 시작할지 여부를 설정한다.
환경 정보를 설정한다.
여기서는 db 정보를 설정하는 것이다.
Bash나 PowerShell과 같은 커멘드 명령어를 실행한다.
볼륨 경로를 잡아준다.
- ./db/data:/var/lib/mysql:rw
여기서 잡은 /var/lib/mysql:rw
는 mysql의 실제 저장 경로이다.
Docker를 구동하게 되면 /db/data
에 파일이 생성되는데, 이 것이 DB에 접속했을 때 보이는 정보이다.
이는 컨테이너가 종료 혹은 삭제 되었을 때 내부 데이터가 날아가는 걸 방지하기 위한 것이다.
로컬에 데이터를 보관하여 다시 컨테이너를 생성해도 DB는 그대로 남아있다.
외부에서 접속하는 포트를 Docker 내부 포트와 매칭해준다.
외부 포트:내부 포트
Dockerfile의 위치를 지정한다.
.
은 현재 디렉터리를 의미한다.
컨테이너의 실행 순서를 지정한다.
depends_on:
- spring-db
위는 spring-db
컨테이너가 구동된 후 해당 컨테이너가 실행되도록 지정한 것이다.
refernece
Docker restart option
Docker compose로 Spring Boot 올리기
[Docker] Docker Compose build
Docker Compose 설정 방법