【移行記事】仮想化OSS『Docker』について調べてみた

14:17:46

知らない技術やキーワードと出会ったら、概要だけでも調べておくべきである。

……と技術者として至極当たり前のことをふと思ったので、箇条書きレベルですが、調べた内容をブログに残しておきます。

今回の調査対象は『Docker』です。

Docker とは?

『Docker』は、コンテナと呼ばれる OS レベルの仮想化環境を提供するオープンソースソフトウェア。

公式サイト: <a href=“https://www.docker.com/"&gt;Empowering App Development for Developers | Docker</a>

コンテナ型である Docker は、完全仮想化を行うハイパーバイザ型と比べて、ディスク使用量が少ない、環境作成や起動が速い、性能劣化がほとんどない、仮想環境ごとに OS をインストールする必要がない、などの特徴を持つ。

なぜ Docker を使うの?

複数人での開発において、環境を統一することは環境依存の不具合を発生させないためにも、大事なことである。Docker を使うことで、複数人で環境をお手軽に共有したり、再利用することが可能になる。

また、ソースコードのバージョン管理のように、環境イメージを段階的に残しておけば、設定誤りなどしたときでも前の状態に戻すことができる。必要なくなったり、動かなくなってしまった環境を破棄するのも容易にできる。

開発中で使っていた環境を、そのまま本番環境に持っていくこともできる。

環境をコード化したもの(Dockerfile)を構成管理し、CircleCI などの CI ツールを使えば、環境面のテストも自動的に行える。

VirtualBox と何が違うの?

仮想化技術には大きく「ハイパーバイザ型」と「コンテナ型」の二種類あり、VirtualBox はハイパーバイザ型の仮想化技術である。

ハイパーバイザ型の仮想化では仮想環境毎に OS を丸ごとインストールする必要がある。アプリケーションに必要のないサービスやファイルも含まれるため、コンテナ型と比べると重くなる。

仮想化技術という意味では Docker も VirtualBox もできることに大きな差はなく、とりあえず「コンテナ型である Docker のほうが軽量」ということだけ把握しておけば良さそう。

Docker 用語集

調査中に出くわした関連用語を雑に並べておく。

<table><thead><tr><th>用語</th><th>説明</th></tr></thead><tbody><tr><td>コンテナ</td><td>アプリケーションの実行環境</td></tr><tr><td>イメージ</td><td>コンテナを起動するために必要な設定ファイルをまとめたもの</td></tr><tr><td>タグ</td><td>イメージのバージョンを指す概念</td></tr><tr><td>Docker Engine</td><td>Docker を利用するための常駐プログラム</td></tr><tr><td>Docker Hub</td><td>イメージを共有するためのサービス(Docker 用の GitHub みたいなもの)</td></tr><tr><td>Docker Machine</td><td>Docker Engine を搭載した仮想マシンの起動などをコマンドラインから実行できるツール</td></tr><tr><td>Docker Swarm</td><td>コンテナ間通信の設定・管理を自動化する手法</td></tr><tr><td>Docker Compose</td><td>複数のコンテナで構成されるアプリケーションについて、Docker イメージのビルドや各コンテナの起動・停止などを簡単に行えるようにするツール</td></tr></tbody></table>

参考文献

・<a href=“https://ja.wikipedia.org/wiki/Docker"&gt;Docker - Wikipedia</a>・<a href=“https://qiita.com/kotaro-dr/items/b1024c7d200a75b992fc"&gt;&amp;#x3010;&amp;#x56F3;&amp;#x89E3;&amp;#x3011;Docker&amp;#x306E;&amp;#x5168;&amp;#x4F53;&amp;#x50CF;&amp;#x3092;&amp;#x7406;&amp;#x89E3;&amp;#x3059;&amp;#x308B; -&#x524D;&#x7DE8;- - Qiita</a>・<a href=“https://knowledge.sakura.ad.jp/13265/"&gt;Docker&amp;#x5165;&amp;#x9580;&amp;#xFF08;&amp;#x7B2C;&amp;#x4E00;&amp;#x56DE;&amp;#xFF09;&amp;#xFF5E;Docker&amp;#x3068;&amp;#x306F;&amp;#x4F55;&amp;#x304B;&amp;#x3001;&amp;#x4F55;&amp;#x304C;&amp;#x826F;&amp;#x3044;&amp;#x306E;&amp;#x304B;&amp;#xFF5E; | &#x3055;&#x304F;&#x3089;&#x306E;&#x30CA;&#x30EC;&#x30C3;&#x30B8;</a>