본문 바로가기
Web Development/Docker

도커로 MySQL 띄우기

by doriver 2024. 6. 13.

MySQL에서 Data Export해서 

프로젝트에 필요한 자료들 초기화

 

volume으로 mount해서

컨테이너와 호스트 시스템 간에 데이터를 쉽게 공유하고 지속성을 유지

 

1. 도커 buildContext( 폴더 ) 세팅

C:\dockerTest\mysql01 로 할꺼임
하위 폴더로 data폴더, init_db폴더 만들어줌


init_db폴더

db초기화 자료, MySQL Workbench의 Data Export에서 export한 데이터들 있음
도커 컨테이너의 /docker-entrypoint-initdb.d 폴더로 복사할꺼
도커파일에서  ADD  ./init_db/* /docker-entrypoint-initdb.d

data폴더

도커 컨테이너의 /var/lib/mysql 와 volume으로 연결할꺼 
컨테이너에있는 데이터가 그대로 반영됨, 컨테이너 삭제해도 데이터 남음
docker run할때, -v C:\dockerTest\mysql01\data:/var/lib/mysql

도커 컨테이너의 /docker-entrypoint-initdb.d 폴더

이 디렉토리에 있는 스크립트들을 컨테이너 시작 시 자동으로 실행하여 초기 데이터베이스 설정이나 데이터베이스 초기화 작업을 수행

도커 컨테이너의 /var/lib/mysql 디렉토리

MySQL 데이터베이스의 데이터 파일이 저장되는 기본 경로
MySQL 서버가 데이터를 저장하고 관리하는 주요 위치

2. Dockerfile 구성

C:\dockerTest\mysql01에 도커파일 생성

FROM mysql:8.0
ENV MYSQL_USER user
ENV MYSQL_PASSWORD user
ENV MYSQL_ROOT_PASSWORD root
ADD  ./init_db/* /docker-entrypoint-initdb.d

./init_db/ 디렉토리에 있는 모든 파일을 도커 컨테이너의 /docker-entrypoint-initdb.d 디렉토리로 복사

3. 이미지 빌드

도커 데스크탑 실행해서, 도커 킨다음에

cmd에서 C:\dockerTest\mysql01로 이동후

docker build -t mysql-image .

 

4. 컨테이너 실행

docker run --name mysql-container -d -p 3307:3306 -v C:\dockerTest\mysql01\data:/var/lib/mysql mysql-image


호스트의 포트 3307을 컨테이너의 포트 3306에 매핑
( 3306은 호스트 MySQL이 사용중 )

도커데스크탑 - 해당컨테이너에서
bind mounts에 C:\dockerTest\mysql01\data 경로 잡힘



C:\dockerTest\mysql01\data에 여러 파일들 생김( 이걸 어떻게 다뤄야할까, table은 IBD파일 인듯 )

 

컨테이너에서 폴더 구조랑 파일들 볼수 있음

 

5. 컨테이너에서 mysql접속후 데이터 확인, insert로 추가

도커데스크탑 - 해당 컨테이너 - Exec에서 했음

초기화 한 테이블과 데이터들 잘생성되었음

mysql - u root -p
show databases;
use jap_test
show tables;

 

이후 select문으로 확인

 

아직 못한거, 더 해볼만 한거

컨테이너에서 데이터 조작한거 data폴더에 제대로 반영됐는지 확인하고싶었는데 못함

( volume제대로 동작하는지 확인 )

컨테이너 삭제후에도 , 컨테이너에서 조작된 데이터들 보존되는지 확인해보고 싶었음

 

MySQL워크벤치로 컨테이너의mysql 접속해보려 했는데 못함