#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS