MySQLを初めて使用する場合、またはMySQLデータベースをすばやく簡単にインストールしたい場合は、この記事が役に立ちます。この記事では、LinuxでDockerとDockercomposeを使用してMySQLをセットアップする方法を学習します。
まず、MySQLコンテナを起動するためのDocker環境を設定しましょう。
1。 Dockerをインストールする
MySQL dockerコンテナーを起動する前に、dockerとdocker-composeをマシンにインストールする必要があります。 dockerとdocker-composeをインストールしていない場合は、次のガイドを参照してください。
- CentOSにDockerをインストールする方法
- UbuntuにDockerをインストールする方法
DockerとDockercomposeのセットアップ方法については、以下の公式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。 MySQLDockerイメージをダウンロード
DockerHubに移動します MySQLDockerイメージを取得するには 。重要なことは、実行する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コンテナを起動する
次のコマンドを実行して、MySQLdockerコンテナを起動します。
$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
上記のコマンドを分解して、各フラグの機能を見てみましょう。
-名前コード> →コンテナに名前を付ける。このフラグを指定しない場合、dockerはランダムに生成された名前を割り当てます。
-p →ポートマッピング。 MySQLはポート3306でリッスンします したがって、ポートをマッピングしています( 3306 →3306 )ホストマシンからDockerコンテナへ。ホストポートが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 / bytes / mysql_volume1 / _dataにマップされます。 、したがって、データは永続的になります。
Dockerボリュームについて詳しく知りたい場合は、詳細な記事をご覧ください。 同じように。
-d →コンテナを起動し、デタッチモードで実行します。 -dを省略した場合 フラグを立てると、ターミナルにコンテナの起動ログが表示され、コンテナに接続するには新しいターミナルセッションを開く必要があります。
-e →環境変数。 mysqlルートユーザーパスワードを設定する必要があります 以下のパラメータのいずれかを使用します。
-
MYSQL_ROOT_PASSWORD→この環境変数を使用して独自のパスワードを設定します。 -
MYSQL_ALLOW_EMPTY_PASSWORD→空白またはヌルのパスワードが設定されます。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番目のアプローチは、 .sqlをリダイレクトすることです。 docker execを実行するときのファイル コマンド。
$ docker exec -i mysql mysql -u root -p < load_data.sql
7。 Docker-Composeを使用してMySQLコンテナをセットアップする
イメージをプルしてdockerrunを実行する代わりに コマンドでは、 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:>
次のコマンドを実行すると、MySQLDockerコンテナが起動します。
$ docker-compose up
次のコマンドを実行して、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。 MySQLWorkbenchを使用してMySQLデータベースに接続する
これまで、コンテナ内からmysqlクライアントを使用してデータベースに接続する方法を見てきました。 mysqlワークベンチ、dbeaver、HeidiSQLなどのGUIクライアントを使用してデータベースに接続することもできます。
使用しているGUIクライアントに関係なく、注意すべき重要なことは、コンテナーを起動するときにマップされたポートです。
私の場合、 localhostをマッピングしました ( 3306 )->コンテナ ( 3306 )。したがって、データベースへの接続を確立する必要がある場合は、 localhost:3306に接続する必要があります。 または127.0.01:3306 。
GUIクライアントとしてMySQLWorkbenchを使用しています。マシンにMySQLワークベンチをインストールしていない場合は、以下の手順を使用して同じものをインストールできます。
8.1。 LinuxにMySQLWorkbenchをインストールする
公式サイトに移動します パッケージファイルをダウンロードします。 .deb をダウンロードするには、オペレーティングシステムを選択する必要があります または.rpm ファイル。
次のステップでは、ログインまたはサインアップするように求められます。 [いいえ、ダウンロードを開始してください]オプションをクリックすると、ログインまたはサインアップをスキップできます。
Debianベースのシステムでは、次のようにMySQLWorkbenchをインストールします。
$ cd <path to downloaded .deb file>
$ sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
RHELベースのシステムでは、次のようにMySQLWorkbenchをインストールします。
$ cd <path to downloaded .rpm file>
$ sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
インストールが完了すると、メニューまたはダッシュのいずれかからmysqlワークベンチを起動できます。
MySQLWorkbenchを起動する
8.2。 MySQLデータベースに接続する
Dockerコンテナ内で実行されているデータベースに接続します。 localhost:3306に接続してみてください またはlocalhost: コンテナの設定方法によって異なります。
データベースに接続する前に、[接続のテスト]を押すことができます 「MySQLワークベンチがデータベースインスタンスに正常に接続できたことを確認します。
これで、作成したテーブルに対してクエリの実行を開始できます。
9。結論
この記事では、 docker runを使用してdockerでMySQLコンテナを起動する方法を簡単に説明しました。 およびdocker-compose メソッド。テストまたは学習の目的でMySQLをセットアップする場合は、Dockerで十分です。
これがお役に立てば幸いです。