GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

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

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で十分です。

これがお役に立てば幸いです。


Docker
  1. RsyslogとMySQLを使用してLogAnalyzerをセットアップする方法

  2. Dockerを使用してRedisでNextcloudをセットアップする

  3. Dockerを使用してJenkinsをインストールする方法

  1. RockyLinux8でプライベートDockerレジストリをセットアップする方法

  2. CentOSおよびRedHatでMySQLを使用してPure-FTPDをセットアップする方法

  3. LinuxサーバーにDockerを使用してNextcloudをインストールする方法

  1. Rocky Linux / Centos 8でApache、PHP、Mysql(LAMPスタック)を使用してOpencartをセットアップする方法

  2. Dockerを使用してマイクロサービスをデプロイする方法

  3. ランチャーでアプリをデプロイする方法