Skip to content

Instantly share code, notes, and snippets.

@s-show
Last active September 17, 2022 14:47
Show Gist options
  • Save s-show/eb1efd2d01894f0bbba53e2e9ca89463 to your computer and use it in GitHub Desktop.
Save s-show/eb1efd2d01894f0bbba53e2e9ca89463 to your computer and use it in GitHub Desktop.

Docker を使う理由

一言で言うと、開発環境の構築が簡単にできる上、開発したアプリケーションをクラウド上で動かすことも簡単になるためです。

Docker が登場する前の状況

1台のPCで開発環境を構築する場合、それまでに構築していた環境が原因で新しい環境構築に失敗することがありました。

例えば、2つの環境で共通して使うライブラリがあるものの、環境Aではバージョン2.2が必要なのに対し、環境Bではバージョン1.9が必要となるという場合、2つのライブラリを同じPCに入れて参照先を環境毎に切り替える等の設定が必要となりますが、こうした対応は往々にしてトラブルの原因となっていました。

Docker 登場前にこうした問題を解決する方法としては、次の方法がありました。

  1. PCを開発環境毎に用意する
  2. 1台のPCに複数のOSをインストールしてデュアルブートする
  3. VirtualPCなどの仮想化ソフトを使って複数のゲストOSをインストールする
  4. Chroot を使って隔離された環境を仮想的に構築する

それぞれの方法の内容と長所・短所は次の通りです。

PC を複数台用意する

image

必要な開発環境の数だけPCを用意するという最もシンプルな方法です。

環境間の影響を完全に排除できるというメリットはありますが、金銭的負担が非常に大きい上、PC管理の手間もかかります。また、KVM を使わない場合、モニターやキーボードやマウスが PC の台数分必要となるのも欠点です。

1台のPCに複数のOSをインストールしてデュアルブート

image

1台のPCに開発環境の数だけOSをインストールしてデュアルブートできるように設定し、開発環境を切り替えるときは別のOSを起動させるというものです。

開発環境の数だけPCを用意するのに比べると金銭的負担が少なく、モニターなどが1台分で済むのがメリットですが、開発環境を切り替えるたびに OS の再起動が必要となる上、エディタなどの設定もOSの数だけ必要となります。

VirtualPCなどの仮想化ソフトを使って複数のゲストOSをインストール

image

1台の PC にメインとなる OS (ホスト OS と呼びます)を1つインストールし、その上に VirtualPC などの仮想化ソフトをインストールして複数の OS (ゲスト OS と呼びます)を動かせるようにするというものです。

ゲスト OS は同時に複数起動できるため、開発環境を切り替えるために OS を再起動する必要はなく、また、エディタもホスト OS にインストールすれば OK なので、その点もメリットとなります。

一方、ゲスト OS を稼働せるためにはホスト OS のリソースを一定程度割り当てる必要があるため、一度に起動できるゲスト OS の数には限度がありますし、ホスト OS の動作にも影響が出ます。

chroot を使って隔離された環境を仮想的に構築

image

Linux カーネルの chroot (change root) を使ってプロセスを隔離するとともに、アクセスできるディレクトリも制限して専用の開発環境を用意してしまうというものです。

仮想化ソフトを使う方法に似ていますが、プロセスを隔離する方法はゲスト OS を動かすよりも少ないリソースで可能なため、ホスト OS にかかる負荷は少なくて済みます。

主な欠点としては、隔離する環境毎に実行に必要なファイルシステムを自分で用意する必要があるというところです。

Docker を使って隔離された環境を用意する方法

image

Linux カーネルの namespace, cgroup, capability, aufs ドライバなどを使ってプロセスなどが隔離された環境を用意して、その環境内でアプリケーションを実行できるようにしたものが Docker のコンテナです。

一見すると chroot を使う方法と似ていますが、chroot では隔離できないもの(名前空間、ネットワークなど)を隔離できます。

さらに、実行に必要なファイルシステムを Docker イメージと呼ぶ単位で扱えて、この Docker イメージが Docker Hub という公開レジストリで用途に応じて多数公開されているため、chroot よりも簡単に環境を構築することができます。同時に、自分が構築した開発環境を Docker イメージとして使いまわしたり公開することもできます。

それにより、開発したアプリケーションをクラウド上に展開することも容易になります。


参考にしたサイトなど

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment