この記事では、《Docker や コンテナ》について、
業務を通して学習した内容をまとめています。
- 『Docker』とは…?
- 『Docker』って何が良いの…?
- 『Docker』のアーキテクチャ(構成)
こういった疑問についてまとめています。
※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。
『Docker』とは…?
『Docker』とは・・・
Linux上でコンテナを作成・管理・実行するためのプラットフォームです。
Docker社(旧dotCloud社)によって、2013年3月に初版がリリースされ、現在ではインフラ関係やDevOps界隈で注目されている技術の一つです。
Windowでも・・・
Windows Server 2016 からはWindowsコンテナが利用できるようになりました。
※Windowsコンテナは、Windows上でのみ実行可能です
『Docker』を利用すると何がメリットなの…?
『Docker』はLinuxのコンテナ技術を使ったもので、よく『仮想マシン』と比較されます。
なので、まずは・・・
『仮想マシン』と『コンテナ』の違い
について簡単に見ていきましょう。
『仮想マシン』と『コンテナ』について
『仮想マシン』は・・・
ホストOS上で『VirtualBox』や『VMware』などの仮想化ソフトウェアを利用して仮想マシンを作成し、その仮想マシンのゲストOS上でアプリやミドルウェアを動かします。
【余談】
サーバー仮想化は、利用する仮想化ソフトウェアによって『ホスト型』と『ハイパーバイザー型』の2種類の手法に分類され、上記は『ホスト型』に該当します。
『ハイパーバイザー型』についても知りたい方は、ググってみてください。
そのため・・・
起動に時間がかかるというデメリットがあります。
(もちろん、完璧に環境を分離できるというメリットもありますが…)
それに対し、『Docker』は・・・
ホストOSのみの使用でプロセスやユーザなどを隔離することで、ホストOS上にあたかも別のマシンが動いているかのような環境を作ります。
そのため・・・
軽量で、且つ高速に起動・停止することが可能になります。
『Docker』を利用するメリット【5つ紹介】
『Docker』では、開発環境の構築(ミドルウェアのインストールや各種環境設定)をコード化して管理します。
そのため・・・
『Docker』を利用することで、以下のようなメリットがあります。
- コード化して管理することで、
誰でも、どこでも同じ開発環境が構築できる - 構築した開発環境を簡単に配布できる
例えば・・・
"開発環境(Windows上)では正常に動作したけど、Linuxでは動作しなかった"
なんて経験がある方もいるかと思いますが…
このケースの場合、開発工程から『Docker』を利用することで防ぐことができます。
さらには・・・
『開発工程の中で使っていた環境をそのまま本番環境に持っていく』
なんてことも可能なので、差分の発生がなくなり、環境差分によるトラブルも防ぐことができます。
また・・・
作成したDocker イメージ
は他の開発メンバーにも渡せるので、それを使ってもらうことで…
- メンバー間での開発環境のバージョンずれ防止
- 準備時間(開発環境を準備する時間)の短縮
にもつながります。
実際・・・
"資料の不備や手順ミスが原因で、開発環境の準備に丸一日かかってしまった"
なんて経験がある方も多いんではないでしょうか…苦笑
そんなところで、メリットをまとめると下記の5つのようなモノが挙げられます。
- 起動が速い
- コード化して管理することで、
誰でも、どこでも同じ開発環境が構築できる - 構築した開発環境を簡単に配布できる
- メンバー間での開発環境のバージョンずれ防止
- 準備時間(開発環境を準備する時間)を短縮できる
※あくまで一部なので、他にもたくさんあると思います
『Docker』のアーキテクチャ(構成)
『Docker』のシステム構成に関してのお話で、要は…
『コンテナをどうやって動かすか』
ってことについてです。
具体的には、『Docker』は下記の4つで構成され、サービスを提供しています。
- Docker デーモン
- Docker クライアント
- Docker イメージ
- Docker コンテナ
それでは、ひとつずつ見ていきましょう。
①:Docker デーモン
Docker デーモン
は・・・
コンテナの管理・実行を行います。
Docker デーモン
はイメージからコンテナを作成したり、実行したりするだけの存在なので・・・
実際は、Docker デーモン
に対して指示を出すシステムが必要です。
それが、お次に紹介する『Docker クライアント』です。
②:Docker クライアント
Docker クライアント
は・・・
『Docker』を操作するためのアプリケーションです。
管理者からのコマンドを受け付けたら、その先にあるDocker デーモン
へ指示を飛ばし、それによってコンテナが動いたり止まったりする訳です。
③:Docker イメージ
Docker イメージ
は・・・
コンテナの元になるひな形で、Docker レジストリ
に保管されます。
Docker レジストリ
としては、Docker Hubと呼ばれるオンラインサービスが提供されており、そこではイメージの共有やダウンロードが可能です。
④:Docker コンテナ
Docker コンテナ
は・・・
Docker イメージを元にして実行されたプロセスです。
各コンテナは分離されているので、独立したホストの同じように扱うことが可能です。
まとめ・感想
『Docker』に関しても『業務のなかでもやってみたい!』と思ってますが、なかなかチャンスがなさそう…。
(待っててもチャンス来ないので、行動するしかないですね笑)
今後は…
『Dockernのセットアップやコンテナの起動方法』
についてもまとめる予定です。