【ふわっとわかる コンテナ用語】Dockerとは

docker

「世の中には難しいことが多い!」と感じることが多い私が、様々な用語を、初学者向けにわかりやすく全力で解説します。

解説する用語

Dockerについて解説をします。Dockerは素晴らしい技術であり、システム開発をする際には必ず使用を検討されると思います。しかし、理解するのが難しい技術でもあると思います。

本記事ではDockerの概念について、図を用いて分かりやすく解説をしますのでぜひ最後まで読んでみてください。

Dockerとは

Dockerとは、コンテナという単位でデータやプログラム(ソフトウェアなど)を管理することが出来る技術のことです。Dockerを使用することでシステム開発環境を簡単に構築出来たり、システムへの負荷分散をすることが出来ます。

Dockerはどのような悩みを解決してくれるの?

みなさんは以下のような悩みありませんか?

このような悩みはシステム開発を行う上であるあるな悩みかと思います。

Dockerを使用することで悩みを解決することが出来ます。Dockerはかなり革新的ですごい技術なのでぜひ本記事を読んで理解していただければと思います。

Dockerについて詳細に説明するよ

そもそもサーバーとは?

みなさんはサーバーについて理解していますか?Dockerはサーバーで使用されるのでサーバーについて簡単に解説します。そんなの言われなくても分かるという方はこのセクションは読み飛ばしてください。

サーバーとは、その名の通り、サービスを提供するもののことです。WebサーバーはWebサイトの機能を提供し、メールサーバーはメールの機能を提供します。

Webサーバーやメールサーバーを構築するためには、物理的なサーバーにソフトウェアをインストールします。物理サーバーを用意しただけではサーバーは何も提供してくれません。

Webサーバーであれば、Webサーバーにするために必要なソフトウェアをインストールすることで、はじめて物理的なサーバーはWebサーバーの機能を持つことが出来ます。

Dockerとは?

Dockerを使用しない場合、データやプログラム(ソフトウェア)はどこに格納されているか明確でなく、ウロウロしています。私たちユーザーも「このソフトウェアはここにある!」と意識したことはありませんよね。

Dockerを使用することで、データやプログラム(ソフトウェア)に個別に部屋を用意することが出来ます。部屋を用意することで、ソフトウェアが隔離され、どこにあるのかが明確になります。この部屋のことをコンテナと呼びます。

以下の図のように、「Webサーバー用のソフトウェアがインストールされたコンテナ」や「メールサーバー用のソフトウェアがインストールされたコンテナ」を作成することが出来ます。

このようにコンテナという単位でソフトウェアを管理することが出来る技術のことDockerと言います。

コンテナ技術はDockerが一強です。そのため、「コンテナ技術=Docker」と呼ぶことが多いです。

まだいまいちピンとこないかと思いますが、これからDockerがどのようにすごいのかを解説していきます。

Dockerの何がすごいのか?

複数の環境を安全に同居させることが出来る

Dockerを使用しない場合、1台のサーバーに複数のソフトウェアをインストールして管理するのはリスクがあります。例えば、「1つのソフトウェアをアップデートした場合に他のソフトウェアにも影響が発生する、、」なんてことがあるかもしれません。

コンテナを使用すると、コンテナごとに環境が分離しているため、コンテナ間での動作は影響しません。そのため、安全にソフトウェアを管理することが出来ます。

コンテナを使用すると、1つのサーバーやPCに安全に複数の環境を同居させることが出来ます。

コンテナは持ち運ぶことが出来る

コマンドを実行するだけでとっってもかんたんにコンテナを作成、コピー、削除することが出来ます。つまり、別の環境にコンテナを楽に移動することが出来るのです。

例えば、Webサーバーとして使用していたサーバーAからサーバーBに移行をしたい場合もコマンドを実行するだけで簡単に移行することが出来てしまいます。

開発環境と同じような環境を本番環境に作りたい場合も便利ですね。もちろんコピーした後は本番環境用にカスタマイズすることが出来ます。

開発メンバーが追加された場合に追加メンバーに他のメンバーと同じ開発環境を作るのは結構大変ですよね。。下手したら「開発環境を構築するだけで1日が終わってしまう、、」なんてこともあるかと思います。

コンテナを使用して開発をしていれば、必要なソフトウェアのコンテナを作成することで追加メンバーのPCに開発環境をかんたんに用意出来ます。コマンドをポチポチしていれば開発環境が出来てしまうのは楽ちんですね。

開発が完了したら、コンテナを削除するだけななので、環境にゴミファイルが残る心配もありません。

コンテナってすごいですね。(何度目?)

かんたんに負荷分散をすることができる

コンテナを使用するとかんたんに負荷分散させることが出来ます。負荷分散をすることでシステムの可用性を向上させます。

なぜコンテナでかんたんに負荷分散が出来るのでしょうか?これは先ほど説明した、「かんたんに作成、コピー、削除できる」という特性によるものです。

この特性を利用して、システムの負荷が増えてきた場合に、素早く同一の構成のコンテナを複製することで負荷分散をすることが出来るのです。

例えば、「サザエさんのじゃんけん予想アプリケーション」があるとします。これはサザエさんがじゃんけんで出す手を予想してくれます。このアプリケーションのコンテナを作成し、運用することにします。

このアプリケーションは日曜日の夕方になるとアクセスが増加します。アクセスが増えてきた時間帯に同一構成のコンテナを増やすことで負荷分散になり、アプリケーションが重くならずにサクサク動かすことが出来るのです。

Dockerは仮想マシンと何が違うの?

「Dockerすごいのは分かったけど、仮想マシンとの違いがいまいちわからない、仮想マシンのほうが分かりやすくて良いんじゃないの?」というのはあるあるな質問かと思います。

いろいろ違いはありますが仮想マシンとの違いを一言でいうと、「コンテナのほうが軽い!」です。

仮想マシンはマシンごとにホストOSとは別にゲストOSが必要になります。ホストOSは仮想マシンを起動する元のOSでゲストOSとは仮想マシンのOSのことです。

例えば、WindowsのPCでLinuxの仮想マシンを起動した場合、Windows=ホストOS、Linux=ゲストOSになります。

コンテナはコンテナごとにゲストOSを必要としないため、その分仮想マシンよりも早く起動をすることが出来ます。以下の図はざっくりとした構成の違いです。

いまいちピンとこない場合は実際に使ってみてください。「全然違うじゃん!!」ってなります。どっちが優れているとかはケースによるので一概には言えません。

まとめ

Dockerとは、コンテナという単位でデータやプログラム(ソフトウェア)を管理することが出来る技術のことです。Dockerを使用することで環境を簡単に構築出来たり、システムへの負荷分散をすることが出来ます。

素晴らしい技術なので、システム開発に携わる方はぜひ学んでみてください。ここで書かなかったことについては別の記事で深堀をしていこうと思います!

参考

以下の書籍が大変分かりやすかったので参考にさせていただきました。

本サイトでの注意事項

本サイトではなんとなく理解することを目的としているため正確性に欠ける表現があります。より正確な情報を詳しく知りたい場合は公式ドキュメント等を参照ください。

タイトルとURLをコピーしました