docker-compose 적용하기 (mysql)

yeon·2021년 7월 26일
0

docker-compose 적용

docker compose란?

하나의 시스템은 여러개의 애플리케이션이 서로 의존하면서 구성되어있다.

하나의 컨테이너가 하나의 에플리케이션을 담당하면 여러개의 컨테이너가 필요하다 .

docker compose를 이용하면 여러개의 컨테이너의 실행을 한번에 관리할 수 있다.

여러 컨테이너를 하나의 파일에 정의해두고 올리거나 내릴 수 있다.


프로젝트 경로 하위에 docker 디렉토리를 생성, docker-compose.yml 생성

로치가 공유해주신 것을 기반으로 docker-compose.yml을 생성했다.

yml파일을 적어준 환경변수를 어떻게 설정하는지 찾아보니 .env파일을 생성하면 된다고 한다.

MASTER_DB_PASSWORD=password

port is already allocated 에러 발생

docker-compose up 명령어로 실행했는데 Cannot start service master-db: driver failed programming external connectivity on endpoint, port is already allocated 에러가 발생했다.

해당 블로그를 보고 이미 할당된 port를 kill 하니 해결했다.

// 특정 포트번호로 사용중인지 확인하는 명령어
$ sudo lsof -i :3306

InnoDB: Unable to lock ./ibdata1 error: 11

다시 실행하니 test-db에 대한 로그가 끊임없이 찍히는데 로그로 봐서는 master-db 와 같은 디비를 사용하려고 해서 그러는게 아닌가 싶다.

알고보니 yml파일을 잘못 작성해서 그렇다... test-db에 대한 volumes을 master-db로 해놔서 에러가 발생했다. test-db로 변경하니 잘 실행된다.

version: "3"
services:
  master-db:
    image: mysql:5.7
    container_name: mysql-master
    environment:
      MYSQL_DATABASE: "itda"
      MYSQL_ROOT_PASSWORD: "${MASTER_DB_PASSWORD}"
      TZ: Asia/Seoul
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
    volumes:
        - ./master-db:/var/lib/mysql
    ports:
      - "3306:3306"
    restart: always

  test-db:
    image: mysql:5.7
    container_name: mysql-test
    environment:
      MYSQL_DATABASE: "itda"
      MYSQL_ROOT_PASSWORD: "${MASTER_DB_PASSWORD}"
      TZ: Asia/Seoul
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
    volumes:
        - ./test-db:/var/lib/mysql
    ports:
      - "3307:3306"
    restart: always

volumes에서 앞에 있는 ./test-db가 로컬 경로고, : 뒤에 있는 /var/lib/mysql 경로가 도커 경로


참고: https://junlab.tistory.com/219

https://4urdev.tistory.com/81

https://luran.me/230 (환경변수)

0개의 댓글