[Docker]mysqlデータの永続化

アプリケーションを作る時にdockerで環境構築をするようにしています。

コンテナ内で作ったDBデータをコンテナを停止し再起動しても永続化できるような設定をしているので、その方法を書いていきます。

docker-compose.ymlで管理します。

ディレクトリ構成

db/data以下にテーブルなどのDBデータを保存します

db/sql/以下に、docker-composeを動かした時に実行するSQLをファイル管理して置いておきます。

db/my.cnfには、mysqlの設定を書きます。

 

docker-compose.yml

 

詳細説明

docker-compose.ymlの内容を詳細に見ていきます。

volumes

  • ./db/data:/var/lib/mysql

コンテナ内で作られたmysqlデータ(テーブルや実際のデータなど)は、/var/lib/mysql/内に作られるので、ローカルの/db/dataにマウントすることで、コンテナを停止してもデータが永続化するようにします。

 

  • ./db/sql:/docker-entrypoint-initdb.d

コンテナを立ち上げると、自動的にdocker-entrypoint-initdb.d内にあるファイルが、アルファベット順に実行されます。

なので、コンテナを立ち上げた時点で初期化したいファイル(今回の場合は.sqlファイル)を、docker-entrypoint-initdb.d内にマウントすれば、いちいちコンテナ内に入って処理をしなくてもすみます。

今回の場合は、コンテナを立ち上げた時点でテーブルを作成したいので、sqlファイルを格納しているdb/sqldocker-entrypoint-initdb.d内にマウントしています。

 

  • ./db/my.cnf:/etc/mysql/conf.d/my/cnf

ローカルで設定したmy.cnfファイルをコンテナ内の/etc/mysql/conf.d/my/cnfn内に配置することで、設定ファイルをローカルで管理できるようになります。

 

まとめ

DBを使うアプリケーションを作る時には、上記のような設定をしておけば、ローカルの環境を汚さず簡単に環境構築することができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA