MySQL互換データベースMariaDBをDockerで運用:ボリュームでデータを永続化

2024-05-10

DockerコンテナでMariaDBのボリュームを使う

Dockerコンテナは、アプリケーションを独立した環境で実行できる軽量な仮想環境です。MariaDBは、MySQL互換のオープンソースデータベースです。DockerコンテナとMariaDBを組み合わせることで、データベース付きのアプリケーションを簡単にデプロイし、管理することができます。

ボリュームとは

Dockerボリュームは、コンテナ内外のデータを永続的に保存するために使用されるディレクトリです。コンテナが削除されても、ボリューム内のデータは保持されます。これは、データベースなどの永続的なデータを保存するのに理想的な方法です。

MariaDBコンテナでボリュームを使用するには、docker runコマンドを実行する際に -v オプションを使用します。このオプションは、コンテナ内のディレクトリとホストマシン上のディレクトリをマウントします。

docker run -d -p 3306:3306 \
  -v mariadb-data:/var/lib/mysql \
  mariadb

この例では、/var/lib/mysql ディレクトリを mariadb-data という名前のボリュームにマウントします。これにより、MariaDBデータベースのデータはボリュームに保存され、コンテナが削除されても保持されます。

複数のボリュームを使用する

MariaDBコンテナでは、複数のボリュームを使用することができます。たとえば、ログファイルを別のボリュームに保存したい場合は、次のようにします。

docker run -d -p 3306:3306 \
  -v mariadb-data:/var/lib/mysql \
  -v mariadb-logs:/var/log/mysql \
  mariadb

この例では、/var/lib/mysql ディレクトリを mariadb-data ボリュームにマウントし、/var/log/mysql ディレクトリを mariadb-logs ボリュームにマウントします。

永続的なボリュームの作成

ボリュームは、コンテナが作成されるときに自動的に作成されます。ただし、ボリュームを永続的にしたい場合は、ボリュームを明示的に作成する必要があります。

docker volume create mariadb-data

このコマンドは、mariadb-data という名前のボリュームを作成します。このボリュームは、コンテナが削除されても保持されます。

DockerコンテナでMariaDBのボリュームを使用することで、データベースデータを永続的に保存することができます。これは、データベース付きのアプリケーションをデプロイし、管理するのに役立ちます。




MariaDBコンテナを起動する

以下のコマンドを実行して、MariaDBコンテナを起動します。

docker run -d -p 3306:3306 \
  -v mariadb-data:/var/lib/mysql \
  mariadb

このコマンドは、以下のことを行います。

  • -d オプションは、コンテナをデタッチモードで起動します。これは、コンテナがバックグラウンドで実行され、コマンドプロンプトに戻ることができることを意味します。
  • -p 3306:3306 オプションは、コンテナ内のポート 3306 をホストマシンのポート 3306 にマウントします。これは、クライアントがホストマシンから MariaDB に接続できるようにします。
  • mariadb は、使用する MariaDB イメージの名前です。

MariaDBコンテナに接続するには、以下のコマンドを実行します。

docker exec -it mariadb mysql -u root -p
  • docker exec コマンドは、コンテナ内でコマンドを実行します。
  • -it オプションは、コンテナ内に入力して対話的に操作できるようにします。
  • mysql は、使用する MySQL クライアントの名前です。
  • -u root オプションは、root ユーザーとして接続することを指定します。
  • -p オプションは、パスワードプロンプトを表示することを指定します。

MariaDBデータベースを作成する

CREATE DATABASE mydatabase;

このコマンドは、mydbase という名前のデータベースを作成します。

CREATE TABLE mytable (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL
);

このコマンドは、mytable という名前のテーブルを作成します。このテーブルには、idnameemail という 3 つの列があります。

INSERT INTO mytable (name, email)
VALUES ('John Doe', '[email protected]');

INSERT INTO mytable (name, email)
VALUES ('Jane Doe', '[email protected]');

これらのコマンドは、mytable テーブルに 2 行のデータを追加します。

SELECT * FROM mytable;
docker stop mariadb
docker rm mariadb
docker volume rm mariadb-data

注意事項

  • このサンプルコードは、MariaDBコンテナを起動し、使用する方法を示すためのものです。実際のアプリケーションでは、セキュリティとパフォーマンスを考慮した上で、コードを調整する必要があります。
  • 詳細については、MariaDB と Docker のドキュメントを参照してください。



MariaDBコンテナでボリュームを使用するその他の方法

Docker Compose は、複数の Docker コンテナを定義し、デプロイするためのツールです。Docker Compose を使用すると、MariaDBコンテナとボリュームを定義する YAML ファイルを作成できます。

version: "3.9"

services:
  db:
    image: mariadb
    volumes:
      - mariadb-data:/var/lib/mysql

volumes:
  mariadb-data:

この YAML ファイルは、mariadb という名前のサービスと mariadb-data という名前のボリュームを定義します。サービスは、mariadb イメージに基づいており、ボリュームが /var/lib/mysql ディレクトリにマウントされます。

Docker Compose を使用して MariaDB コンテナを起動するには、以下のコマンドを実行します。

docker-compose up -d

環境変数を使用する

MariaDBコンテナの起動時に、MYSQL_DATA_DIR 環境変数を設定して、ボリュームの場所を指定することもできます。

docker run -d -p 3306:3306 \
  -e MYSQL_DATA_DIR=/var/lib/mysql/mariadb \
  mariadb

このコマンドは、/var/lib/mysql/mariadb ディレクトリを MariaDB データディレクトリとして使用します。

docker run コマンドの --mount オプションを使用する

Docker 20.0 以降では、docker run コマンドの --mount オプションを使用して、ボリュームをマウントすることができます。

docker run -d -p 3306:3306 \
  --mount source=mariadb-data,target=/var/lib/mysql,type=volume \
  mariadb

このコマンドは、mariadb-data という名前のボリュームを /var/lib/mysql ディレクトリにマウントします。

MariaDBコンテナでボリュームを使用するには、さまざまな方法があります。どの方法を使用するかは、個々のニーズによって異なります。


mysql docker mariadb


SELECT DISTINCT vs GROUP BY:パフォーマンスの落とし穴

SELECT DISTINCT と GROUP BY は、どちらも重複する行を取り除くために使用されます。しかし、それぞれ異なる方法で処理を行うため、パフォーマンスに違いが生じます。SELECT DISTINCT は、すべての行をスキャンし、重複する行を比較して取り除きます。そのため、データ量が多い場合、処理に時間がかかります。...


「Incorrect string value」エラーはもう怖くない!原因と解決方法を徹底解説

MySQLで「Incorrect string value」エラーが発生する場合、文字列データ型に不正な値が挿入されていることが原因です。このエラーを解決するには、以下の方法を試すことができます。原因「Incorrect string value」エラーが発生する主な原因は以下の2つです。...


ステップバイステップガイド:MariaDBマルチソースレプリケーション環境から不要なConnection_nameを削除する方法

このチュートリアルでは、マルチソースレプリケーション環境において、MariaDBスレーブサーバーから特定のConnection_nameを削除する方法を説明します。前提条件MariaDBスレーブサーバーが実行されている削除対象のConnection_nameの情報を持っている...


MariaDB Galera クラスタでノードをシャットダウンする際のエラー 1047 の原因と解決方法

MariaDB Galera クラスタでノードをシャットダウンしようとすると、以下のエラーが発生する場合があります。このエラーは、シャットダウン処理が完了する前にノードがクラスタから離脱しようとしていることを示します。原因このエラーが発生する主な原因は、以下の2つです。...


SQL SQL SQL Amazon で見る



MySQL Workbenchを使ったMariaDBの操作

必要なものDockerがインストールされていることターミナル操作ができること手順MariaDBコンテナを起動する--name オプションでコンテナ名 mariadb を指定しています。-p オプションでコンテナ内のポート 3306 をホストマシンのポート 3306 にマッピングしています。