VMWare 上のCentOS 7.4 に Oracle Databaseと Microsoft SQL Server 2017とIBM Db2 Express-CとPostgreSQLとFirebirdとMySQLとMariaDBを入れてみました。
パクリ記事ばっかりになりそうな気もしなくもないですが、とりあえず、MySQLとMariaDBから。
参考: DockerでさくっとPostgreSQL/MySQL/MariaDBを触る方法
環境は以下のような感じです。
OS : CentOS Linux release 7.4.1708 (Core) (VMware Workstation上の仮想マシン)
メモリ : 4GB 割り当て
MySQLとMariaDB以外のデータベースはCentOS上にそのままインストールしたのですが、MySQLとMariaDBは共存が面倒そうだったので、Dockerをインストールし、その上で動作させることで共存させています。
参考(OS上で直接共存させる方法): Installing MariaDB Alongside MySQL
■Dockerのインストール
1 |
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 |
■リポジトリ追加
1 |
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
■yumのパッケージインデックスを更新
1 |
$ sudo yum makecache fast |
■インストール
1 |
$ sudo yum install docker-ce |
■自動起動の設定と起動
1 2 |
$ sudo systemctl enable docker.service $ sudo systemctl start docker.service |
■自分のユーザーでDokerを起動できるようにする
※matsubaraの部分は適宜書き換えること
1 |
$ sudo usermod -aG docker matsubara |
MySQLとMariaDBは永続化のためにデータボリュームを作りつつ docker run します。
MySQLとMariaDBのDocker上で利用できるバージョンはdockerのオフィシャルサイトから確認できます
MySQL : https://hub.docker.com/_/mysql/
MariaDB : https://hub.docker.com/_/mariadb/
MySQLとMariaDBのインストール手順はほぼ同じです。ただし、MySQLとMariaDBはデフォルトではどちらも3306ポートを使うため、そのままDockerホストにマップするとバッティングします。各コンテナのポートをマップするためにポート番号は以下のルールにしてみました。
MySQL : 33xy
MariaDB: 133xy
x … メジャーバージョンの下1桁
y … マイナーバージョンの上1桁
つまり、MariaDB 10.2のポートは Dockerホストの 13302に、MySQL 5.7のポートはDockerホストの3357にマップします。
Docker上で動作するMySQLやMariaDBを操作するために、あらかじめMySQLのクライアントだけをCentOS上に入れておきます。
■MySQL クライアントの導入
1 2 |
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm $ sudo yum install mysql mysql-devel mysql-server mysql-utilities |
以下mariadb 10.2のインストール
■コンテナの3306ポートを13302にマップしてMariaDBを開始(docker run)
※ボリューム(mariadb_10.2_data)を作成しつつ、docker run している
※rootパスワードのXXXXXXXXは適宜変えること
1 |
$ docker run --name mariadb_10.2 -d -v mariadb_10.2_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=XXXXXXXX -p 13302:3306 -d mariadb:10.2 |
■データベース(UTF8MB4_DB)の作成とユーザー(matsubara)の作成及び権限の設定(雑・セキュアではない)
mysqlコマンドを実行するとき、-h オプションを付けない場合、localhostに対してログインします。MySQLクライアントは接続先ホストが localhostの場合(-h オプションを指定しない場合も含む)tcpプロトコルでなくソケット接続を使用し、–portオプションを無視するらしいです。このため、「–protocol tcp」を付加するか、「-h 127.0.0.1」を指定してTCPプロトコルで接続します。
1 2 3 4 5 6 |
$ mysql -u root -p --port 13302 --protocol tcp mysql> select version(); mysql> create database UTF8MB4_DB default character set = UTF8MB4; mysql> create user 'matsubara'@'%' identified by 'XXXXXXXX'; mysql> use UTF8MB4_DB mysql> grant all on UTF8MB4_DB.* to 'matsubara'@'%'; |
■サービスの設定ファイル作成(自動起動のために)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo sh -c 'cat << EOF > /usr/lib/systemd/system/mariadb_10.2@docker.service [Unit] Description=MariaDB 10.2 Service on Docker After=docker.service Requires=docker.service [Service] Type=simple RemainAfterExit=yes ExecStart=/usr/bin/docker start mariadb_10.2 ExecStop=/usr/bin/docker stop mariadb_10.2 [Install] WantedBy=multi-user.target EOF' |
Type=simpleはデフォルトなので実は要らないですが、dockerコマンドはRemainAfterExitを付けないと、うまく自動起動しませんでした。どうも、起動しないというより、正しく起動できたことをうまく検知できなくて、直後にサービス停止コマンド(ExecStop)が実行されてしまうようです。
Type=forkingやType=oneshotも試したのですが、うまくいきませんでした。
■サービスの設定ファイルをsystemdに読み込ませる。
1 |
$ sudo systemctl daemon-reload |
■サービスを自動起動に設定
自動起動しない場合は要らない
1 |
$ sudo systemctl enable mariadb_10.2@docker.service |
以下MySQL 5.7 のインストール
■コンテナの3306ポートを3357にマップしてmysqlを開始(docker run)
※rootパスワードのXXXXXXXXは適宜変えること
1 |
$ docker run --name mysql_5.7 -d -v mysql_5.7_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=XXXXXXXX -p 3357:3306 -d mysql:5.7 |
■データベース(UTF8MB4_DB)の作成とユーザー(matsubara)の作成及び権限の設定(雑)
1 2 3 4 5 6 |
$ mysql -u root -p --port 3357 --protocol tcp mysql> select version(); mysql> create database UTF8MB4_DB default character set = UTF8MB4; mysql> create user 'matsubara'@'%' identified by 'XXXXXXXX'; mysql> use UTF8MB4_DB mysql> grant all on UTF8MB4_DB.* to 'matsubara'@'%'; |
■サービスの設定ファイル作成(自動起動のために)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo sh -c 'cat << EOF > /usr/lib/systemd/system/mysql_5.7@docker.service [Unit] Description=mysql 5.7 Service on Docker After=docker.service Requires=docker.service [Service] Type=simple RemainAfterExit=yes ExecStart=/usr/bin/docker start mysql_5.7 ExecStop=/usr/bin/docker stop mysql_5.7 [Install] WantedBy=multi-user.target EOF' |
■サービスの設定ファイルをsystemdに読み込ませる。
1 |
$ sudo systemctl daemon-reload |
■サービスを自動起動に設定
1 |
$ sudo systemctl enable mysql_5.7@docker.service |
以上です。…あと、調子に乗ってmysql 5.5 と MariaDB 5.5, MariaDB 10.1もインストールしてしまいました。
(自動起動はしません。)