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
파일을 생성 한 뒤 다음과 같이 설정해준다.
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 한글 인코딩 해결 방법
yml 파일에 오타가 있어 보입니다~ port -> ports