Web Development/Docker

도커로 MySQL 띄우기

doriver 2024. 6. 13. 18:47

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 접속해보려 했는데 못함