Docker で汎用開発環境用データベースを作ってみよう!
こんにちは、切口太郎です。
前回は、Docker で Python の汎用開発環境を構築しました。
今回は、足回りの整備でDocker でデータベース環境を構築します。
データベースは、企業システムでは必ず利用されているOracle、オープンシステムで利用される Oracles社の MySql 、Windowsサーバーで利用される Microsoft社のSQL Server がビック3ではないでしょうか。
別格扱いで金融などの大型システムで利用される IBM のDB2 があります。
それぞれ、Docker Hub に コンテナーイメージがあります。
さすがに、DB2 は無いだろうなと思っていましたが、DB2 のコンテナーイメージがIBMから開発用で無償提供されていました。
こんどやってみようかなぁ。。。。
Oracle は、SQL Developer や SQL Developer Data Modeler など、かなり高機能は開発ツールが用意されていますが、これは java で基幹系サービス作るときに良く利用します。
Python で作るシステムに Oracle を使うのはあまり聞いたことがなので、今回はスキップします。
ということで、Python の開発で良く利用される MySQL で汎用開発環境に利用できるデータベースを環境を構築します。
MySQL は、Linux版では、/var/lib/mysql にテーブルスペースを作成します。
この領域を 別のボリュームへマウントすれば、コンンテナー内に閉じていない環境を構築することができます。
MySQLの /var/lib/mysql をHostOSのフォルダーにマウントします。
MySQLはのコンテナー起動は、Docker run .... のパラメータ指定でもできますが、今回は docker compose を利用して行います。
ホスト側で別のデータベースをマウントすることによって、簡単にデータベースを取り替えられます。バックアップや復元が簡単にできるようになります。
1 MYSQLのインストール
データベースの Docker Image は、Docker Hub にある Official Image を使用します。
ダウンロード数がすごいですね。
MySQLは起動できるだけという単純なものにしました。
docker-compose.yml
version: '3'
services:
db:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- "./database:/var/lib/mysql"
|
Compoe で利用するディレクトリー構成はこのようにしました。
個人利用なので、ユーザーのホームディレクトリーに docker というフォルダーを作成しています。
C:\Users\kirik\docker>tree /F
フォルダー パスの一覧
ボリューム シリアル番号は AAD6-1EEA です
C:.
│ docker-compose.yml
│
└─database
|
実際に、 MySQLを Docker Hub からダウンロードして、起動まで行ってみましょう!
C:\Users\kirik\docker>docker-compose up -d
Pulling db (mysql:)...
latest: Pulling from library/mysql
0a4690c5d889: Pull complete
98aa2fc6cbeb: Pull complete
0777e6eb0e6f: Pull complete
2464189c041c: Pull complete
b45df9dc827d: Pull complete
b42b00086160: Pull complete
bb93567627c7: Pull complete
bda91ab2ec35: Pull complete
50b4c0c50b33: Pull complete
70c2999bc788: Pull complete
3cf3e568e51b: Pull complete
c80d654aa77e: Pull complete
Creating mysql ... done
|
できたようです。
MySQLの初期データが作成されていたか確認します。
作成されていれば、database のディレクトリーに /var/lib/mysql に作成されるファイルがたくさんできています。
C:\Users\kirik\docker>tree /F
フォルダー パスの一覧
ボリューム シリアル番号は AAD6-1EEA です
C:.
│ docker-compose.yml
│
└─database
│ auto.cnf
│ ca-key.pem
│ ca.pem
│ client-key.pem
│ ibdata1
│ ibtmp1
│ ib_logfile0
│ ib_logfile1
│ mysql.ibd
│ server-cert.pem
│ server-key.pem
│ undo_001
│ undo_002
│
├─#innodb_temp
│ temp_1.ibt
│ temp_10.ibt
│ temp_2.ibt
│ temp_3.ibt
│ temp_4.ibt
│ temp_5.ibt
│ temp_6.ibt
│ temp_7.ibt
│ temp_8.ibt
│ temp_9.ibt
│
├─mysql
└─performance_schema
accounts_138.sdi
cond_instances_77.sdi
data_locks_153.sdi
data_lock_waits_154.sdi
events_errors_su_132.sdi
・・・中略・・・・
variables_by_thr_174.sdi
variables_info_177.sdi
|
次に MySQLが起動しているか確認します。
赤字部分が MySQLです。起動できていますね。
C:\Users\kirik\docker>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5520e74e440 mysql "docker-entrypoint.s…" 12 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
92798c4c3012 continuumio/anaconda3 "/usr/bin/tini -- /b…" 47 hours ago Up 47 hours anaconda3
C:\Users\kirik\docker>
|
MySQLが正しく動作しているか確認します。
動作している mysql コンテナーで bash を起動します。
mysql クライアントを起動して、ルートユーザーでログインします。
C:\Users\kirik\docker>docker exec -it mysql /bin/bash
root@e5520e74e440:/# mysql -uroot -proot
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 8
Server version: 8.0.17 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
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 databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
|
大丈夫みたいですね。
Docker では MySQLのインストールも超簡単でした。
2 MySQL Workbench のインストール
VS COde の拡張機能でも MySQLの拡張機能があります。
なんでもVS Code としたいのですが、この VS Code の拡張機能を動かすには、MySQLのクライアントをインストールしなければなりません。
それほど便利ではなかったので、どうせクライアント入れるんだったら MySQL workbench を入れた方が操作が楽になります。
いろいろなツールを使うと、クライアント側のインストールも大変だし、学習コストもかかるので、人数が多くなると無理やりでも VS Code の拡張機能で・・・という考え方もありますが、
ノマドの場合には、どちらかというと「楽に開発できる」を最重要視したほうがいいと思います。
有名なツールは、結構情報がでているので、使い方を習得するのに時間がかかりませんし、GUIは見た目でわかりやすいのが特徴です。
今回はノマド視点で、Workbench インストールいたします。
ダウンロードは、次のURLから行えます。
32bit 版と 64 bit 版があります。
Hyper-V を利用しているので、当然下の64bit 版をダウンロードします。
上の Windows(x86, 32&64bit), MySQL Installeer MSI というのは、32bit版です。64bit OS でも動きますよ程度なので、下の64bit 版をインストールしましょう!
ダウンロードするには、ログインが必要です。
MySQLは、Oracle社の製品なので Oracle Developer アカウントがあれば、そのまま利用できます。
なければ、アカウントを作る事もできます。
アカウントの作成は無料です。
ログインするとダウンロードできるようになります。
ダウンロードが完了したら、ダウンロードファイルをダブルクリックします。インストーラーが起動します。
インストール場所は、デフォルトで問題ないので [Next] ボタンを押します。
こちらも [Next] ボタンを押します。
「Install] ボタンをクリックします。
しばらくするとインストールが完了します。
[Finish] を押してインストーラーを閉じてください。
インストーラーを閉じると、MySQLワークベンチが起動します。
矢印の部分の (+) をクリックします。
MySQL サーバーへの接続情報の入力ダイアログがポップアップします。
Doker Desktop for Windows で MySQLを起動している場合には、 [Connection Name] だけ入力しればOKです。
Connection Name を root にしました。
[test connection] をクリックして接続の確認をします。
接続できれば、このようなダイアログが表示されます。
[OK] をクリックします。
接続ができない場合には、
docker ps コマンドで、mysql コンテナーが起動しているか確認します。起動していない場合には、 docker start mysql と入力して mysql コンテナーを起動します。
作成した接続情報が表示されます。
これで、MySQLを利用した開発環境が構築できました。
3 まとめ
今回はシステムの足回りを担当するデータベースエンジンを MySQL Dockerで動かしてみました。
管理用クライアントとして MySQL Workbench をインストールして、Docker に接続するところまでやってみました。
Docker でデータベースのインストールは簡単でいいですね。
データベースを利用しないシステムは、ほとんど無いでしょうからデータベース環境を docker で構築できるのは意義がありますね。
正直 Docker でデータベースはあまり実用的ではないから、それほどコンテナー型データベースは無いだろうなと思っていましたが、Docker Hub でデータベース探したら、ものすごいイメージがあるました!
ちょっと前の話になりますが
① 仮想化は I/O が遅いので、データベースのファイルシステムを置くのには向かない
② データベースは、管理領域のメモリーを大きく取る必要があるので、仮想化には向かない。
と言われていました。
今は、エンタープライズ向けのストレージも高性能になって、HDDからSDDの時代になりました。
メモリーも640G実装できるサーバーもありますので、そんな弱点より、仮想化のメリットの方が高くなったように思えます。
仮想マシンが普及して10年以上経ちますので、次のパラダイムシフトは Docker のようなコンテナー技術なんでしょうね。データーベースベンダーが Official を Docker Hub にこぞってアップしているのは、そういう流れなのかもしれません。
一番ビックリしたのが、これを見つけたときです。
リソースのバカ食い、データベースの王道と言われる Enterprise Edition がコンテナーでデビューです。
これが、普及したら、一気に エンタープライズシステムが docker に流れるかもしれません。
Dockerこれから面白そうです。
コメント
コメントを投稿