728x90
반응형
MySQL 컨테이너를 생성할 때 애플리케이션에서 필요로 하는 데이터베이스 스키마와 초기 데이터를 생성하도록 Dockerfile을 정의하고 이미지를 생성하는 방법입니다.
초기 데이터 생성
데이터베이스 초기화에 사용할 데이터를 MySQL Workbench의 Data Export 기능을 이용해서 생성합니다.
지정한 디렉터리에 테이블 생성 및 데이터 추가 쿼리를 포함한 sql 파일이 생성된 것을 확인할 수 있습니다.
Dockerfile 생성
작업디렉터리에 Dockerfile을 생성합니다.
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=springbootdb
ADD ./init_db/* /docker-entrypoint-initdb.d
/docker-entrypoint-initdb.d에 있는 확장명이 .sh, .sql, .sql.gz인 파일을 추가하면 컨테이너가 처음 시작될 때 해당 파일을 알파벳 순으로 실행합니다. 해당 디렉토리에 Export한 파일을 추가하면 초기 데이터를 포함한 사용자 정의 이미지를 쉽게 만들 수 있습니다. (참고: https://hub.docker.com/_/mysql)
이미지 생성
docker image build 명령으로 이미지를 생성합니다.
## 이미지 생성
C:\docker> docker image build -t mysql-with-data .
[+] Building 0.1s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 31B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/mysql:5.7 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 626B 0.0s
=> [1/2] FROM docker.io/library/mysql:5.7 0.0s
=> CACHED [2/2] ADD ./init_db/* /docker-entrypoint-initdb.d 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:b9085aba9d99399878472a4007c5af385fc33f00a0ea72b4ec73981864a12b19 0.0s
=> => naming to docker.io/library/mysql-with-data
## 이미지 확인
C:\docker> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql-with-data latest b9085aba9d99 13 minutes ago 455MB
mysql 5.7 0018a8d83892 7 days ago 455MB
컨테이너 실행
생성한 이미지로 컨테이너를 실행합니다. 이때 볼륨 맵핑을 통해 추가 생성, 갱신된 데이터가 유지될 수 있도록 합니다.
## 컨테이너 실행
C:\docker> docker container run -d -p 33060:3306 --rm -v c:\docker\mysql_data:/var/lib/mysql mysql-with-data
73c38d472ffaa5b6b70502e08e8201f13be1100671fb1f6274f9be91bf8efc2a
## 컨테이너 확인
C:\docker> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73c38d472ffa mysql-with-data "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:33060->3306/tcp upbeat_ride
초기 데이터 설정 확인
테이블이 생성되고 데이터가 추가된 것을 확인할 수 있습니다.
업데이트 내용 유지
볼륨 맵핑 결과, 데이터 변경 후 컨테이너를 재시작했을 때 업데이트 내용이 유지되는 것을 확인할 수 있습니다.
## 컨테이너 종료
C:\docker> docker container stop 73c3
73c3
## 컨테이너 재실행
C:\docker> docker container run -d -p 33060:3306 --rm -v c:\docker\mysql_data:/var/lib/mysql mysql-with-data
beab8d310fc07abc03f1486d78422b0ad3e75faf9149778dd6c2962f991d62a9
이미지 등록
## 이미지 확인
C:\docker> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql-with-data latest b9085aba9d99 5 hours ago 455MB
mysql 5.7 0018a8d83892 7 days ago 455MB
## 이미지 태그명 변경
C:\docker> docker image tag mysql-with-data myanjini/mysql-with-data:lab
## 이미지 확인
C:\docker> docker image ls
mysql-with-data latest b9085aba9d99 5 hours ago 455MB
myanjini/mysql-with-data lab b9085aba9d99 5 hours ago 455MB
mysql 5.7 0018a8d83892 7 days ago 455MB
## 이미지 등록
C:\docker> docker image push myanjini/mysql-with-data:lab
The push refers to repository [docker.io/myanjini/mysql-with-data]
26573019562d: Layer already exists
... (생략) ...
6b4c150e3167: Layer already exists
lab: digest: sha256:2da3766d37de54bdadd924bf01178b9b6349d6ff468091177ba30a05366a808a size: 2826
728x90
반응형
'컨테이너 > 도커' 카테고리의 다른 글
깃허브로부터 가져온 리액트 코드를 실행하는 도커 이미지 제작 (0) | 2023.03.16 |
---|---|
윈도우에 도커 데스크탑 설치 (0) | 2023.02.24 |
Docker Desktop 설치 (0) | 2022.01.24 |
스웜을 이용한 실전 애플리케이션 개발 3 (0) | 2020.09.23 |
스웜을 이용한 실전 애플리케이션 개발 2 (0) | 2020.09.23 |
댓글