今更ですが、あるプロジェクトの開発環境をVMWare(仮想マシン)からDockerに移行しました。このプロジェクトは2004年に始まったもので、最初は実Linuxマシンで開発していましたが、ある時点からWindows上のVMWareに移行し、さらにMacのVMWareに移行して現在に至っています。
少し時間ができたので、他の開発環境と同様Dockerに移行しました。
DALL·Eで生成したDocker container
環境構築手順書がない!
この開発環境は実際にサービスを行っている環境とまったく同じものです、CentOS上の Apacah2 + PostgreSQL + Perlで構築されています。なんとアプリは(今時の開発者は知らない)CGI で動いています!😲
また、Gitログを眺めたところ最初はCVSで管理していたようです(これも知る人は少ないかも)、その後Subversion、Gitと移行してきました、時間を感じますね。
Docker環境を作るには環境構築手順書が必要になりますが、いろいろと探しましたが見つかりません!🥺
複雑な環境ではなく、フレームワークも私が作った独自フレームワークなので、試行錯誤しながら作って行きました。テストコードが在ったのが救いでした。
少し難しかった事
普通にDockerで環境を作ると、PostgreSQLのコンテナーとアプリが動くApache2のコンテナーの2つを使うと思います。そうすればPostgreSQLコンテナーはオフィシャルのイメージが使えます。
しかし、VMWareの開発環境 ≡ 本番環境という良さはいかしていきたいので、1つのCentOSコンテナーにApache2, PostgreSQLをインストールする事にしました。
通常のCentOSのようにyum install postgresql
したあとsystemctl start postgresql
し、コンテナーの起動コマンド(command:
) でApache2を動かせば良いと思っていたのですが、DockerのCentOSはセキュリティー上の理由からsystemctl
が使えないようです(いろいろと設定すれば動くようですが)。😅
結局、起動コマンドで以下のように両方を起動する事にしました。
command: bash -c "
su - postgres -c '/usr/pgsql/bin/pg_ctl start -D /var/lib/pgsql/data/' &&
/usr/sbin/httpd -D FOREGROUND"
改めて思うDockerの良いところ
少し苦労しましたが、無事にDocker環境ができました。現在はDocker環境には慣れきっていますが、改めて仮想マシンからDockerに移行してみるとDockerは良いですよね。
1.完璧な環境構築手順ができる
Dockerfileやdocker-compose.ymlには完全な開発環境の構築手順書になっています。今回は環境構築手順書が見つかりませんでしたが、手順書があっても抜けや間違いはあったと思います。
また将来、別の環境に移行する際にも、この定義ファイルは役立つはずです。
2.起動が速くなる
仮想マシンでは環境を起動する際にはOSのブートから始まりますが、Dockerではその時間がなく直ぐに開発が始められます。たいした時間ではありませんが嬉しいです。
その分、Docker Desktop等を起動するのに時間がかかるという意見もあるかもしれませんが、今時はたいていDocker Desktopが起動されていますよね。😁
3.試行錯誤しやすい
Docker環境構築は、元になるDockerイメージ(たとえばCentOS)から基に、Dockerfileやdocker-compose.ymlファイルの記述をもとに自動的に環境が作られるので、試行錯誤がやりやすいと思います。多少の時間はかかりますが、docker-compose build up
を実行するだけです。
仮想マシンではインストールは手作業で行うので試行錯誤は手間です。仮想マシンには、スナップショット機能があり、ある時点のマシンに戻ったりできますが手間ですね。
4.共同作業がしやすい
このプロジェクトは私一人で開発していますが、チームで開発する場合もDocker開発環境はGitで管理できるので、環境変更にも対応しやすいと思います。仮想マシンでは環境が変更された場合、大きな仮想イメージを再配布する必要があり大変かなと思います。
これでVMWare上の開発環境は無くなりましたました。めでたしめでたし😁