[Docker] docker-compose.yml 작성법

예원·2022년 11월 16일
0

Docker

목록 보기
5/5
post-thumbnail

docker-compose.yml 파일 작성법에 대해 정리한다.

기본구조

docker-compose는 일반적으로 프로젝트 최상단에 위치하며, 아래와 같은 구조를 가진다.

version: "3.5"
services:
  web:
    # 웹 애플리케이션 설정
  db:
    # 데이터베이스 설정
networks:
  # 네트워크 설정
volumes:
  # 볼륨 설정

version

docker-compose의 버전은 1~3까지 있다.
최신 소프트웨어를 사용하기 위해서는 3으로 해주면 된다.

services

실질적인 컨테이너 집합 요소이다.
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 실행하기에서 사용한 것을 예시로 들었다.

container_name

컨테이너 이름을 지정한다.

image

Docker Hub에 올라가 있는 image 중 사용할 이미지와 태그를 입력한다.

restart

컨테이너 오류 등으로 종료되었을 때 다시 시작할지 여부를 설정한다.

  • no : 재시작 하지 않음
  • always : exit code와 상관없이 항상 재시작
  • on-failure : exit code가 0이 아닐때만 재시작
  • unless-stopped : 컨테이너 상태를 수동으로 stop 하기 전까지 재시작

environment

환경 정보를 설정한다.
여기서는 db 정보를 설정하는 것이다.

command

Bash나 PowerShell과 같은 커멘드 명령어를 실행한다.

volumes

볼륨 경로를 잡아준다.

- ./db/data:/var/lib/mysql:rw

여기서 잡은 /var/lib/mysql:rw는 mysql의 실제 저장 경로이다.
Docker를 구동하게 되면 /db/data에 파일이 생성되는데, 이 것이 DB에 접속했을 때 보이는 정보이다.
이는 컨테이너가 종료 혹은 삭제 되었을 때 내부 데이터가 날아가는 걸 방지하기 위한 것이다.
로컬에 데이터를 보관하여 다시 컨테이너를 생성해도 DB는 그대로 남아있다.

ports

외부에서 접속하는 포트를 Docker 내부 포트와 매칭해준다.
외부 포트:내부 포트

build

Dockerfile의 위치를 지정한다.
. 은 현재 디렉터리를 의미한다.

depends_on

컨테이너의 실행 순서를 지정한다.

depends_on:
    - spring-db

위는 spring-db 컨테이너가 구동된 후 해당 컨테이너가 실행되도록 지정한 것이다.


refernece
Docker restart option
Docker compose로 Spring Boot 올리기
[Docker] Docker Compose build
Docker Compose 설정 방법

0개의 댓글