【Ignite the tour Tokyo】コンテナーへの理解をチョット深めてきた
2019-12-06
azblob://2022/11/11/eyecatch/2019-12-05-ignite-container-000-scaled.png

こんにちは、最近寒くて起きれない石川です。今回はIgniteに参加して「APPS30: コンテナーを使用したアプリケーションの最新化」というセッションを聞いてきたのでレポートします。

スピーカーは「週刊アジュール」( https://ascii.jp/elem/000/001/568/1568605/ )や有名な、

さとうなおきさん( https://twitter.com/satonaoki )です。

今回のセッションの動画(英語)は http://aka.ms/apps30 で公開されています。

まず、アプリを開発する側の話です。アプリを開発するうえで、インフラを気にしたくないですよね。したくないです。

そこでコンテナーの出番!

コンテナーを使うと何がうれしいのか

  • アプリの境界を明確にすることができる
  • 以前のインストール、バージョンからの残り物がなくなる
  • VMであれば発生するオーバーヘッドなしでリソースを効率的に使用できる
  • 繰り返し可能なビルドができるようになる

ちょっと掘り下げましょう

アプリの境界を明確にすることができる

アプリに関連するアセット等がどのアプリケーションに属し、誰が所有しているのか把握できるようになります。「このアセットどのアプリで使ってるんだっけ?」みたいなことがなくなるわけですね。

以前のインストール、バージョンからの残り物がなくなる

VMでミドルウェア等々揃えて環境を構築したとしましょう。PCのダウンロードフォルダはおそらくこんなファイルが残ってるはずです。「xxxxx-windows-installer-x64.msi」

こういった構築時に必要なファイルをはじめとする実行には不要なものがなくなるわけです。うれしい。

VMであれば発生するオーバーヘッドなしでリソースを効率的に使用できる

VMであればOSが気付かないところでマシンリソースを消費しますがコンテナーで必要最低限の環境が動くため、よりアプリケーションにリソースを回せます。効率化ですね。

繰り返し可能なビルドができるようになる

例えばDockerを用いるとすると、Dockerfileを一度書くだけでCI/CDが回せるようになります。手動でビルド、デプロイなどの面倒を見る必要がなくなるわけですね。これもうれしい。

コンテナーを使う理由

いろいろなところで実際に使われているコンテナーですが「今風っぽいから」なんて理由で使ってるわけではありません。(確かにモダンだけど) 結構メリットがあるんですね。

  • 「自分のマシンだと動くのになあ」の防止
  • コンテナー内から見るとあらゆる環境が同じように見える
  • (コンテナーが動けば)どこでも動く

これも掘り下げましょう

「自分のマシンだと動くのになあ」の防止

~コンテナーを使わない場合~

Aさん「これ動いたよ」

Bさん「えっこっちだと動かないんだけど」

~コンテナーにすると~

Aさん「ここ更新したイメージ上げとくからこれ使って」

Bさん「これpullしたら動くんすね」

コンテナーを使わない場合のようなことを防止できます。具体的に言うとランタイムやプログラムの依存関係などを気にする必要がなくなる = 環境が整うのでアプリケーション以外の部分を気にする必要がなくなるわけです。

コンテナー内から見るとあらゆる環境が同じように見える

一つ上のものと似たようなものですが、コンテナーの内側から見たときにアプリを取り巻く環境(ミドルウェアやランタイムなどをはじめとした依存関係)はどこでコンテナーを実行しても同じように見えます。つまり開発者はアプリケーション以外のことを気にする必要がないということですね。

(コンテナーが動けば)どこでも動く

これは言葉の通りです。

一度動けばどこでも動きます。

といってもその基盤となる環境は

  • Linux
  • Windows
  • クラウド(Azure, AWS等々)
  • ドローン, Raspberry Pi, IoTなどのエッジデバイス

といろいろあります。

コンテナーはどのように動作しているか

  • カーネルを活用してプロセスを分離
  • 利用できるリソースを制御
  • イメージ

これらも掘り下げます。

カーネルを活用してプロセスを分離

Linuxカーネルはディストリビューションにかかわらず共通なためベースイメージが何であれ、共用できます。ここをうまく活用し、それぞれのコンテナは独立して動作でき、互いに干渉することもできなくなります。

利用できるリソースを制御

コンテナーに対してCPUやRAM、IOの割り当て量を制御できます。n%をこのコンテナに割り当てる。みたいなことができるようになっています。

イメージ

コンテナーのイメージはベースイメージとの差分をレイヤーとして管理しています。再利用可能な部分は再利用するため、ビルド時間を短縮できたりするわけですね。

VMとコンテナーの比較の図がこちらです。

文章で長々書くよりこれ見ると一発かもしれません。。。

というわけでコンテナーの復習をしつつチョット詳しくなった(つもりになった)石川でした。

それでは。

※間違ってることがありましたらマサカリおねがいします。