昨今ではアプリケーションの実行環境として採用されることが多いDockerは、MySQL環境の構築にも適しています。Dockerを使えば、比較的簡単に使い勝手のよいMySQL環境を構築可能です。
この記事では、そもそもDockerとは何かといった基本から、DockerでMySQL環境を構築する方法を解説します。データベースを継続的に利用するための、「データ永続化」についても解説しているのであわせて参考にして下さい。
目次
そもそもDockerとは?【軽快に動作する仮想環境】
Dockerとは軽快に動作する、コンテナ型仮想化用のプラットフォームです。コンテナ型仮想化ではホストOSのカーネルを共有することで、従来の仮装マシンより軽快な処理能力を実現します。Dockerは、MySQLの実行環境としても最適です。
MySQL環境構築の前に知っておきたい「データ永続化」について
Dockerではコンテナを削除すると、コンテナ内に保存されたデータも削除されてしまいます。DockerコンテナでMySQLを運用する場合も、対象のコンテナを削除すると蓄積されていたデータベースが削除されてしまうのです。
Dockerにおいてデータ永続化とは、コンテナの削除後も対象のデータが削除されずに残るようにすることを指します。DockerコンテナでMySQLを運用する場合も、データの永続化を行っておけば、該当コンテナの削除後もデータベースを「永続的に」利用できるわけです。
データ永続化の方法2つ
データ永続化の方法として、以下2種類があげられます。
・バインドマウント
ホストマシンのファイル・ストレージを、Dockerコンテナにマウントする方法です。
・ボリューム
ホストマシン上のDockerが管理する領域にコンテナ用の保存領域(Data Volume)を作成し、コンテナにマウントする方法です。バインドマウントに比べ機能性が高く、公式ではボリュームを使うことを推奨しています。
※本項の最初に記載したイメージも、ボリュームを使ったデータ永続化を表現しています。
※次項ではボリュームを使い、データ永続化を実現する手順を紹介しています。
Docker上にMySQL環境を構築する手順
Dockerであれば、MySQL環境を短時間で構築することが可能です。以下、実際の手順をみていきましょう。
※利用OSはUbuntu22.04、Docker及びDocker Compose環境は構築済であるものとします。Docker Composeについては、以下記事を参考にして下さい。
【入門】Docker Composeとは?インストールと使い方
Docker Composeは、Dockerを日常的によく使う人程役立つツールです。多くのDockerコンテナを操作する必要があるケースでは、Docker Composeを使うことで作業の負担が大幅に軽減されます。一方で、Docker Composeとは何かや使い方について知らない方も多いのではないでしょうか。 この記事ではDocker Composeの概要と、インスト―ル方法を解説しています。そ…
MySQL環境の構築手順
以下、MySQLコンテナを起動するまでの手順をみていきましょう。本手順では、MySQLのデータがコンテナ外のData Volumeへ保存されるようにすることで、データ永続化も実現しています。この先の項では、データ永続化が成功しているかの確認方法も紹介しているため、順番に確認して下さい。
MySQLの公式イメージ(最新)を取得します。
docker image pull mysql:latest
「test」という名前のボリューム(Data Volume)を作成します。
docker volume create test
公式イメージを基にMySQLのコンテナを作成します。
docker container run --name test-mysql -v test:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hogehoge -d mysql:latest
※「–name」のあとにコンテナ名(「test-mysql」)を指定しています。
※「-v」で先ほど作成したボリューム(「test」)を、Data Volumeとして指定しています。
※「-e」でパスワードを指定しています。上記例では「hogehoge」の部分です。
パスワードは任意で変更してください。
構築したMySQLコンテナへ接続
作成したMySQLコンテナの中へ入ります。
docker exec -it test-mysql bash
MySQLに接続します。
mysql -p
※パスワードを求められますので、「docker container run…」コマンドで指定した
パスワードを入力してください。
以下コマンドを順番に実行し、サンプルのデータベースを作成します。
create database test;
use test;
create table test(id int, name varchar(10));
insert into test(id, name) values (1,"yamada");
select文で、正常にデータベースが作成されたか確認します。
select * from test;
以下のように、作成したデータベースが表示されれば成功です。
exitコマンドで、コンテナを抜けます。
exit
※OSに戻るまで、exitコマンドを2回実行する必要があります。
データ永続化が成功しているかの確認
作成したコンテナを停止します。
docker container stop test-mysql
別のコンテナ名で改めてMySQLのコンテナを作成・起動します。
docker container run --name test-mysql2 -v test:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hogehoge -d mysql:latest
※コンテナ名をtest-mysql2としています。
※コンテナ名以外は先ほどと変えていません。
再度、MySQLコンテナの中へ入ります。
docker exec -it test-mysql2 bash
MySQLに接続します。
mysql -p
※パスワードを求められますので、「docker container run…」コマンドで指定した
パスワードを入力してください。
select文で、データベースが存在するか確認します。
select * from test;
先程作成したデータベースが表示され、コンテナ停止後もデータが残っている(永続性がある)ことが確認できます。
まとめ
Dockerはコンテナ型仮想化技術によって、軽快に動作するアプリケーション実行環境を確保できるプラットフォームです。MySQL環境構築用としても、Dockerは適しています。
ただしDockerでMySQL環境(コンテナ)を作成する場合、そのままではコンテナ削除によりデータベースも削除される点は注意しなくてはなりません。コンテナ削除後もデータベースを継続的に利用するためには、データ永続化の設定が必要です。具体的には、コンテナ外部の領域(Data Volume)に、コンテナ上のデータが保存されるように設定します。
開発・検証・プログラミング学習に。無駄なコストもかけたくないあなたにおすすめのVPS
カゴヤのVPSは初期費用無料でアカウント登録さえしておけば、必要なときだけ日額課金でサーバーを立ち上げ可能!料金は使った分だけ。