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で十分です。
これがお役に立てば幸いです。