Dockerコンテナはこんなに便利。コンテナとは?Dockerとは?徹底解説します。

皆さんはDockerコンテナを使っていますか?

Dockerは「コンテナ型仮想化」とも言えるもので、従来の物理サーバー(オンプレミス)や仮想サーバーとは大きく違うものです。

そしてDockerは、サーバー上、パソコン、クラウドサービスとさまざまな環境で利用できるといった特徴もあります。

 

今回は、Dockerコンテナとはどういったものか、そして使うことでどんなメリットがあるかなどDockerコンテナのさまざまな内容について解説します。

docker_container

コンテナって?

まず「コンテナ」とはどういうものなのでしょうか?

コンテナとは簡単に言うと「プロセスだけを分離して動かす技術」です。

 

プロセスとは、Wikipediaでは以下のように記載されています。(リンクはこちら

プロセスとは、処理のことである。情報処理においてプログラムの動作中のインスタンスを意味し、プログラムのコードおよび全ての変数やその他の状態を含む。オペレーティングシステム (OS) によっては、プロセスが複数のスレッドで構成される場合があり、命令を同時並行して実行する。

 

普通のコンピュータでは、OSがあり、その上で各プロセスが動いています。

これに対して、コンテナでは「プロセスだけがOSの上で分離して動作している」といったイメージです。図にしながら見ていきましょう。

1_container

2. 仮想化とコンテナとの違い

サーバー上で仮想的にプロセスを分離した枠組みを作って動かす

といった先ほどの解説を見て、「仮想化」と似ていると感じた人もいるのではないでしょうか。

また、仮想化コンテナの違いはどこにあるのでしょうか。

仮想化とは

まず一般的な「仮想化」について少しおさらいをしておきましょう。

こちらの仮想化は、先ほどのコンテナ仮想化と比較すると以下のような図になります。

 

以下の図は、ハイパーバイザーと呼ばれる制御プログラムを介して仮想環境を動かすものですが、ホストOS上に仮想ハイパーバイザーをインストールする「ホスト型ハイパーバイザー」と、ホストOSを必要としない「ネイティブ型ハイパーバイザー」の2つのタイプに分かれます。

<ホスト型ハイパーバイザー>

2_host

OS上に仮想化用のソフトウェアをインストールする「ホスト型」といいます。

<ネイティブ型ハイパーバイザー>

3_hypervisor

OSを必要とせず「ハイパーバイザー」と呼ばれるソフトウェアをインストールしてその上で仮想マシンを動かす「ハイパーバイザー型

仮想化をまとめると

上記の図でイメージは掴めたでしょうか。

「ハイパーバイザーがあり、その上で仮想化されたゲストOSがいくつも動いている」といったものが、仮想化サーバーです。

コンテナと仮想化、違いを整理すると

コンテナ仮想化とはどういったものか、一般的なの仮想化とはどういったものか解説をしてきました。

ここで、改めて両者を比較してみましょう。

 コンテナ仮想化
ホストOS必要▼必要
仮想化技術:ホスト型ハイパーバイザー
・VMware Workstation Player
・Oracle VM VirtualBox
など

▼不要
仮想化技術:ネイティブ型ハイパーバイザー
・VMware ESXi
・Hyper-V
・KVM
など
ゲストOS不要必要
※各ゲストにはOSがインストールされる
ゲストの形態プロセスのみOS+プロセス
ホストOSとゲストOSとのやりとりコンテナエンジンハイパーバイザー

これと先ほどの図を合わせて考えると両者の違いはより明確に理解できるはずです。

merit_demerit

コンテナの種類〜Dockerとは

コンテナ技術を用いてプロセスを実行する仕組みにはいろいろなものがあります。

たとえば、LinuxコンテナやOpenVZなどもコンテナと言えます。

 

そうしたコンテナ技術を活用したサービスで最も広まっているのがDockerです。

Dockerは、Docker Inc.によって2013年にリリースされたサービスで、Windows/Linux/Macなどさまざまな環境で動作することが特徴です。

KubernetesやDockerUIなど、GUIツールを使って管理が行うことができるというメリットがあります。

また現在では、DockerはAWSやAzure、GCPなど多くの大手のクラウドサービスでも対応が進んでいます。

Dockerコンテナを使うメリットとは

最近、開発の現場や各種サービスなどでDockerコンテナを使うケースが増えています。

では、Dockerコンテナを使うメリットはどういったところにあるのでしょうか。

 

コンテナを使うメリット

迅速な環境構築が可能
どんな環境でも同じように動く
開発からリリースまでが早くスムーズに行える
ロールバックが素早くできる

など

 

このように、従来のOS+アプリケーションから構成されるサーバーと比較してさまざまなメリットがあります。

どうすれば使える?

多くの点で従来のサーバーと比べてメリットの多いDockerコンテナですが、どうすれば使うことができるのでしょうか。

 

Dockerの利用には以下のような方法があります。

 

パソコンなどのデスクトップ環境での利用:Docker Desktop
プロセスとしての利用:Linux, Macなど
クラウドのOS上での利用
クラウド上のコンテナ実行サービスでの利用:AWS Fargate、Google Cloud Runなど

 

このようにDockerコンテナは目的や状況に合わせてさまざまな環境で利用することができるようになっています。

まとめ

今回解説したように、Dockerコンテナには従来のサーバーにはなかったようなさまざまなメリットがあります。

たとえば、開発の現場では、以下のようなメリットが挙げられます。

開発したサービスを迅速に本番運用までリリースできるといったこと
障害時のロールバックが速いこと

こうしたメリットは、スピード感を持った迅速かつスムーズなアプリケーション開発/リリースにつながります。

 

また、AWS、Azureなど多くのクラウド環境でもDockerへの対応が幅広く行われており、将来性も高いと言えます。

今後、「エンジニアとして仕事をしていく」あるいは「IT技術を活用してビジネスを展開していく」中で、Docker必ず押さえておくべき技術であると言えます。