どうも、とがみんです。
最近Dockerというコンテナ型のサーバー仮想化技術を用いて、開発環境を構築する機会が何度かあったので、dockerについて調べたことをまとめていきます。
Contents
Dockerとは?
Dockerは「Develop, Ship and Run Any Application, Anywhere」という、あらゆるアプリケーションを、どこでも開発、移動、実行できるようにすることを目指した、コンテナ型のサーバー仮想化環境を提供するためのプラットフォームです。
Dockerのサービスは「Docker Engine」と「Docker Hub」で構成されています。
「Docker Engine」は、コンテナ仮想環境を構築するアプリケーションで、「Docker Hub」は、Dockerコンテナをクラウド上で共有できるサービスです。
サーバー仮想化とは?
「Docker」はコンテナ型の仮想環境を提供するプラットフォームで、サーバー仮想化技術の一つです。
そこで、サーバー仮想化技術について整理していきます。
「サーバー仮想化技術」とは、物理的な1台のサーバー上で、複数の仮想的なサーバーを利用できる仕組みを構築する方法のことです。
複数のサーバーを1台の物理サーバ上に集約することができるため、サーバーの台数を減らすことによるコスト削減、物理サーバーの設置スペースの削減、サーバーリソースの効率的な使用、新しいサーバーをが必要なときにすぐに準備できるといったメリットがあります。
仮想化技術には、大きく分けて「ホスト型」「ハイパーバイザー型」「コンテナ型」の3通りがあります。
ホスト型
ホスト型は、土台となるホストOS上に仮想化ソフトウェアを使い、ゲストOSを運用する方法です。
ハイパーバイザ型と比較すると、既存のホストOSを使えるため手軽にサーバー仮想化を実現することができます。
一方で、ゲストOSを動かす際に、ホストOS自体の処理も必要になってくるため、処理速度が出にくいことがデメリットになります。
ホスト型の仮想化ソフトウェアには「Virtual Box」があります。
ハイパーバイザ型
ハイパーバイザ型は、ハードウェア上にハイパーバイザーと呼ばれる仮想化ソフトウェア動作させ、そのソフトウェア上で、複数のゲストOSを運用します。
ホストOS上に仮想マシンを作るのではなく、まっさらなハードウェアディスク上に直接仮想マシンを実現します。
ホストOSの処理を必要とせず、ハードウェアを直接制御するため、ホスト型と比較して、処理速度が大きいことがメリットです。
一方で、既存OSを使用することができず、仮想化専用のサーバーを用意する必要があったりするため、導入に手間がかかる点がデメリットです。
ハイパーバイザ型ソフトウェアには「Hyper-V」や「vSphereHyperviso」、「KVM」があります。
>サーバーの仮想化とは?仕組み、メリット・デメリットをわかりやすく解説します
コンテナ型
「コンテナ型」は、「ホスト型」や「ハイパーバイザ型」と違い、ホストOS上にそれと異なるOSをインストールをする必要がなく、一つのホストOS上にコンテナと呼ばれる独立した環境を用意し、そこでアプリケーションを構築することができます。
ゲストOSを起動させる必要がないため、少ないリソースで仮想環境を実現することができ、メモリやCPUのリソース使用量を抑えることができます。
一方で、コンテナは一つのOSから作られているため、同じホスト上では異なるOSを動かすことができません。システムに対する負担は小さいものの、OSが限られてしまうというデメリットがあります。
このコンテナ型仮想化を実現するソフトウェアとして「Docker」があります。
Dockerによるコンテナ型サーバー仮想化のメリット・デメリット
Dockerを使用したコンテナ型サーバー仮想化のメリット・デメリットについてまとめていきます。
環境構築が容易で短時間で可能
Dockerを使用することにより、コード化されたファイルを共有することで、それと同じ環境を別のマシンに簡単に再現することができます。そのため、作成した環境を簡単に配布することができます。
また、環境の構築は数コマンドで生成できるため、手間を大幅に削減することができます。
開発環境をそのまま本番環境に適応することができる
Dockerがインストールされている環境であれば、どこでもコンテナを動かすことができます。
そのため、開発環境で動かしていたコンテナを本番環境にデプロイすれば、開発環境で動作を確認したコンテナをそのまま本番環境で動かすことができます。
障害時の問題の切り分けが容易
Dockerはマイクロサービスと相性が良く、1つのサービスを一つのコンテナに載せることで、各アプリケーションの依存性の解消や、障害発生時の問題の切り分けも容易です。
Dockerの利用により高速で安定したCI/CD環境の実現
コンテナを活用することにより、CI/CDをより高速で安定に行うことができるようになります。
ビルドやテスト用のサーバー、仮想サーバーを環境ごとに立てる必要がありますが、コンテナを使用することによって、ビルドやテスト用の環境を少ないリソースで実行でき、起動、廃棄が簡単なため、リソースの効率的な活用が可能になります。
また、コンテナにはOSの起動部分がないため、仮想サーバーと比較して、高速に起動が可能で、CI/CDの速度が大きくなります。
さらに、いつでも同じ環境でビルド、テストが可能なため、不安定なビルドやテストがなくなり、安定してそれらを実行することができます。
CI(Continuous Integration):テストやビルドといった一連のプロセスを自動で実行する。
CD(Continuous Delivery):ビルドやテストだけでなく、リリースプロセス全体を自動化する。
>コンテナ活用でさらに加速するCI/CD
>なぜDockerを使うのか?Dockerのメリットを紹介
>Dockerが日本で流行らない理由、あるいは本番環境へ導入されない理由
まとめ
Dockerについて調べたことについてまとめてきました。
Dockerとは「Docker Engine」というコンテナ仮想化を実現するアプリケーションと、「Docker Hub」というDockerコンテナをクラウド上で共有できるサービスからなります。
コンテナ仮想化技術は、これまでの仮想化技術である「ホスト型」や「ハイパーバイザ型」と違い、サーバーリソースを効率的に使用することができ、またDockerにより簡単に仮想環境の構築共有ができることから、今後どんどん普及していくことが期待されています。