社内では、Dockerのようなコンテナー技術を使ったプラットフォームを使って開発を行っている方を多く見かけます。
一方で自分はというと、入社してすぐの頃にいろいろ勉強していたころ、自分のPCにDockerを入れようとしてHyper-Vのエラーか何かが起きて以来、触らずにいました。
とはいえ、Kubernetesなどの話をそこかしこから聞くには聞いていて気になったので、今回tech
summit2018で聞いてきた「これから始めるコンテナーの基本と始め方」のセッションについてまとめたいと思います。
この記事では、コンテナーについて、このセッションを聞く前の自分と同じくらいの状態の、話は聞いたことがあるという程度の理解度の人の理解の助けになれば幸いです。
そもそもコンテナーとは?
まず、アプリを動かすために必要なものを層のようにしてあらわすと以下のようになります。
・アプリケーション
・ミドルウェア
・ランタイム
・OS
・仮想化環境
・物理環境
この中で、アプリ、ミドルウェア、ランタイムまでを一纏めにする技術がコンテナーです。
そして、この一纏めにしたものをコンテナーと呼び、OS以下の層が別のモノに入れ替わったとしてもアプリケーションを問題なく動かせるようにできます。
このことをコンテナー型仮想化と呼びます。
この技術が開発される前は、作ったアプリケーションが別のOS上でも動くかどうか検証する際、別のOSを試すたびにコンピュータに別のOSをインストールし直すなど、環境設定を手動で行う必要がありました。
しかし、そうするのは当然手間ですし、OSも自分で用意しなければならず、また、手違いでうまく環境が設定が行えないリスクもあります。
それを解決するのが仮想化という技術であり、その中で、アプリ、ミドルウェア、ランタイムを一纏めにして使いまわせるのがコンテナーというわけです。
また、それらをコンテナーに詰め込む方法として、Dockerのdockerfileのような、必要な要素をコードとして記述したものを用意して、そこからDockerを起動するという方法もできます。
これによって、そのdockerfileを使いまわすことで環境を合わせられたり、また、それを更新した時に古い方も保持してバージョン管理を行うこともできます。
ユースケース
さて、このコンテナーを用いるシーンとしてはどのようなものが挙げられるのでしょうか。
その一つには、オンプレミスの環境からクラウド上のサーバーに移行する「リフト&シフト」が挙げられます。
オンプレミスでの環境の情報をコードしてまとめて、クラウド上にコンテナーとして展開することで、自動化の利点を生かすことができます。
他に、Micro
Service Serverlessにおいて、APIエコノミーを形成する際、それぞれのサーバーの環境を揃えるのにも利用できます。
特に、コンテナーはイベントドリブンであり、サイズが小さくなっていることが利点として挙げられます。
また、他の用途として配布することが挙げられます。
環境の情報をコンテナに詰め込んで人に渡せば、環境を揃えることができるので、元々動いていたもののホストを変えるためにコンテナを利用する、といった方法もとることができます。
採用するにあたって考えること
どんな技術を使う際にもいわれることですが、技術ありきでソリューションを考えてはいけないという考えがあります。
「こういったものを作りたい」という目的が先にあり、そのためにどんな方法をとるのかを考えるのが、多くの人に受け入れられる便利なサービスを作る際には必要である、ということです。
この考え方にのっとって、何かサービスを作ろうとした場合、まず最初に考えるべきは方針です。
それからスタイル、アーキテクチャーを決め、最後にそれらを作成するための手段を考えます。
コンテナ技術は、その手段のうちの一つであり、それを採用するかどうかを決める前にもっと根本的な点について考える必要があります。
コンテナ用のプラットフォーム
コンテナ仮想化を扱えるプラットフォームとして最も手軽なものとして挙げられていたのは、Dockerでした。
しかし、Azure上のリソースにはほかにもいくつかのコンテナ用プラットフォームとしてのリソースが用意されています。
代表的なものとしては
Appservice
Container Registry
Service Fabric
OPEN SHIFT
Container Instance
Azure Kubernetes Service
などがあります。
この中で、Kubernetes
Service Container Instanceについては、まだ日本リージョンで使うことはできません。
しかし、コンテナリージョン自体は、複数個所に分散して持つこともできるそうです。
この中で特に、Azure
Kubernetes Serviceについては、ドキュメントが充実していて使いやすいとのことです。
マネージド率も高く、AzureでKubernetesを利用するなら、このサービスを使うことがおすすめであると紹介されていました。
Azure Kubernetes Service (AKS)
また、Azure
Kubernetes Servicesのドキュメントでも紹介されていますが、コンテナーを用いた分散システムについて学べる書籍として、Designing
Distributed systemsという書籍があります。
この本は英語で書かれていますが、以下のページからであれば無料でダウンロードすることができます。
Designing Distributed
Systems
他に、実際にコンテナ技術が利用されている例として、ドイツ銀行がOpenShiftを利用しているという話もありました。
また、関連するサービスとして、Azure
DevOpsが挙げられていました。
アプリケーションのCI/CD環境を作る際に、Azure
DevOpsと
Azure Container Serviceを連携させることで、デプロイを効率化できるようです。
コンテナーの CI/CD
最後に
自分はまだアプリケーションを様々な環境で試すというようなことをしたことはありませんでしたが、アプリケーションを作って売るという商売をする人々にとって仮想化という技術だとかコンテナといったものがとても大きな意味を持っていることを感じました。
また、それらを使うためのプラットフォームをどのように利用できるのかを知ることができたという点について、このセッションはコンテナ入門として大きな意味を持っていたように感じます。
このセッションを通して、Azure
Kubernetes ServiceやDevOpsとの連携など、次に調べたいこともたくさん生まれました。
ゆくゆくはここでもそれらについても記事を書けたらと思います。