コンテナとは?Dockerは今や必須技術?
どうもkoheiです。
明日、いよいよHUNTER×HUNTERですね
ちょうど昨日までGoogleのCloudサービスを中心としたイベント「Google Cloud Next」が東京でも開催されてましたね。
今日は、そのイベントの中でも「セキュリティ」「DevOps」に並ぶ大きなトピックとして取り上げられていた「コンテナ」について書きたいと思います。
Google Nextの記事はこちらでもまとめられていましたので参考に
UNIQLOとの協業でもニュースになっていましたね。
コンテナとは?
簡単に言うと、アプリケーションなどの実行環境をパッケージングする技術です。
サーバーの仮想化技術とよく比較されますが、サーバ仮想化は文字通りサーバのハードウェアをソフトウェアで再現している点などが違いとして挙げられます。
コンテナを使うと何がうれしいの?
コンテナ技術を使うと下記のようなメリットが得られます。
メリット:
1. 環境ごとパッケージングされるので、別の環境へまる動かすのが容易
2. 環境の作り直しが容易
3. コードで環境や機能を記述するので、構成把握が容易。
難しい感じですが、以下のような問題を解決してくれます。
1. 開発環境でアプリ作ったけど、本番だと動かない・・・
→コンテナ化して運べば環境差分ないので解決!
2. 新しい人が職場に来たので、その人用の開発環境をつくらなきゃ・・・OS入れて、アプリケーション入れて・・・で1日経過
→コンテナ化して作っておけば数秒で完成
3. 今なんとなく使ってるサーバがあるが、先人が作っていろんなアプリも動いていて、中身のわかる人もいなくなって、もはや謎
→コンテナの構成ファイル見れば、全部書いてあるよ!
さて、もちろんデメリットもあります。
デメリット:
1. セキュリティの担保。一つのコンテナで結局同じOSを利用している。
2. 運用監視。これまでのサーバとは異なる方式が必要。
3. statefulな環境(データを永続的に保持する)は不向き。
最近は上記のような欠点を補うため、様々なコンテナ管理ツールや、google, IBM, microsoftなどが提供しているコンテナ管理サービスも登場しています。
それはまた別の機会にまとめたいと思います。
Dockerの登場
さて、こうしたコンテナ技術ですが、最近はdocker社の作った2013年にオープンソースソフトウェアとして公開したDockerを使うのが中心です。
いまやweb業界では、会社がdockerを使っていなければ転職した方がいいと言われるほど必須技術と言われているそうです。
実はコンテナ化技術自体は、linuxの機能を組み合わせることで実現できていました。
dockerの優れたところは、コンテナ技術をつかって、アプリケーションをどこにでも運び、どこでも動かせるようになった点にあります。
dockerを使ったコンテナ利用までの仕組みを下記の図にまとめてみました。
まず、最初にコンテナとして実行させたいアプリケーションや動作環境をdockerfileに記載します。ここで記載された内容を基にコンテナが作られます。Dockerでは、コンテナはdocker imageという単位で扱われ、OS上のdocker engine上で実行されることで環境が構築されます。
このdocker imageはDocker Hubと呼ばれるクラウド上のレポジトリサービス(docker版のgithubですね)で共有し、imageファイルも利用することもできます。
なぜコンテナがこんなに流行ってるのか?
先ほどコンテナのメリットで書いた、環境移行が容易なことやコードでの構成管理はVagrant×VMwareなどの仮想サーバ技術でも実現できることは多いです。
しかし、「ユーザへのサービス提供を早める」という点でdockerに優位性がありました。
クラウド上でクリックするだけで、サーバ構築ができるようになりましたが
サーバ構築に数十秒~数分、サーバ上のアプリ構築にも数分~数時間かかります。
しかし、dockerならimageさえ作っておけば数秒で完了します。
このスピードの差が、dockerの支持を集めた最初のきっかけと言われています。
昔は、サーバ、物品調達が一番長くかかっていました。
昨今は仮想化、クラウド技術の発達により、サーバインフラはクリックするだけで整う時代になりました。
このような時代の変遷を経て、サービス提供にかかるまでに時間的な支配をしているプロセスは
サーバ調達→サーバ構築→アプリ開発へとシフトしていきます。
そこでアプリ開発を加速するために
・様々なプログラミング言語や開発手法に対応した開発環境整備を高速化する
・商用と開発との環境差分を埋める
などのニーズが高まり、結果Dockerというソフトウェアがいまや必須技術とまで言われるようになってきました。
まとめ
さて、ここまでコンテナ技術とDockerについて書いてきました。
今回は省略しましたが、Dockerコンテナの管理ツールであるKubernetesについても今後まとめたいと思います。
ではでは