#author("2021-06-06T08:16:22+09:00","default:ryuichi","ryuichi")
#author("2021-06-06T08:19:10+09:00","default:ryuichi","ryuichi")
* MySQLデータを永続化するコンテナを作る [#jfe4a60c]
** MySQLデータを永続化する時の問題点 [#ve31847b]
- 公式のMySQLイメージはMySQLデータをDockerのデータボリュームに保存する
- したがって、コンテナをコミットしてもイメージにMySQLデータは含まれない
- ここではデータボリュームを使わずに、イメージに保存できるようにする
** 1. 公式MySQLイメージのカスタマイズ [#v14635e0]
*** 1.1 Dockerfileの作成 [#e28c95d9]
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
- 適当なディレクトリで上の内容でDockerfileを作成する
*** 1.2 Dockerfileのビルド [#je9cce3e]
$ docker build . -t my-mysql
- Dockerfileからmy-mysqlイメージをビルドする
** 2. コンテナの起動とデータ保存 [#zf3b9782]
** 2. カスタマイズしたコンテナの起動とテストデータをDBに保存 [#zf3b9782]
*** 2.1 コンテナの起動 [#b4456f21]
docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=root -it my-mysql
*** 2.2 MySQLにDB作成、データ保存 [#nc3a42a9]
*** 2.2 MySQLにDB作成、テストデータを保存 [#nc3a42a9]
docker exec test-mysql mysql -u root --password=root mysql -e "create database test_db"
docker exec test-mysql mysql -u root --password=root test_db -e "create table t1 (id int); insert into t1 values (100)"
*** 2.3 コンテナを再起動し、コンテナ内に保存されたデータの確認 [#o0e6b7fc]
docker stop test-mysql
docker start test-mysql
docker exec -it test-mysql mysql -u root --password=root test_db -e "select * from t1"
** 3. コンテナからイメージを作成 [#vad29609]
** 3. カスタマイズしてデータ保存したコンテナからイメージを作成 [#vad29609]
*** 3.1 データが保存されたコンテナからイメージを作成 [#j695aa65]
*** 3.1 カスタマイズしてデータが保存されたコンテナからイメージを作成 [#j695aa65]
docker commit test-mysql my-mysql
*** 3.2 作成したイメージをDockerHubにPUSH [#ecd4c1c5]
docker login
docker tag my-mysql [DOCKERHUB_USERNAME]/my-mysql
docker push [DOCKERHUB_USERNAME]/my-mysql
*** 3.3 確認のため、ローカルのコンテナ、イメージを削除 [#q94e23d3]
docker rm -f test-mysql
docker rmi my-mysql
*** 3.4 DockerHubのイメージをPULLしてコンテナ起動 [#h201c342]
*** 3.4 DockerHubにPUSHしたイメージをPULLしてコンテナ起動 [#h201c342]
docker run --name test-mysql -it [DOCKERHUB_USERNAME]/my-mysql
*** 3.5 保存されたデータの確認 [#n07655f5]
*** 3.5 DockerHubからPULLしたイメージに保存されたデータがあることを確認 [#n07655f5]
docker exec -it test-mysql mysql -u root --password=root test_db -e "select * from t1"
** 参考 [#s8e0aaba]
https://stackoverflow.com/questions/30740828/commit-data-in-a-mysql-container