就活に有利だからとかモダンな自社開発で使用している技術だからなどと下心でDockerをいじり始めた筆者ですが、学習を続けるうちにDockerという技術がとても強力な技術というのが理解できてきました。
Dockerとは
コンテナ型仮想化技術を実現するためのアプリケーションとCLI(コマンド実行できる)からなるプロダクトです。2013年にDocker社のソロモンハイクがオープンソースソフトウェアとして公開し人気が集まりだしました。既存のソフトウェアと比べてゲストOSを使用せずにホストOSからリソースを確保して処理するためオーバーヘッドが少なく軽量に動作します。
コンテナでの運用・開発
既存の仮想化技術と大きく違う点はこのコンテナ化です。アプリケーションごとに箱に梱包(コンテナ化)し、それをオーケストレーションツール(docker-composeなど)にて通信させていきます。このコンテナ化というのが強力で、依存するライブラリなどをコンテナに入れておけば別のDocker環境でも全く同じように作動します。
つまり開発者のローカル環境のライブラリのバージョンなどを気にせずに一瞬で同じ環境が再現できます。
本番環境にも使える
筆者が大変感動したのがここです。前述のコンテナ化による高いポータビリティ性により、本番環境と同じ状況を開発環境にて再現し、そのまま開発したものをデプロイしてしまうことが可能となります。
またサポートが現在はかなり充実しており、AWSではECR(Docker Hubみたいなリポジトリ),ECS(オーケストレーションとスケーリングを行える)がありデプロイも簡単で、運用もものすごく容易となります。さらにAWSのCLIツール(ecs-cliやaws cliなど)の利用で数行のコマンドでVPCやEC2なども一瞬で立ち上げることが可能となります。
環境差異の脱却
これらにより、私の環境では動いたがあの人の環境では動かない。デプロイしたがうまく動かないなどの環境差異による無駄な時間が削減できます。プログラミングを始めたてのときに詰まった環境構築などはもう次の世代の駆け出しエンジニアは体験しないのかもしれませんね...
所感
Dockerをこれまで勉強してみて、便利なところしか見つからず、たしかにこの技術を採用できていない企業からは転職を考えたほうがいいという過激な意見にも一理あります。
とはいえ駆け出しエンジニア全員がモダンな技術を使った自社サービスに携われるわけもなく、私が入社する企業でも、Dockerなど使わず、泥臭い環境構築をすることになりそうです。
ただ思うのは便利になっていく半面Webエンジニアはどんどんインフラが弱くなっていくのではないかな?と思いました。やはり現在業務にてDockerを触っている現場のエンジニアの方も秘伝のタレと化した環境構築などを経験していき今のスタイルに行きついたのではないかと考えています。修行と思い、数年後業務にてあのクジラを見ることができればと思いました。