- 何らかのWebアプリ開発を行ったことがある
- インフラの知識はあまりない
- Dockerの全体像をふんわり把握したい
最近Dockerを使っている人が多いなぁ。自分もDockerを利用して開発してみたいけど、なんだかハードルが高そう。
Dockerに関する記事や教材は沢山ありますが、難しい言葉が羅列されている場合が多いですよね。
そのため、駆け出しエンジニアがDockerを学習する場合、Dockerに対して難しいイメージを持つ方が大半でしょう。
そこで本記事では、上記のようにDockerに対して難しいイメージを持っている方に向けて、イラストを使ってなるべく分かりやすく「Dockerとは何なのか?」を説明していきたいと思います。
本記事を読み終えることで、Dockerの全体像がなんとなーく自分の中に落とし込めるでしょう。
Dockerとは
Dockerとは、Docker社が提供しているコンテナ型のアプリケーション実行環境のことです。
これだけ聞いても、なんのこっちゃ!(怒)となる方が多いかと思いますので、順を追って説明していきたいと思います。
まずは下記のイラストをご覧下さい。
このイラストは「ホスト型仮想化」と、「コンテナ型仮想化(Docker)」を比較したものです。
ホスト型仮想化とは、ホストOS上で仮想化ソフトを動かして仮想マシンを作り、仮想マシンの中でOS(ゲストOS)を動かします。
そしてゲストOSの上でアプリケーションを動かすといった技術になります。
簡単に言うと、パソコンの中でパソコンを動かして、その中でアプリを動かすと言うことです。
ちなみにホスト型仮想化で用いられる、主なソフトウェアは
- VMware Player
- Oracle VirtualBox
- Virtual PC
などが挙げられます。
ホスト型と比較して、コンテナ型仮想化とはコンテナエンジン(Dockerの場合はDocker Engine)を動かして、ホストOS上にローカルの環境から隔離された空間(コンテナ)を作ります。
そしてコンテナの中で、アプリケーションを実行させるという技術です。
コンテナ型はホストOSのリソースを共有するため、ゲストOSを用意する必要がありません。
ホスト型との決定的な違いは、コンテナ型はゲストOSを用意する必要がなく、非常に負荷が小さく処理が早いという点です。
仮想マシンのように、OSを立ち上げる手間や時間が一切掛からないので、コンテナ型仮想化では、コンテナを作ったり削除したりする作業が気軽に手早くできるんです。
Dockerを使うことで得られる様々なメリット
「Dockerとは」で説明した内容を見ていただくと、Dockerを使った場合、従来の仮想化技術(ホスト型)に比べて、負荷が小さく処理が早いというメリットを知っていただけたと思います。
他にも、Dockerがなぜ多くの人から愛され使われているのか?という疑問を解消するために、Dockerを使うメリットをいくつか紹介します。
- 負荷が小さく処理が早い
- アプリの実行環境を他の人と共有することができる
- 開発環境で作ったコンテナを、本番環境に持っていくことができる
- 一度環境設定ファイルを書けば、同じ環境を何度でもすぐに構築することができる
「負荷が小さく処理が早い」という点については解説済みなので、それ他の3つを紹介します。
それでは、見ていきましょう。
アプリの実行環境を他の人と共有することができる
Dockerは、アプリの実行環境を「Dockerイメージ」または、「Dockerfile」を使って他の人に共有することができます。
※Dockerイメージ、Dockerfileに関しては後述しています。
共有方法はいたって簡単で、Dockerイメージを共有する場合は「Docker Hub」などのレジストリサービスを利用して、Dockerイメージをアップロード&ダウンロードすることができます。
Dockerfileを共有する場合は、「GitHub」などのバージョン管理サービスを使うことで、簡単に共有することが可能です。
開発環境で作ったコンテナを、本番環境に持っていくことができる
Dockerは開発環境で作ったコンテナを、そのまま本番環境にデプロイすることができます。
※実際にはDockerイメージを使用して、開発環境と同じコンテナを本番環境に作ります。
環境の違いが出ないので、開発環境と全く同じようにコンテナを動作させることが可能です。
また、複数人で開発を進める際コンテナを共有することで、「開発環境→本番環境」の場合と同様に、環境の違いが起こりません。
一度コンテナの動作確認ができていれば、他の人も同じようにコンテナを起動することができます。
一度Dockerfileを書けば、同じ環境を何度でもすぐに構築することができる
一度Dockerfileにコンテナの構成を書き込めば、同じ環境のコンテナを何度でも自動で作ることが可能です。
※Dockerfileにて、適切なバージョン指定は必須
ちなみに、Dockerfileのようにインフラストラクチャをコードとして記載し、実行するだけで記載したインフラの環境が整えられることを「Infrastructure as Code(IaC)」と呼びます。
手作業でインフラを構築するのに比べて、IaCを利用することで作業ミスなどが起きず、いつでも同じ環境を一瞬で構築することができます。
最後に
Dockerの全体像を、なんとなーく把握していただけたでしょうか?
今回は、Dockerをふんわり把握していただく為に、イラストを用いながらあまり深堀りはせず解説していきました。
本記事でDockerの全体像をふんわり把握できたのなら、今度は自分の手で実践しつつ、徐々に確実な知識にしていって下さい。
Dockerの学習コストは少々高いですが、使えるようになると二度と手放せなくなるぐらい便利な技術なので、是非習得できるよう頑張ってみて下さいね。