Dockerとは


 2015年あたりからコンテナ技術が注目を集め始めました。コンテナは昔からあったのですが、Dockerが技術を組み合わせてコ ンテナを便利に使う方法を作り出しました。
実際に使ってみる前にざっくりと、Dockerがどんなものかまとめておきます。

 

仮想マシンとコンテナの違い

 仮想マシンと呼ばれるハイパーバイザーによる仮想化は、物理マシンをエミュレートしているため、ゲストOSからはあたかも 物理マシンで動いているかのように動作します。
 一方コンテナとは1つのOSの中を複数の区画に分離する技術を使い、サーバを分離して実行することができます。そのため、1 つのカーネルの上で複数のOSが動作します。
 現在Linuxでは、複数の技術を組み合わせることにより、コンテナを実現しています。その様々な技術を便利に使いやすく管理できるようにしたものが Docker です。

vmdocker

 

Dockerのファイルシステム差分管理

 Dockerの特徴としてはファイルシステムの差分管理があります。コンテナ環境を動作させるには、コンテナごとにディレクト リ階層を作成する必要があり、コンテナ作成するごとに、必要な全ディレクトリ全ファイルをコピーすることになります。Dockerではそのあたりも効率化されています。

 必要なディレクトリやファイルを雛形(Docker用語では「イメージ」と呼ばれる)として用意してコンテナを作ることがでる ようになっており、雛形を丸々コピーすることはなく、ファイルシステムの差分管理の機能を利用して、雛形のディレクトリと ファイルの上に、書き込み用の領域を重ねていきます。

各コンテナではイメージに重ねられた書き込み用領域の分のみを保持することになります。

 

Dockerのメリット

 先ほど書いたファイルシステムの差分のみ作成するので、コンテナ作成時の重さのようなものは感じないです。その上、差分 のみ保存するのでコンテナを作成しただけではほとんどディスク容量を消費しません。
 こういった特徴があるので、サーバ数自体を負荷によって増減させるシステムだったり、テストをしたい時などに一時的にコ ンテナをつくり、テストが終われば削除するような、CIなどでもDockerが使われることがあります。

 もう一つのメリットとしては、イメージがたくさん公開されています。Dockerのコンテナ管理ツールは「Docker Engine」というかっこいい正式名称があります。このDocker Enghineからコマンド1つでイメージの検索やダウンロードができる「DockerHub 」という公開ライブラリがあります。

 

アプリケーションのコンテナ化

 アプリケーションのコンテナ化がDockerの最大のメリットだと思います。apacheやmysqlなどのサーバアプリケーションは、設定ファイルやライブラリなどが組み合わさり動作します。そのためサーバ内で複数のユーザがいる場合、導入したいライブラリ やバージョンが違うので思い通りの環境を作ることが難しく、動作させるまでの道のりが大変ということが起こってしまいます 。
 1ユーザ事に必要なサーバアプリケーションの環境をコンテナにまとめてしまうということです。

 

Docker用 ホストOS

 アプリケーションがそれぞれコンテナ化され実行環境を持つようになれば、OSの役割も変わってきます。通常のOSは、1台のサーバ上で複数のアプリケーションを動作させます。アプリケーションのアップデートにはライブラリの互換性など注意する必要 があります。

 Dockerコンテナにしてしまえば、アプリケーションはそれぞれのコンテナで動作させるため、ホストOSでは最小限のシステム だけを管理すれば良いということになります。こういった考えで登場したのが「CoreOS」「RHEL Atomic Host」です。

 

クラウド時代に適応したサーバ管理

 今までのサーバ構築運用では、構築したサーバに対して、アプリケーションをアップデートしたり、新規のアプリケーション をインストールしたりしていきます。それに比べて現在では、同じ役割のサーバをすぐに増減させるようなものだったり、サー バの再現性が重要となってきています。
 サーバを自動的に再現するには、手順書による人力ではなく、プログラムのようなもので構築方法を記述しておく必要があり ます。Chef,Puppet,Ansibleなどの構成管理ツールが使用されます。

 サーバに変更を加えるときの手法として「Blue-Green deployment」と言われる方法があります。サーバに更新や変更を加えるときに、既存のサーバを変更するのではなく、新しいサーバを1から作り、その新しいサーバに変更を加え、トラフィックを新 しいサーバに切り替えるという方法です。 この方法のメリットはトラブルやダウンタイムを減らせますし、ロールバックもやりやすくなります。

では、次回実際にDockerを使っていきたいと思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です