docker-compose를 활용하여 MySQL 설치하기

라모스·2022년 6월 26일
1

삽질.log

목록 보기
8/12
post-thumbnail
post-custom-banner

로컬 환경

  • M1 Macbook Pro 13'
  • Docker, docker-compose
  • DBeaver
  • MySQL 8.0

일반적인 docker 명령어 사용 시

docker run --platform linux/amd64
-p 3306:3306
--name [컨테이너 이름]
-e MYSQL_ROOT_PASSWORD=[루트 유저 비밀번호]
-e MYSQL_DATABASE=[데이터베이스 이름]
-e MYSQL_USER=[유저 이름]
-e MYSQL_PASSWORD=[비밀번호]
-d mysql

docker-compose.yml 사용 시

원하는 디렉토리에 docker-compose.yml 파일을 생성 한 뒤 다음과 같이 설정해준다.

version: '3'
services:
  db:
    image: mysql:8.0
    container_name: [컨테이너 이름]
    restart: always
    ports:
      - [로컬 포트]:3306
    environment:
      MYSQL_ROOT_PASSWORD: [루트 유저 비밀번호]
      TZ: Asia/Seoul
    volumes:
      - ./db/mysql/data:/var/lib/mysql
      - ./db/mysql/init:/docker-entrypoint-initdb.d
    platform: linux/x86_64

이 후 다음 명령어를 실행해준다.

docker-compose up -d

예시

docker-compose.yml을 통해 MySQL을 구축하는 동시에 초기 데이터를 불러와 사용하고 싶다.

먼저, 디렉토리 구조는 다음과 같다.

나의 경우, 업무에 바로 쓰는 SQL 튜닝이라는 책의 예제 sql 파일들을 공개된 GitHub Repository로 부터 불러왔다.

이 후, docker-compose.yml 파일을 다음과 같이 작성하였다.

version: '3'
services:
  db:
    image: mysql:8.0
    container_name: mysql-ramos
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Seoul
    ports:
      - 3306:3306
    volumes:
      - ./mysql-init-files/:/docker-entrypoint-initdb.d
    platform: linux/x86_64

이 후, docker-compose up -d로 실행하였고 docker desktop에 다음과 같이 정상적으로 실행 중인 모습을 확인할 수 있었다.

터미널에서 해당 컨테이너에 접속한다.
docker exec -it mysql-ramos bash

docker-entrypoint-initdb.d 경로 내에 기존 로컬에 있던 ./mysql-init-files/ 경로의 모든 파일들이 들어가 있는 것을 확인할 수 있었고, mysql -uroot -p --port 3306 < data_setting.sql을 통해 데이터를 복사하였다.

그 결과 tuning이라는 DB가 생성되어 있음을 확인할 수 있고,

use tuning;을 통해 해당 DB를 선택하고 테이블을 조회하면 복사해오고자 했던 데이터들을 정상적으로 확인할 수 있다.
// show tables; 시 테이블명이 ????로 처리되고 터미널 상에서 한글 입력도 되지 않아서 DBeaver로 해당 DB에 접속하였다.

📌 참고로 utf-8 세팅이 되어 있어야 한글이 깨지지 않는다. data_setting.sql의 일부를 다음과 같이 변경하였다.

CREATE DATABASE IF NOT EXISTS `tuning` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT ENCRYPTION='N';
USE `tuning`;
...

// UTF-8 세팅은 다음 링크를 참고하자. -> 참고: 컨테이너 MySQL 한글 인코딩 해결 방법

References

profile
Step by step goes a long way.
post-custom-banner

2개의 댓글

comment-user-thumbnail
2024년 5월 23일

yml 파일에 오타가 있어 보입니다~ port -> ports

1개의 답글