LoginSignup
0
0

More than 3 years have passed since last update.

dockerでmysqlを立ち上げ、外部から接続できるようにする

Last updated at Posted at 2021-04-17

開発PCにmysqlをインストールをしていなかったのですが、dbを使った技術検証をするのに不便だったので、dockerでmysqlコンテナを立てることにしてみました。

ディレクトリ構成は下記になります。

// ディレクトリ構造
─db
    └─conf
        └─mysqld.conf.d
                my.cnf

mysqlの設定として、簡単に以下のファイルを用意しました。

my.cnf
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
explicit_defaults_for_timestamp=on

下記のコマンドでdockerコンテナ立ち上げます。

docker run -v ${pwd}/db/conf/mysqld.conf.d:/etc/mysql/conf.d --name mysql -e MYSQL_ROOT_PASSWORD=root -e BIND-ADDRESS=0.0.0.0 -p 3306:3306 -d mysql:5.7

コンテナの状況を確認すると、ちゃんと起動できていることが確認できました。

docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
0580fa7597c2   mysql:5.7   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

この状況であれば、ホスト側のPCからlocalhostのポート:3306でmysqlに接続することができます。今回はホスト側にmysqlクライアントがインストールされていないので、dockerコンテナを用意してこのコンテナ内から先ほど立ち上げたmysqlコンテナに接続してみます。

> docker run -it --rm mysql:5.7 /bin/bash
root@e24782850c58:/# mysql -u root -p -h host.docker.internal
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

無事に接続することができました。設定が反映されているかも確認してみます。

mysql> show global variables like 'explicit_defaults_for_timestamp';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | ON    |
+---------------------------------+-------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql>

設定ファイルも無事に反映されていることが確認できました。

ちなみに今回立ち上げたmysqlコンテナはデータを永続化させる設定ではないので、コンテナを削除したらデータが消えてしまうので注意してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0