Dockerのススメ
2019 年 2 月 22 日 by mishi2013年にDockerが登場して以降、シェアが拡大され、近年のインフラでは「コンテナ化」が要件に含まれることも多く見受けられるようになりました。
一方で、登場以前から構築されたシステムは仮想マシン上で動作していることが多く、
そのノウハウが蓄積されているため、コンテナへ転換しづらい環境が現存することもあります。
そこで今回は、コンテナと仮想マシンの違いをDockerを例にして、整理したいと思います。
まず、「コンテナ」を調べていくと、下記の特徴が見つかります。
- 非常に軽量なコンテナ型のアプリケーション実行環境
- サーバ1台に対して、複数の実行環境の提供が可能
- 各環境は隔離されており、互いに干渉しない
- ハードウェアなどのアプリケーション開発にあまり関係がない作業を軽減
しかし、これらの特徴は仮想マシンの特徴にも該当するため、どこが違うのかよくわからない。といった印象を受けてしまいます。
そこで、ここからは仮想マシンとの違いを考えていきたいと思います。
【仮想マシン】
- 環境ごとにOSを動かすため、プロセッサやメモリの消費量は高く、ストレージもある程度の領域が必要
- 上記のため、起動時間も長く、同時に起動できる台数も限定される
- OSのイメージを準備することで、任意のOSを起動可能
- 同一構成の配布をする場合、構築済みのイメージ作成が必要
配布用のイメージはサイズが大きくなりやすい
【コンテナ】
- 複数環境であっても、コンテナ管理マシンのOSで稼働するため、プロセッサやメモリの
消費量や、ストレージの使用量は少ない - 上記のため、起動時間も短く、より多くの台数を同時に起動できる
- コンテナのOSは実行しているOSと同一のものという制約があり、
Windowsマシン上でLinuxを起動できない。といった制限を受ける - 同一構成の配布をする場合、イメージを作成・共有する方法と、構築時のコマンドをまとめた
ファイルを共有する方法を選択できる
仮想サーバは個人経営のレストラン、コンテナはチェーン店のレストランに例えることができます。
コンテナはシンプルにすることで、より早く、よりコストの低い構成をとることができます。
一方で仮想サーバはより柔軟な構成ができるため、複雑なインフラ構成を自由に組むことができます。
そして、「コンテナ化」は上記コンテナの特徴を最大限に活用するために、
シンプルな構成の環境を複数台起動し、負荷分散など、目的に応じた運用をしていきます。
また、構築時のコマンドをまとめたファイルを共有することで、イメージなしでも同一の環境を作り直すことが可能です。
環境の作り直しが容易になると、モジュールのアップグレードを試験し、不具合があれば即座に元の状態へ戻すといった切り戻し作業もスムーズになり、インフラ管理の工数が削減されることが期待されています。
初期導入も容易で、Linuxで下記のコマンドを実行することで、Dockerの導入からCentOSのコンテナ起動までが利用できます。
$ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 $ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo yum -y install docker-io $ sudo service docker start $ sudo chkconfig docker on $ sudo docker pull centos $ sudo docker images $ docker run -i -t centos /bin/bash
[参考] Dockerを導入する(CentOS版)
https://qiita.com/zwirky/items/991f61a231f4e198a320
仮想マシンからコンテナへの移行は時間がかかるためおすすめできませんが、新規構築する環境はコンテナを利用する。とすることで、リソースを低く抑えることができ、結果、より多くの環境を構築できるようになるため、今後のインフラ計画の際は「コンテナ化」を推進してはいかがでしょうか。