yn2011's blog

技術メモ

コンテナを中心にDocker、Herokuの基本概念を整理する

Docker、Herokuについてコンテナを軸に基本的な言葉の意味や概念を整理してみたいなあと思ったので書いた。引用中心なので詳細は各ページを参照ください。

そもそもコンテナとは何か?

コンテナは、リソースが分離されたプロセス内で、アプリケーションおよびその依存関係を実行できる、オペレーティングシステムの仮想化の 1 つの方法です。

コンテナとは – アマゾン ウェブ サービス (AWS)より引用

  • OSのプロセスとスレッドの違いが曖昧な方はこちらも スレッド (コンピュータ) - Wikipedia
    • ちなみに並行(コンカレント)と並列(パラレル)の違いについては...(略)

コンテナ vs 仮想マシン

仮想マシン (VM) はサーバーハードウェアを仮想化し (直接管理する必要をなくす)、コンテナはサーバーのオペレーティングシステムを仮想化します。

f:id:pokuwagata:20181121003636p:plain

  • 上記の図はHypervisor型仮想環境上を例にコンテナと仮想マシンの違いを説明している(と思われる、特に明文化されていないので自分の解釈)
  • 仮想マシンは上図のGuest OSからAppまでのこと
    • 図にはないけど仮想マシンという言葉はハードウェアの仮想化も含むと思う
  • コンテナは(Guest OSにインストールされた)エンジン上のBins/LibsからAppまでのこと(=仮想化されたOSを含むユーザ定義の実行環境)

コンテナとは – アマゾン ウェブ サービス (AWS)Docker とは | AWSより引用

コンテナの利点

  • 仮想マシンに比べて軽量
    • 軽量・効率的な理由は、例えばハードウェアの仮想化不要、各コンテナはプロセスとして起動等が挙げられる
  • アプリケーションや開発環境のポータビリティ高
    • 配布可能、同一環境の再現が容易

DockerはコンテナのOS

Docker はコンテナに対するオペレーティングシステムです。仮想マシンがサーバーハードウェアを仮想化 (直接管理する必要をなくす) ように、コンテナはサーバーのオペレーティングシステムを仮想化します。Docker は各サーバーにインストールされ、シンプルなコマンドを使ってコンテナを構築、開始、停止できます。

Docker とは | AWSより引用

コンテナのオーケストレーション

クラスタリング

そこで、多数のサーバーを組み合わせることがよく行われています。このような仕組みのことを、「クラスタリング」(Clustering)と呼びます。これにより、高い負荷がかかる処理を、複数のサーバーに分散することができ、システム全体の性能を高めることができます。また、多数のサーバーで同じ処理を実行できるようにしておけば、その中の1台のサーバーが故障などで停止したとしても、残りのサーバーで処理を続行することができ、システムを止めずに運用することができます。

https://blog.arena.ne.jp/docker/1868より引用

スケジューリング

  • いつ、どのコンテナ作成・実行を行うか

Kubernetesはコンテナのオーケストレーションシステム

Kubernetes(クーベネティス/クーベルネイテス、よくK8sと略記される)は、コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、オープンソースのコンテナオーケストレーションシステムである。

Kubernetes - Wikipediaより引用

Herokuはコンテナベースのクラウドプラットフォーム

Heroku は、マネージドコンテナシステムをベースとし、最新鋭のアプリのデプロイや実行に必要なデータサービスと強力なエコシステムを備えたクラウドプラットフォームです。

Heroku Platform as a Service & Data Services | Heroku | Herokuより引用

Herokuで使用されるコンテナdyno

Heroku で使用されるコンテナは「dyno」と呼ばれます。dyno はユーザーが指定したコマンドにもとづいてコードを実行するように設計された Linux コンテナであり、それぞれが相互に隔離された状態で仮想化されています。

Heroku Dynos | Herokuより引用

HerokuでDockerを動かす?

感想

この手のサービスはチュートリアル通りに動かすのは簡単だが、そこから少しでも外れたことをしようとすると大変になりがち。そもそも自分がやろうとしていることとサービスの目的や方向性が合致していない場合もあり、試行錯誤する時間が無駄になることもある。サービスのベースになっている技術からサッと筋の良し悪しを判断できるといいですね...