「イラストでわかるDockerとKubernetes」を読んだ。
Docker を使うことはできるが仕様を理解しているわけではない。
もう少しコンテナ技術について理解した上で Docker を使いたいと思ったので読み始めた。
概要
- Docker社が提唱するコンテナワークフローを象徴するフレーズ
- Build, Ship, Run
- コンテナ技術のエコシステムで重要な役割を担う組織
- OCI(Open Container Initiative)
- コンテナランタイムの仕様を標準化し、コンテナ技術の普及と相互運用性を向上させることを目的とした非営利組織
- Docker や rkt などの主要なコンテナランタイムを開発している企業やコミュニティメンバーによって立ち上げられた
- rkt(またはRocket)は CoreOS によって開発されたオープンソースのコンテナランタイム
- Docker と同様にコンテナ内でアプリケーションを実行するためのツールだがいくつかの異なるアプローチを取っている
- Docker や rkt などの主要なコンテナランタイムを開発している企業やコミュニティメンバーによって立ち上げられた
- コンテナイメージのフォーマットとランタイム仕様を定義し、これにより異なるコンテナ実行環境間での互換性と移植性を実現している
- つまり OCI Specification に準拠するコンテナランタイムは、互いに同じコンテナイメージを使用して動作し、相互運用性が確保される
- コンテナランタイムの仕様を標準化し、コンテナ技術の普及と相互運用性を向上させることを目的とした非営利組織
- CNCF(Cloud Native Computing Foundation)
- OCI(Open Container Initiative)
Docker概要
- コンテナイメージの解剖
docker save image_name:tag | tar -xC ./dumpimage/
docker save
コマンドはDockerイメージをアーカイブしてファイルに保存するためのコマンドdocker load
コマンドを使用してDockerイメージに復元することができる
tar
コマンドのオプション-x
: アーカイブからファイルを解凍する-C
: 解凍したファイルの出力先を指定する
tar --list
コマンドは、tarアーカイブ内のファイルやディレクトリのリストを表示する--list
: アーカイブ内の内容を表示する
tar -xOf
コマンドは、tarアーカイブ内の特定のファイルを標準出力に展開する-O
: ファイルを標準出力に展開する- 例えば、
tar -xOf archive.tar file.txt
は、archive.tar
という名前のアーカイブファイル内のfile.txt
という名前のファイルを解凍し、その内容を標準出力に表示する
- CoW(Copy-on-Write)
- Storage Driver
- Docker はクライアント / サーバ型のアーキテクチャ
- docker コマンド: Docker のクライアントコマンド
- Docker デーモン(dockerd): Docker のサーバ
- コンテナの実行、管理を担当する
- コンテナの管理、イメージの管理、ネットワーキング、トレージの管理、リソース管理
- コンテナ化されたアプリケーションの実行環境を提供し、コンテナのライフサイクル全体を管理する責任を持つ
- コンテナの実行、管理を担当する
- ホストから隔離された実行環境をコンテナとして作り出したり、直接操作をするのは OCI ランタイムが行う
- runC や containerd などが含まれる
コンテナランタイム
- コンテナ作成を担当するソフトウェア
- DockerやKubernetes のような上位のオーケストレータから指示を受けて、ホストマシン上でコンテナイメージを実際に実行可能なプロセスとして起動し、そのプロセスの実行や管理を担当する
- Docker の場合、ユーザーが Docker CLI を使って Docker デーモンを通じてコンテナランタイムと連携してコンテナの操作を実行する
- Kubernetes の場合、Kublet が CRI(Container Runtime Interface)を介してコンテナランタイムと連携し、ポッド内のコンテナの作成や実行を担当する
- CRI ランタイムは、Kubelet とコンテナランタイムの間のインターフェースであり、Kubelet はこのインターフェースを通じてコンテナの操作を実行する
- これら Docker デーモンや CRI ランタイムはコンテナランタイムの中でも 高レベルランタイム と呼ばれる
- 高レベルランタイムではコンテナ、ネットワーク、イメージなどの全般的な管理を担う
- 高レベルランタイムを通じてホストマシン上で隔離されたコンテナを作り出すのが 低レベルランタイム
- OCI ランタイムと呼ばれており OCI Specification でインターフェース仕様が定められている