ウェブサイト検索

Linux で Docker を使用して MySQL をセットアップする方法


MySQL を初めて使用する場合、または MySQL データベースをすばやく簡単にインストールしたい場合は、この記事が最適です。この記事では、Linux でDocker および Docker compose を使用して MySQL をセットアップする方法を学びます。

まずは、MySQL コンテナを起動するための Docker 環境をセットアップしましょう。

1.Dockerをインストールする

MySQL Docker コンテナを起動する前に、マシンに docker と docker-compose がインストールされている必要があります。 docker と docker-compose をインストールしていない場合は、次のガイドを参照してください。

  • CentOS に Docker をインストールする方法
  • Ubuntu に Docker をインストールする方法

Docker と Docker compose のセットアップ方法については、以下の公式 Docker ドキュメント リンクを参照することもできます。

  • https://docs.docker.com/engine/install/
  • https://docs.docker.com/compose/install/

次のコマンドを実行して、実行している docker および docker-compose のバージョンを確認できます。

$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown

2.MySQL Docker イメージをダウンロードする

Docker Hub に移動して、MySQL Docker イメージ を取得します。重要なことは、実行する MySQL のバージョンを決定する必要があるということです。

次のコマンドを実行して、MySQL イメージを Docker ハブからマシンにプルします。

docker pull mysql:latest

注意: タグ「latest」を使用する必要はありません。デフォルトでは、最新のイメージが取得されます。

イメージがローカルで利用できるかどうかを確認するには、次のコマンドを実行します。

docker images mysql

サンプル出力:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    b05128b000dd   12 days ago   516MB

これで、イメージがコンテナーをスピンアップする準備ができました。次のセクションで示すように、この手順をスキップして「docker run」コマンドを実行すると、ローカルで利用できない場合はイメージがプルされます。

3. MySQLコンテナを起動する

次のコマンドを実行して、MySQL Docker コンテナを起動します。

docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql

MySQLコンテナを起動する

上記のコマンドを分解して、各フラグが何を行うかを見てみましょう。

--name → コンテナに名前を付けます。このフラグを指定しない場合、docker はランダムに生成された名前を割り当てます。

-p → ポートマッピング。 MySQL はポート 3306 でリッスンするため、ホスト マシンから Docker コンテナにポート (33063306) をマッピングします。ホスト ポートは 3306 である必要はなく、使用可能なポートであれば何でもかまいません。

ローカル マシンで次の netstat コマンドを実行して、コンテナーの起動後にマップされたポートがリッスンしているかどうかを確認します。

netstat -tlnup | grep -i 3306

サンプル出力:

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      168870/docker-proxy 
tcp6       0      0 :::3306                 :::*                    LISTEN      168878/docker-proxy 

-v → ボリュームをコンテナにアタッチします。 docker のデフォルトの動作では、コンテナーが削除されるとデータは保持されないため、すべてのデータが失われます。

永続ストレージを作成するために、「mysql_volume」という名前のボリュームを作成しました。 MySQL はコンテナ内の /var/lib/mysql/ にデータを保存し、ここでローカルホスト ディレクトリ /var/lib/docker/volumes/mysql_volume1/_data にマップされます。したがって、データは永続的になります。

Docker ボリュームについて詳しく知りたい場合は、 同様の詳細な記事をご覧ください。

-d → コンテナをデタッチモードで起動して実行します。 -d フラグを省略すると、ターミナルにコンテナーの起動ログが表示され、コンテナーに接続するには新しいターミナル セッションを開く必要があります。

-e → 環境変数。以下のパラメータのいずれかを使用してmysql root ユーザーのパスワードを設定する必要があります。

  • MYSQL_ROOT_PASSWORD → この環境変数を使用して独自のパスワードを設定します。
  • MYSQL_ALLOW_EMPTY_PASSWORD → 空白または Null のパスワードが設定されます。 MYSQL_ALLOW_EMPTY_PASSWORD=1 を設定する必要があります。
  • MYSQL_RANDOM_ROOT_PASSWORD → コンテナ起動時にランダムなパスワードが生成されます。ランダムなパスワードを生成するには、MYSQL_RANDOM_ROOT_PASSWORD=1 を設定する必要があります。

この手順をスキップすると、以下に示すようなエラーがスローされます。

環境変数エラー

4. MySQL コンテナのステータスを確認する

次のコマンドを使用して、起動されたコンテナのステータスを確認できます。

docker ps

サンプル出力:

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
e1fb895f6f0f   mysql     "docker-entrypoint.s..."   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

5. MySQL データベースに接続する

次のコマンドを実行して、MySQL コンテナに接続します。

docker exec -it mysql bash

次のコマンドを実行して、root ユーザーとして MySQL データベースに接続します。私の場合、MYSQL_ROOT_PASSWORD を通じて独自のパスワードを設定しました。

mysql -u root -p

データベースに接続する

コンテナの起動時に MYSQL_RANDOM_ROOT_PASSWORD=1 を使用した場合は、ログから自動生成されたパスワードを取得できます。

docker logs
docker logs mysql

生成されたルートパスワード

自動生成される root パスワードは長く、覚えておく必要はありません。次のクエリを実行すると、root パスワードをリセットできます。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';

パスワード「mysqlpassword」を自分のパスワードに置き換えます。独自のユーザーを作成し、必要に応じて権限を付与することもできます。

6. サンプルデータのロード

mysql をセットアップする主な目的は、データをロードし、それに対してクエリを実行することです。データをロードするにはいくつかの方法があります。 「load_data.sql」という名前のサンプル ファイルがあり、その中に次のクエリが含まれています。

CREATE DATABASE IF NOT EXISTS football;

USE football;

CREATE TABLE IF NOT EXISTS players (
    player_name     VARCHAR(16)     NOT NULL,
    player_age      INT             NOT NULL,
    player_club     VARCHAR(16)     NOT NULL,
    player_country  VARCHAR(16)     NOT NULL
);

INSERT INTO players VALUES ("Messi",34,"PSG","Argentina");
INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal");
INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil");
INSERT INTO players VALUES ("Kane",28,"SPURS","England");
INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");

最初のアプローチは、「docker cp」コマンドを使用して、ローカル マシンから Docker コンテナにデータをコピーすることです。

docker cp load_data.sql mysql:/tmp
docker exec -it mysql bash
ls -l /tmp/

これで、mysql クライアントに接続して、source コマンドを実行するか、ファイルを mysql クライアントにリダイレクトできるようになります。

mysql -u root -p
mysql> source /tmp/load_data.sql

または

mysql -u root -p < /tmp/load_data.sql

データベースに接続し、テーブルにクエリを実行します。

mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;

プレイヤーテーブル

2 番目の方法は、docker exec コマンドの実行時に .sql ファイルをリダイレクトすることです。

docker exec -i mysql mysql -u root -p < load_data.sql

7. Docker-Compose を使用した MySQL コンテナのセットアップ

イメージを取得して docker run コマンドを実行する代わりに、docker-compose を使用してコンテナをすばやく起動できます。 Docker-compose は、複数のコンテナーを作成する場合に最適です。

docker-compose.yml または docker-compose.yaml ファイルという名前のファイルを作成します。次の yaml コードをコピーして貼り付けます。これは、前のセクションで手動で実行したものと同じです。

version: '3.8'
services:
  database:
    image: mysql:latest
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: temp1234
    ports:
      - "3306:3306"
    volumes:
      - mysql_volume:/var/lib/mysql
volumes:
  mysql_compose_volume:

次に、次のコマンドを実行して、MySQL Docker コンテナを起動します。

docker-compose up

Docker Compose を使用して MySQL コンテナを起動する

次のコマンドを実行して、docker-compose を使用して起動されたコンテナーのステータスを確認します。

docker-compose ps

サンプル出力:

Name              Command             State                          Ports                       
-------------------------------------------------------------------------------------------------
mysql   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp

8. MySQL Workbench を使用して MySQL データベースに接続する

ここまで、コンテナ内から mysql クライアントを使用してデータベースに接続する方法を見てきました。 mysql workbench、dbeaver、Heidi SQL などの GUI クライアントを使用してデータベースに接続することもできます。

使用している GUI クライアントに関係なく、コンテナーの起動時にどのポートがマップされているかに注意することが重要です。

私の場合、ローカルホスト (3306) -> コンテナ (3306) をマッピングしました。したがって、データベースへの接続を確立する必要がある場合は、localhost:3306 または 127.0.01:3306 に接続する必要があります。

私は MySQL Workbench を GUI クライアントとして使用しています。 MySQL ワークベンチをマシンにインストールしていない場合は、以下の手順を使用して同じものをインストールできます。

8.1. Linux に MySQL Workbench をインストールする

パッケージファイルをダウンロードするには公式サイトに移動します。 .deb または .rpm ファイルをダウンロードするには、オペレーティング システムを選択する必要があります。

MySQL Workbench のオペレーティング システムの選択

次のステップでは、ログインまたはサインアップを求められます。 「いいえ、ダウンロードを開始してください」オプションをクリックすると、ログインまたはサインアップをスキップできます。

ログインまたはサインアップのオプションをスキップする

Debian ベースのシステムでは、次のように MySQL Workbench をインストールします。

cd <path to downloaded .deb file>
sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb

RHEL ベースのシステムでは、次のように MySQL Workbench をインストールします。

cd <path to downloaded .rpm file>
sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm

インストールが完了すると、メニューまたはダッシュから mysql ワークベンチを起動できます。

MySQL ワークベンチを起動する

8.2. MySQLデータベースに接続する

Docker コンテナ内で実行されているデータベースに接続します。コンテナの設定方法に応じて、localhost:3306 または localhost: への接続を試みる必要があります。

MySQL接続の管理

データベースに接続する前に、[接続テスト] をクリックして、MySQL ワークベンチがデータベース インスタンスに正常に接続できたかを確認できます。

MySQL接続をテストする

これで、作成したテーブルに対してクエリの実行を開始できるようになります。

MySQL Workbench でサンプル クエリを実行する

9. 結論

この記事では、docker run メソッドと docker-compose メソッドを使用して、Docker で MySQL コンテナを起動する方法について説明しました。テストまたは学習の目的で MySQL をセットアップする場合は、Docker で十分です。

お役に立てれば。

関連記事