【保存版】Dockerコンテナ内のMariaDBにデータをスムーズに投入
Dockerコンテナ内のMariaDBにデータを投入する方法
Dockerfileは、Dockerイメージを構築する際に使用する設定ファイルです。このファイル内に CMD
や ENTRYPOINT
を用いて、MariaDB起動時にデータ投入スクリプトを実行するコマンドを記述できます。
FROM mariadb:10.5
# データ投入スクリプトをコピー
COPY ./init.sql /docker-entrypoint-initdb/
# MariaDB起動時にスクリプトを実行
CMD ["mysqld", "--init-file", "/docker-entrypoint-initdb/init.sql"]
メリット:
- シンプルで分かりやすい
- イメージビルド時にデータ投入処理を組み込める
- イメージサイズが大きくなる
- 投入するデータ量が多い場合、ビルド時間が長くなる
docker exec コマンドを利用する
コンテナが起動している状態であれば、docker exec
コマンドを用いてコンテナ内部にシェルを呼び出し、データ投入スクリプトを実行することができます。
docker exec -it <コンテナID> mysql -u root -p < init.sql
- 柔軟性が高い
- 既存のコンテナにデータを追加投入しやすい
- 運用手順が複雑になる
- 毎回コンテナ内部にシェルを呼び出す必要がある
docker-compose.yml
ファイルを用いて、MariaDBコンテナとデータ投入用コンテナをマルチコンテナとして定義・起動することができます。
version: "3.8"
services:
mariadb:
image: mariadb:10.5
volumes:
- ./data:/var/lib/mysql
ports:
- "3306:3306"
init:
image: busybox
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
entrypoint: ["sh", "-c", "docker-compose exec mariadb mysql -u root -p < /docker-entrypoint-initdb.d/init.sql"]
- 定義ファイルで構成を管理できる
- 複数のコンテナをまとめて起動・停止できる
- 複雑な設定が必要になる
- ファイルの記述量が多くなる
各方法の注意点
- いずれの方法においても、MariaDBの起動ユーザーとパスワードを適切に設定する必要があります。
- データ投入スクリプトは、データベースのスキーマ定義や初期データの内容に合わせて作成する必要があります。
- 大容量のデータファイルを投入する場合は、ネットワーク帯域幅やコンテナの処理能力に注意する必要があります。
これらの情報を参考に、状況に合わせて最適な方法を選択してください。
Dockerコンテナ内のMariaDBにデータを投入するサンプルコード
Dockerfile
FROM mariadb:10.5
# データフォルダを永続化する
VOLUME /var/lib/mysql
# データ投入スクリプトをコピー
COPY ./init.sql /docker-entrypoint-initdb.d/
# MariaDB起動時にスクリプトを実行
CMD ["mysqld", "--init-file", "/docker-entrypoint-initdb.d/init.sql"]
init.sql
-- データベース作成
CREATE DATABASE IF NOT EXISTS mydb;
-- テーブル作成
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
-- サンプルデータ投入
INSERT INTO users (name, email) VALUES ("Taro Yamada", "[email protected]");
INSERT INTO users (name, email) VALUES ("Hanako Sato", "[email protected]");
使用方法
- 上記の
Dockerfile
とinit.sql
ファイルを同じディレクトリに保存します。 - 以下のコマンドを実行して、MariaDBコンテナをビルド and 起動します。
docker build -t my-mariadb-db .
docker run -d --name my-mariadb-db -p 3306:3306 my-mariadb-db
- データベースクライアントを使用して、MariaDBコンテナに接続し、投入されたデータを確認できます。
docker exec -it my-mariadb-db mysql -u root -p
mysql> USE mydb;
mysql> SELECT * FROM users;
ポイント
init.sql
ファイルには、データベースの作成、テーブルの作成、初期データの投入などを行いたいSQL文を記述します。- 上記はあくまで一例であり、データベースのスキーマや投入するデータ量に合わせて適宜変更する必要があります。
このサンプルコードを参考に、状況に合わせてデータ投入スクリプトを作成してください。
Dockerコンテナ内のMariaDBにデータを投入するその他の方法
docker exec -it <コンテナID> mysql -u root -p < init.sql
version: "3.8"
services:
mariadb:
image: mariadb:10.5
volumes:
- ./data:/var/lib/mysql
ports:
- "3306:3306"
init:
image: busybox
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
entrypoint: ["sh", "-c", "docker-compose exec mariadb mysql -u root -p < /docker-entrypoint-initdb.d/init.sql"]
Dockerコンテナ内のMariaDBにデータを投入するには、主に以下の3つの方法があります。
それぞれの方法にはメリットとデメリットがあるので、状況に合わせて最適な方法を選択してください。
上記以外にも、バックアップからの復元や外部データソースからのインポートなど、様々な方法でデータ投入を行うことができます。
具体的な方法については、それぞれの方法の詳細情報や、利用するツールやライブラリのドキュメントを参照してください。
sql docker mariadb