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 コンテナにポート (3306
→ 3306
) をマッピングします。ホスト ポートは 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 で十分です。
お役に立てれば。