Tatehito's Programming Blog

モダンになりたいエンジニアのブログ

仮想化OSS『Docker』について調べてみた

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

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

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

Dockerとは?

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

公式サイト: Enterprise Container Platform | Docker

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

なぜDockerを使うの?

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

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

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

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

VirtualBoxと何が違うの?

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

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

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

Docker 用語集

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

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

参考文献