keshipi's blog

いつでも自分を振り返れるために書きます

イラストでわかるDockerとKubernetesを読んだ

「イラストでわかるDockerとKubernetes」を読んだ。

Docker を使うことはできるが仕様を理解しているわけではない。
もう少しコンテナ技術について理解した上で Docker を使いたいと思ったので読み始めた。

概要

  • Docker社が提唱するコンテナワークフローを象徴するフレーズ
    • Build, Ship, Run
  • コンテナ技術のエコシステムで重要な役割を担う組織
    • OCI(Open Container Initiative)
      • コンテナランタイムの仕様を標準化し、コンテナ技術の普及と相互運用性を向上させることを目的とした非営利組織
        • Docker や rkt などの主要なコンテナランタイムを開発している企業やコミュニティメンバーによって立ち上げられた
          • rkt(またはRocket)は CoreOS によって開発されたオープンソースのコンテナランタイム
          • Docker と同様にコンテナ内でアプリケーションを実行するためのツールだがいくつかの異なるアプローチを取っている
      • コンテナイメージのフォーマットとランタイム仕様を定義し、これにより異なるコンテナ実行環境間での互換性と移植性を実現している
      • つまり OCI Specification に準拠するコンテナランタイムは、互いに同じコンテナイメージを使用して動作し、相互運用性が確保される
    • CNCF(Cloud Native Computing Foundation)
      • クラウドネイティブ技術の発展と普及を促進するための非営利組織
      • Linux Foundation の傘下にあり、クラウドネイティブコンピューティングのオープンソースエコシステムを支援し、コミュニティの成長と持続可能性を推進している

Docker概要

  • コンテナイメージの解剖
    • docker save image_name:tag | tar -xC ./dumpimage/
      • docker saveコマンドはDockerイメージをアーカイブしてファイルに保存するためのコマンド
        • docker loadコマンドを使用してDockerイメージに復元することができる
      • tarコマンドのオプション
        • -x: アーカイブからファイルを解凍する
        • -C: 解凍したファイルの出力先を指定する
      • tar --listコマンドは、tarアーカイブ内のファイルやディレクトリのリストを表示する
      • tar -xOfコマンドは、tarアーカイブ内の特定のファイルを標準出力に展開する
        • -O: ファイルを標準出力に展開する
        • 例えば、tar -xOf archive.tar file.txtは、archive.tarという名前のアーカイブファイル内のfile.txtという名前のファイルを解凍し、その内容を標準出力に表示する
  • CoW(Copy-on-Write)
    • Docker がコンテナを作成する際に元となるイメージファイルシステムを変更する必要がある場合、CoW はデータのコピーを行い、そのコピーを変更する
    • これにより、オリジナルのイメージファイルシステムは変更されずにそのまま保持される
    • 変更が必要なデータのみをコピーするため、ディスクスペースと I/O 操作の効率を向上させる
  • Storage Driver
    • コンテナを構成する各レイヤをホスト上で保存していて、それらを重ね合わせてコンテナのルートファイルシステムとして利用できるようにするなど、レイヤ群の管理を担うコンポーネント
    • いくつかのドライバーがある
      • OverlayFS, Device Mapper, AUFS, Btrfs
  • 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 でインターフェース仕様が定められている