この記事では、《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のセットアップやコンテナの起動方法』
についてもまとめる予定です。