Docker-compose로 Mysql 설정

qufdl·2023년 12월 15일
0

데브코스TIL

목록 보기
2/2
post-thumbnail

개요

프로그래머스 백엔드 데브코스 과제를 진행하면서 멘토님께서 docker-compose를 사용해볼 것을 권유해주셨다. 원래 Docker을 사용해 MySQL을 띄웠는데, Docker-compose를 사용하면 DB뿐만 아니라 다른 설정들도 yml만 작성하면 한 번에 설정할 수 있어 편리하다는 것을 깨달아 이후 과제에도 계속 적용하고 있다.

도커 컴포즈란?

  • Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구.
  • Compose를 사용하면 YAML 파일을 사용하여 애플리케이션의 서비스를 구성할 수 있다.
  • 단일 서버에서 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공해준다

도커 컴포즈를 사용하는 이유는?

  • 하나의 어플리케이션엔 여러 서비스가 필요하다. 각 서비스를 전부 별도로 도커로 띄우면? ⇒ 불편. 버전 문제 발생 가능
  • 여러 컨테이너를 하나의 서비스로 정리해 컨테이너 묶음으로 관리하기 위함.
  • 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의할 수 있음

도커 컴포즈 파일 실행

  1. 설정

    windows와 MacOS는 Docker Desktop이 설치되어 있다면 Docker Compose도 자동으로 설치되어 있다. OS 별로 설치 방법은 공식 문서에서 확인 가능

    $ docker-compose -v  //버전 확인
  1. docker-compose.yaml로 도커 컴포즈 프로젝트 실행

    기존에는 docker run을 이용해 단일 컨테이너를 실행했다

    docker run --name springBasic -e MYSQL_PORT_HOST=% -e MYSQL_ROOT_PASSWORD=root1234! -e MYSQL_DATABASE=voucher_mgmt -d -p 3306:3306 mysqldocker run --name springBasic -e MYSQL_PORT_HOST=% -e MYSQL_ROOT_PASSWORD=root1234! -e MYSQL_DATABASE=voucher_mgmt -d -p 3306:3306 mysql

    너무길고, 헷갈린다.

    위 명령어를 docker-compose.yml로 대체했다.

    #version: '3'   # 컴포즈 파일 버전. 2024.06 기준 명시하면 오류남. 이제 명시할 필요 없어짐
    
    services:    # 컨테이너 정의(컨테이너의 집합체를 보주로 서비스라고 함)
      mysql:
        image: mysql:latest  # 이미지 이름을 명시해서 지정 (Dockerfile이 없어도 실행 가능)
        container_name: springBasic
        environment:   # 환경 변수 설정
          MYSQL_ROOT_PASSWORD: root1234!
          MYSQL_DATABASE: voucher_mgmt
    			MYSQL_CHARSET: utf8mb4
          MYSQL_COLLATION: utf8mb4_unicode_ci
        ports:    
          - "3307:3306"  # 호스트의 3307 포트를 컨테이너의 3306 포트로 매핑
    	volumes:
          - ./data/:/var/lib/mysql
          - ./schema.sql:/docker-entrypoint-initdb.d/schema.sql #schema.sql 실행을 위한 설정. docker-compose.yml과 schema.sql이 같은 루트 경로에 있어야 한다.(경로 수정 가능)
    • ./schema.sql:/docker-entrypoint-initdb.d/schema.sql : docker 컨테이너를 올릴 때 schema.sql 파일의 ddl을 실행하고 싶을 때만 추가하면 된다. 이때, application.yml에서 ddl-auto를 none으로 설정해줘야 한다.

2. Docker Container 실행

```java
$ docker-compose up
```

- 아래와 같이 정상적으로 실행되고, 컨테이너가 생성된다
- 위 명령어를 사용하면 백그라운드에서 실행하지 않고 터미널 세션을 차지하게 되 컨테이너의 로그가 터미널에 표시된다.
    

  • -f 옵션 docker-compose는 기본적으로 docker-compse.yml 또는 docker-compse.yaml 의 이름을 사용. 만약 다른 이름으로 파일을 관리하고 사용한다면 다음과 같이 입력
    $ docker-compose -f docker-compose-custom.yml up
  • -d 옵션 백그라운드에서 docker-compose를 실행하기 위해 사용. 이 옵션을 사용하지 않으면 세션을 차지하게 되어 테스트가 끝날 때까지 해당 서비스를 사용할 수 없음.
    $ docker-compose up -d
  • Dokcer Container 종료
    $ docker-compose down
  • up 명령어
    • docker run 커맨드와 비슷하다
    • 정의 파일에 기재된 내용대로 이미지를 내려받고 컨테이너를 생성 및 실행한다
    • 정의 파일에는 네트워크나 볼륨에 대한 정의도 기재할 수 있어 주변 환경을 한꺼번에 생성할 수 있다.
  • down 명령어
    • 컨테이너와 네트워크를 정지 및 삭제한다
    • 볼륨과 이미지는 삭제하지 않는다
    • 컨테이너와 네트워크 삭제 없이 종료만 하고 싶다면 stop 커맨드를 사용한다

출처

0개의 댓글