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_PASSWORD | root(MySQL管理ユーザ)のパスワードを設定。必須パラメータ。 |
MYSQL_DATABASE | dockerイメージ起動時に作成されるデータベース。 |
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)
コメント