MySQL、Docker、MariaDB を用いた既存データベース付き MariaDB マルチステージコンテナーの作成方法
MySQL、Docker、MariaDB を用いた既存データベース付き MariaDB マルチステージコンテナーの作成方法
前提条件:
- Docker がインストールされていること
- MySQL クライアントがインストールされていること
- MariaDB データベースが作成されていること
手順:
Dockerfileの作成:
以下の内容の
Dockerfile
ファイルを作成します。FROM mariadb:10.6 ENV MYSQL_ROOT_PASSWORD password ENV MYSQL_DATABASE mydatabase RUN mkdir -p /var/lib/mysql RUN chown -R mysql:mysql /var/lib/mysql COPY mydatabase.sql /var/lib/mysql/mydatabase.sql CMD ["/usr/bin/mysqld"]
この
Dockerfile
は、MariaDB 10.6 イメージに基づいています。以下は、各行の説明です。FROM mariadb:10.6
: MariaDB 10.6 イメージをベースにします。ENV MYSQL_ROOT_PASSWORD password
: MySQL root ユーザーのパスワードを設定します。ENV MYSQL_DATABASE mydatabase
: 使用するデータベースの名前を設定します。RUN mkdir -p /var/lib/mysql
: MySQL データディレクトリを作成します。RUN chown -R mysql:mysql /var/lib/mysql
: MySQL ユーザーとグループに MySQL データディレクトリの所有権を設定します。COPY mydatabase.sql /var/lib/mysql/mydatabase.sql
: 既存のデータベースファイルをコンテナーにコピーします。CMD ["/usr/bin/mysqld"]
: MariaDB サーバーを起動します。
データベースファイルのコピー:
mydatabase.sql
ファイルをDockerfile
と同じディレクトリに配置します。このファイルは、MariaDB にインポートする既存のデータベースのダンプです。
コンテナーの作成:
以下のコマンドを実行して、MariaDB コンテナーを作成します。
docker build -t mariadb-with-db .
このコマンドは、現在のディレクトリ (
.
) をビルドコンテキストとして使用し、mariadb-with-db
という名前の新しいイメージを作成します。docker run -d --name mariadb-with-db -p 3306:3306 mariadb-with-db
このコマンドは、
mariadb-with-db
という名前で新しいコンテナーを実行し、ポート 3306 をホストマシン上のポート 3306 にマップします。データベースへの接続:
以下のコマンドを実行して、MySQL クライアントを使用してコンテナー内のデータベースに接続します。
mysql -u root -p -h 127.0.0.1 -P 3306
このコマンドは、MySQL クライアントを起動し、root ユーザーとしてログインし、ホスト
127.0.0.1
のポート3306
に接続します。パスワードを入力すると、データベースに接続できます。
注意事項:
- このチュートリアルでは、MariaDB 10.6 と MySQL クライアントを使用しています。使用するバージョンに合わせてコマンドを変更する必要があります。
- 既存のデータベースファイルは、MySQL クライアントを使用してダンプすることができます。
- コンテナー内のデータベースは、コンテナーが削除されると失われます。永続的なストレージが必要な場合は、データベースを外部のボリュームに保存する必要があります。
FROM mariadb:10.6
ENV MYSQL_ROOT_PASSWORD password
ENV MYSQL_DATABASE mydatabase
RUN mkdir -p /var/lib/mysql
RUN chown -R mysql:mysql /var/lib/mysql
COPY mydatabase.sql /var/lib/mysql/mydatabase.sql
CMD ["/usr/bin/mysqld"]
mydatabase.sql:
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
);
INSERT INTO users (username, password) VALUES
('user1', 'password1'),
('user2', 'password2');
この mydatabase.sql
ファイルは、mydatabase
という名前の新しいデータベースを作成し、users
という名前のテーブルを作成します。このテーブルには、id
、username
、password
という 3 つの列があります。
docker build -t mariadb-with-db .
docker run -d --name mariadb-with-db -p 3306:3306 mariadb-with-db
mysql -u root -p -h 127.0.0.1 -P 3306
MariaDB マルチステージコンテナーを作成するには、いくつかの方法があります。
上記で紹介した方法は、Dockerfile
において 2 つのステージを使用する方法でしたが、ここでは別の方法を紹介します。
この方法は、Alpine Linux イメージをベースとしたビルドステージと、MariaDB イメージをベースとした実行ステージを使用します。 ビルドステージは、データベーススキーマの作成とデータのインポートに使用されます。 実行ステージは、軽量で実行可能なコンテナーを作成するために使用されます。
FROM alpine:latest AS build WORKDIR /app COPY mydatabase.sql . RUN apk add --no-cache mariadb-client RUN mysql -u root -p < mydatabase.sql FROM mariadb:10.6 WORKDIR /var/lib/mysql COPY --from=build /app/mydatabase.sql . CMD ["/usr/bin/mysqld"]
この
Dockerfile
は、Alpine Linux イメージと MariaDB イメージの 2 つのステージを使用しています。 以下は、各行の説明です。ビルドステージ:
FROM alpine:latest AS build
: Alpine Linux イメージの最新バージョンをbuild
という名前のビルドステージとして使用します。WORKDIR /app
: 作業ディレクトリを/app
に設定します。RUN apk add --no-cache mariadb-client
: MariaDB クライアントをインストールします。RUN mysql -u root -p < mydatabase.sql
:mydatabase.sql
ファイルを使用してデータベースを初期化します。
WORKDIR /var/lib/mysql
: 作業ディレクトリを/var/lib/mysql
に設定します。COPY --from=build /app/mydatabase.sql .
: ビルドステージからmydatabase.sql
ファイルをコピーします。
mysql docker mariadb