MySQL、Docker、MariaDB を用いた既存データベース付き MariaDB マルチステージコンテナーの作成方法

2024-05-20

MySQL、Docker、MariaDB を用いた既存データベース付き MariaDB マルチステージコンテナーの作成方法

前提条件:

  • Docker がインストールされていること
  • MySQL クライアントがインストールされていること
  • MariaDB データベースが作成されていること

手順:

  1. 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 サーバーを起動します。
  2. データベースファイルのコピー:

    mydatabase.sql ファイルを Dockerfile と同じディレクトリに配置します。

    このファイルは、MariaDB にインポートする既存のデータベースのダンプです。

  3. コンテナーの作成:

    以下のコマンドを実行して、MariaDB コンテナーを作成します。

    docker build -t mariadb-with-db .
    

    このコマンドは、現在のディレクトリ (.) をビルドコンテキストとして使用し、mariadb-with-db という名前の新しいイメージを作成します。

  4. docker run -d --name mariadb-with-db -p 3306:3306 mariadb-with-db
    

    このコマンドは、mariadb-with-db という名前で新しいコンテナーを実行し、ポート 3306 をホストマシン上のポート 3306 にマップします。

  5. データベースへの接続:

    以下のコマンドを実行して、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 という名前のテーブルを作成します。このテーブルには、idusernamepassword という 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 イメージをベースとした実行ステージを使用します。 ビルドステージは、データベーススキーマの作成とデータのインポートに使用されます。 実行ステージは、軽量で実行可能なコンテナーを作成するために使用されます。

    1. 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


          迷ったらコレ!PHPでMySQLテーブルのカラム名を効率的に取得する方法

          PHPでMySQLデータベースのテーブルのカラム名を取得するには、いくつかの方法があります。方法1:SHOW COLUMNS ステートメントを使うこれは最も簡単な方法です。SHOW COLUMNS ステートメントは、指定したテーブルのカラムに関する情報をすべて返します。...


          MacでMySQLのrootユーザーパスワードを設定する方法

          このチュートリアルでは、Mac OS XでMySQLのrootユーザーパスワードを設定する方法を説明します。ターミナルを開くSpotlight検索を使用して「ターミナル」を検索し、開きます。MySQLを起動する次のコマンドを入力してMySQLサーバーを起動します。...


          最新版へのアップグレードもスムーズに!MySQL 5.7からMySQL 8への移行ガイド

          最初に、MySQLサービスを停止する必要があります。以下のコマンドを実行してください。次に、以下のコマンドを使用して、MySQL関連のパッケージを削除します。このコマンドは、MySQLサーバーとその関連ファイル、データベース、および設定ファイルをすべて削除します。...


          MySQLサーバーへの接続エラー「Can't connect to MySQL server on '127.0.0.1' (10061) (2003)」の原因と解決策

          MySQLサーバーが起動していない最も可能性の高い原因は、MySQLサーバーが起動していないことです。以下のコマンドを実行して、サーバーが起動していることを確認してください。サーバーが起動していない場合は、以下のコマンドで起動してください。...


          MariaDB 10.1: CentOS 7でパスワードセキュリティを強化!古いパスワードから新しいパスワードに変更 & secure-authを有効化

          このチュートリアルでは、CentOS 7 で実行されている MariaDB 10. 1 の古いパスワードを新しいパスワードに変更し、secure-auth を有効にする方法を説明します。secure-auth は、MariaDB の認証メカニズムを強化するセキュリティ機能です。有効にすると、パスワードハッシュがより安全な方法で保存され、ブルートフォース攻撃のリスクが軽減されます。...


          SQL SQL SQL SQL Amazon で見る



          【保存版】Dockerコンテナ内のMariaDBにデータをスムーズに投入

          Dockerfileは、Dockerイメージを構築する際に使用する設定ファイルです。このファイル内に CMD や ENTRYPOINT を用いて、MariaDB起動時にデータ投入スクリプトを実行するコマンドを記述できます。メリット:シンプルで分かりやすい


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

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