MySQL用Docker環境設定

Dart用docker環境Docker

MySQL用Docker環境についてメモ書き。

概要

MySQLを検証するためのDocker環境設定。
前提条件:DockerHubからMySLQのイメージをダンロードしている事。

dockerfile

以下dokerイメージビルド用のdockerfileを作成。
デフォルトだとvimがインストールされていない。コンフィグファイル変更用にvimをインストール。whichも入っておらずコマンド検索できない。不便なので併せて追加。
パッケージのインストールにはmicrodnfを使う。RUNで指定。

docker-compose.yaml 

FROM mysql
RUN microdnf install vim which

dockerイメージ起動用のdocker-compose.yamlを作成。
dockerfileは同じディレクトリに保存するので、buildにカレントディレクトリを示す「.」を指定。

version: '3'
services:
 mysqldb:
    build: .
    ports:
      - 3307:3306
    volumes:
      - ./mysql:/var/lib/mysql
      - ./conf:/etc/mysql
      - ./conf.d:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: P@sswOrd
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testp@ssword

データとMySQL設定はコンテナを停止しても残したい。ローカルに以下ディレクトリを作成し、MySQLデータディレクトリ「/var/lib/mysql」等をマウント。

# ローカルに以下ディレクトリを作成。
# mysql:データディレクトリマウント用。
# conf:my.cnf保存用のディレクトリ「/etc/mysql」マウント用。
# conf.d:my.cnf内で「!includedir /etc/mysql/conf.d/」設定があり、起動時に存在しないと怒られるので追加。
mysql
conf
conf.d

my.cnfを保存するパスは以下の通り。
ここら辺は事前作業でMySQLを起動し確認した。

# mysql --help | grep my.cnf
~~
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
bash-4.4#

環境設定用のパラメータとして以下を指定。

パラメータ説明
MYSQL_ROOT_PASSWORDroot(MySQL管理ユーザ)のパスワードを設定。必須パラメータ。
MYSQL_DATABASEdockerイメージ起動時に作成されるデータベース。
MYSQL_USER「MYSQL_DATABASE」で指定したデータベースの管理ユーザ。
MYSQL_PASSWORD「MYSQL_USER」で指定したユーザのパスワード。

コンテナ初回起動

docker-compose.yamlがあるディレクトリで以下コマンドを実行。
初回実行なので「–build」オプションを付ける。

% docker-compose up -d --build

コンテナが起動した事を確認。

% docker container ls -a                     
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
4680183b77cf   mysql_mysqldb   "docker-entrypoint.s…"   14 seconds ago   Up 11 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

コンテナに接続

docker-compose execコマンドでコンテナに接続。
接続後、dockerfileで指定したwhichとvimがインストールされている事を確認。

% docker-compose exec mysqldb bash
# which vim 
/usr/bin/vim

MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORDパラメータが正常に設定されている事を確認。

# mysql -u testuser -p'testp@ssword'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| testdb             |
+--------------------+
3 rows in set (0.15 sec)

testdbデータベース内にテーブルを作成し、データを投入。

mysql> use testdb;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| testdb     |
+------------+
1 row in set (0.00 sec)

mysql> create table test_table (memberid int,member varchar(100));
Query OK, 0 rows affected (0.15 sec)

mysql>insert into test_table(memberid,member) values(1,'testmeber');
Query OK, 1 row affected (0.02 sec)

mysql> select * from test_table;
+----------+-----------+
| memberid | member    |
+----------+-----------+
|        1 | testmeber |
+----------+-----------+
1 row in set (0.01 sec)

mysql>

my.cnf変更前にinnnodb_buffer_pool_sizeパラメータを確認。

mysql> select @@innodb_buffer_pool_size/1024/1024;
+-------------------------------------+
| @@innodb_buffer_pool_size/1024/1024 |
+-------------------------------------+
|                        128.00000000 |
+-------------------------------------+
1 row in set (0.01 sec)

mysql>

MySQLからログアウト後、/etc/my.cnfファイルを/etc/mysqlディレクトリにコピーし、innodb_buffer_pool_sizeを128M→256Mに変更。

# cd /etc/mysql/
# vim my.cnf          
# grep pool my.cnf 
innodb_buffer_pool_size = 256M

コンテナ停止

exitコマンドでコンテナからログアウト。

# exit
exit

コンテナを停止する。

% docker-compose down
Stopping mysql_mysqldb_1 ... done
Removing mysql_mysqldb_1 ... done
Removing network mysql_default

コンテナ起動

コンテナを再度起動し、コンテナに再接続。

% docker-compose up -d  
Creating network "mysql_default" with the default driver
Creating mysql_mysqldb_1 ... done

データベースにデータが残っている事を確認。

mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from test_table;
+----------+-----------+
| memberid | member    |
+----------+-----------+
|        1 | testmeber |
+----------+-----------+
1 row in set (0.00 sec)

my.cnfの設定が残っている事を確認。

mysql> select @@innodb_buffer_pool_size/1024/1024;
+-------------------------------------+
| @@innodb_buffer_pool_size/1024/1024 |
+-------------------------------------+
|                        256.00000000 |
+-------------------------------------+
1 row in set (0.00 sec)

コメント

タイトルとURLをコピーしました