12,925
回編集
(→概要) |
|||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
コンテナとは、Linuxシステム上で実行される、互いに隔離されたプロセス群のことである。<br> | |||
また、ソフトウェアプロセスやマイクロサービスをパッケージ化して、あらゆるコンピューティング環境で実行可能にするソフトウェアソリューションである。<br> | |||
<br> | |||
コンテナは、1つのプロセス・グループがシステム上の他のプロセスに干渉しないようにする。<br> | |||
<br> | <br> | ||
コンテナに含まれるファイルには、アプリケーションコード、環境変数、設定コード、バイナリプログラム、ソフトウェアの依存関係、ライブラリ等がある。<br> | コンテナに含まれるファイルには、アプリケーションコード、環境変数、設定コード、バイナリプログラム、ソフトウェアの依存関係、ライブラリ等がある。<br> | ||
7行目: | 10行目: | ||
このイメージは、クラウド、オンプレミスのデータシステム、ローカルシステム等、あらゆるプラットフォームにデプロイされる。<br> | このイメージは、クラウド、オンプレミスのデータシステム、ローカルシステム等、あらゆるプラットフォームにデプロイされる。<br> | ||
<br> | <br> | ||
Podman (Pod | また、不正なプロセスがシステム・リソースを独占することはできず、他のプロセスがタスクを実行するのを妨げることもできる。<br> | ||
悪意のあるコンテナであったとしても、他のコンテナを攻撃したり、データを盗んだり、サービス拒否攻撃を引き起こしたりすることもできない。<br> | |||
<br> | |||
コンテナの最終的な目標は、同じライブラリの異なるバージョンを必要とするアプリケーションと競合しないように、<br> | |||
共有ライブラリの独自のバージョンでアプリケーションをインストールできるようにすることある。<br> | |||
その代わり、コンテナによってアプリケーションは仮想化された環境に住むことができ、あたかもシステム全体を所有しているかのような印象を与えることができる。<br> | |||
<br> | |||
Podman (Pod Manager) は、Open Container Initiatives (OCI) のコンテナイメージを開発、管理、本番環境で実行する時に使用するコンテナエンジンである。<br> | |||
Podmanプロジェクトは、Podmanを<u>Linuxシステム上でOCIコンテナを開発、管理、実行するためのデーモンレス・コンテナ・エンジン</u>と説明している。<br> | |||
<br> | |||
OCIは、コンテナフォーマットとランタイムに関するOSレベルの仮想化ソフトウェアコンテナのオープンなガバナンス構造を実装するために設計された。<br> | OCIは、コンテナフォーマットとランタイムに関するOSレベルの仮想化ソフトウェアコンテナのオープンなガバナンス構造を実装するために設計された。<br> | ||
<br> | <br> | ||
Podmanコンテナは、スーパユーザ / 非スーパーユーザのいずれでも実行可能である。<br> | Podmanコンテナは、スーパユーザ / 非スーパーユーザのいずれでも実行可能である。<br> | ||
<br> | |||
PodmanはDockerと同じコマンドラインでDockerができることのほとんど全てを行うことができるため、Docker = Podmanという単純な行のエイリアスで要約されることが多い。<br> | |||
しかし、Podmanはそれ以上のことができる。<br> | |||
<br> | |||
Dockerを理解することはPodmanを理解する上で重要ではないが役立つこともある。<br> | |||
<br><br> | |||
== コンテナ・オーケストレータ / コンテナ・エンジン / コンテナ・ランタイム == | |||
コンテナの世界では、コンテナ・オーケストレータ、コンテナ・エンジン、コンテナ・ランタイムといった用語が同じ意味で用いられることがよくある。<br> | |||
<br> | |||
==== コンテナ・オーケストレータ ==== | |||
コンテナを複数の異なるマシンやノードにオーケストレートするソフトウェアプロジェクトや製品のことである。<br> | |||
これらのオーケストレータは、コンテナを実行するためにコンテナエンジンと通信する。<br> | |||
<br> | |||
主要なコンテナ・オーケストレータはKubernetesで、元々はDockerデーモンのコンテナ・エンジンと通信するように設計されていたが、<br> | |||
Kubernetesはコンテナ・エンジンとして主にCRI-Oまたはcontainerdを使用しているため、Dockerを使用することは時代遅れになりつつある。<br> | |||
<br> | |||
CRI-Oとcontainerdは、オーケストレーションされたKubernetesコンテナを実行するために構築されている。<br> | |||
<br> | |||
Docker SwarmおよびApache Mesosも、コンテナ・オーケストレータである。<br> | |||
<br> | |||
==== コンテナ・エンジン ==== | |||
主に、コンテナ化されたアプリケーションを単一のローカル・ノードで実行するように構成するために使用される。<br> | |||
ユーザ、管理者、開発者が直接起動できる。<br> | |||
<br> | |||
また、ブート時にSystemdユニットファイルから起動したり、Kubernetesのようなコンテナ・オーケストレータから起動することもできる。<br> | |||
<br> | |||
前述したように、CRI-Oとcontainerdは、Kubernetesがコンテナをローカルで管理するために使用するコンテナエンジンである。<br> | |||
一般的に、ユーザが直接使用することは想定されていない。<br> | |||
<br> | |||
DockerとPodmanは、コンテナ化されたアプリケーションを1台のマシンで開発、管理、実行するためにユーザが使用する主要なコンテナエンジンである。<br> | |||
<br> | |||
PodmanがKubernetesのコンテナ起動に使われることはほとんどない。<br> | |||
<br> | |||
Buildahもコンテナエンジンの1つであるが、コンテナイメージの構築にしか使用されない。<br> | |||
<br> | |||
==== Open Container Initiative (OCI) コンテナ・ランタイム ==== | |||
Linuxカーネルの様々な部分を設定して、最後にコンテナ化されたアプリケーションを起動する。<br> | |||
最も一般的に使用される2つのコンテナ・ランタイムは、runcとcrunである。<br> | |||
<br> | |||
KataとgVisorも、コンテナ・ランタイムである。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>Open Container Initiative (OCI) は、コンテナフォーマットとランタイムに関するオープンな業界標準を作成することを主な目的とした標準化団体である。</u><br> | |||
<u>詳細を知りたい場合は、https://opencontainers.org を参照すること。</u><br> | |||
<br> | |||
下図は、オープンソース・コンテナ・プロジェクトがどのカテゴリーに当てはまるかを示している。<br> | |||
[[ファイル:Container 1.png|中央]] | |||
<br><br> | <br><br> | ||