はじめに
ポートフォリオの開発環境をDockerで構築することにしました。
なぜDockerを開発環境として選んだのかを改めて自分で理解するために、Dockerのメリットをまとめてみました。
参考文献
Dockerとは何なのか?
仮想環境の一つです。
仮想環境とは一つのハードウェアの中で、仮想的な環境を構築したもので、一つのハードウェアで複数のサーバーを仮想的に動作させることもできます。
Dokcerは仮想環境の中でもコンテナ型仮想環境という種類の仮想環境になります。
Dockerの特徴としましては、軽量で高速で動き、環境の差異に左右されにくいという特徴があります。
仮想環境には大きく種類が二つあり、ホスト型仮想環境とコンテナ型仮想環境の2種類があります。
ホスト型仮想化とコンテナ型仮想化の違い
上の図で簡単に違いを表しています。
ホストOS型はハードウェア上に仮想化ソフトウェアをインストールし、仮想化ソフトウェアで仮想マシンを稼働させます。
そのため、ミドルウェアを仮想環境ごとにインストールしなければなりません。ホストOSと仮想化ソフトウェアを動作させるので、ハードウェアにかかるリソースは大きいです。
コンテナ型はアプリケーションの実行に必要な部分だけを含み、ホストOSのカーネルを共有するので動作が早いです。
コンテナ型はホストOSの動作の一部としてコンテナが動作するイメージです。
Dockerのメリット
ホスト型仮想化との違いを踏まえた上で、私が考えるDockerのメリットを紹介します。
優れた移植性
Dockerはローカル環境と本番環境をほぼ同等に再現することができます。
ローカルのDocker環境で実行しているコンテナを別のサーバーにあるローカル環境にデプロイしたり、逆のこともできます。
例えば、ホスト型環境で、Webサーバーをローカル環境に構築する場合は、本番環境と同じ、OSをセットアップして必要なものを導入していく環境構築が必要になります。
ですが、Dockerの場合はローカル環境でDockerのセットアップが済んでいれば、アプリケーションやミドルウェアがすでにセットアップされている状態の環境ができます。
Infrastructure as Code(インフラの構成管理)とImmutable Infrastructure(不変なインフラ)
「Infrastructure as Code」はコードでインフラの構成を定義する方法です。DockerはDockerfileやdocker-compose.ymlにインフラ構成のコードを記述してインフラを構成します。
コードを中心にすることで手作業にかかる時間を短縮します。
しかし、「Infrastructure as Code」の弱みとして、アプリケーションの頻繁なバージョン変更に対応するのが難しいという問題があります。
バージョンが変わるごとにコードの書き直すのは大変だからです。
そこで、大切になる考え方が、「Immutable Infrastructure」という考え方です。
これはある時点でのサーバーを保存して、複製していくという考え方です。サーバーに変更を加えたい場合は、インフラをアップデートするのではなく、作り直して、新しいサーバーのイメージとして保存し、複製します。一度セットアップしたものは2度と手を加えずに削除するので気にする必要はありません。
起動開始までの時間が短い
DockerはホストOSとカーネルを共有しているため、高速で起動します。
起動が高速なため新しくインフラを作り直す「Immutable Infrastructure」と相性がいいです。
まとめ
自分のメモ用として記事を残しました。
Dockerのメリットはホスト型仮想環境を理解することで理解できることだと改めて思いました。
この記事を見て、Dockerのメリットを理解できる人がいれば幸いです。
記事で間違った情報などがありましたら、教えていただけると嬉しいです。