kmystのブログ

ごくごく個人的な日記

Docker/Kubernetes 実践コンテナ開発入門

発売してすぐ購入したものの思ったように読む時間が取れずようやく読了(ざっくりだけど)

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

Dockerの基礎から始まりdocker-compose、Swarm、Kubernetesと段階的に解説されておりわかりやすい構成でした。
ちょうどDocker for MacKubernetes対応したタイミングだったこともあり最新情報が盛り込まれてたのもよかったです。

初版だったためか誤植が多かったのがちょっと難点でした。
が、それでも内容としてはとてもよかったです。

せめてDocker類のコマンドは再読してちゃんと理解する…!!
Kubernetesは独特の概念やら用語が多いので実運用してみないと使いこなせなそうだなぁ…

以下は知識整理用のメモ

  • Dockerとは

    • コンテナ型仮想化技術を実現するために実行される常駐アプリケーション
    • それを操作するためのコマンドフロントインターフェイス
  • コンテナ仮想化技術

    • 仮想化ソフトウェアなしにOSのリソースを隔離し仮想OSを実現する
    • この仮想OSをコンテナと呼ぶ
    • コンテナ生成のオーバーヘッドは他の仮想化ソフトウェアと比較して少ない
    • そのため高速に起動・終了でき少ないマシンリソースで済む
  • Dockerを利用する意義

    • 不変な実行環境による冪等性の確保
    • 環境構築とアプリケーション構成のコード化
    • 実行環境とアプリケーションの一体化によるポータビリティ向上
    • アプリケーションやミドルウェアの構成管理の容易さ
  • Docker Compose

    • 複数のコンテナ実行を一括管理できる構成管理ツール
    • yaml形式の設定ファイルで管理
  • Data Volume

    • コンテナ内のディレクトリをディスクに永続化する仕組み
    • ホスト・コンテナ間でのディレクトリ共有・再利用が可能になる
    • イメージを更新して新しくコンテナを作成しても同じVolumeを利用し続けることができる
  • Data Volumeコンテナ

    • コンテナ間でディレクトリを共有
    • 使う側はホストを意識する必要がなくVolumeコンテナを指定すればよい
  • Docker Swarm

    • 複数のDockerホストを束ねてクラスタ化するツール
    • コンテナオーケストレーションシステムの一つ
    • Docker in Docker
      • Dockerホストとして機能するDockerコンテナ
      • Dockerホストをコンテナで入れ子にできる
    • Kubernetesの前振りっぽい感じもあったのであとは省略
  • Kubernetes

    • コンテナの運用を自動化するためのコンテナオーケストレーションシステム
    • Dockerホストの管理、コンテナ配置、スケーリング、ロードバランサー、死活監視を備える
    • 様々なリソースを組み合わせて、柔軟性の高いアプリケーションを構築できる
      • リソース:アプリケーションのデプロイを構成する部品のようなもの
  • Node

    • クラスタの管理下に登録されているDockerホスト
    • コンテナをデプロイするために利用される
  • Namespace

  • Pod

    • コンテナの集合体の単位
    • 少なくとも1つのコンテナを持つ
      • GoアプリケーションとNginxコンテナを一括りにするとか
    • 同一Pod内のコンテナは必ず同一Nodeに配置される
  • ReplicaSet

    • 同じ仕様のPodを複数生成・管理するためのリソース
  • Deployment

    • ReplicaSetより上位のリソース
    • アプリケーションデプロイの基本単位となるリソース
    • ReplicaSetを管理・操作する
      • ReplicaSetの世代管理が可能
    • 指定されたPod数の確保、新バージョンへのPod入れ替え、以前バージョンへのロールバックなどを行う
  • Service

    • ReplicaSetに対する経路やサービスディスカバリを提供するためのリソース
    • Podに対してラベルを設定し、指定ラベルのPodにトラフィックを流すことが可能
    • ClusterIP Service
      • 内部IPアドレスにServiceを公開
      • 外からはアクセスできない
    • NodePort Service
      • ClusterIPを作るのはClusterIP Serviceと一緒だが外からもアクセスできる
  • Ingress

    • Serviceのクラスタ外への公開とHTTPルーティングを可能にする
    • HTTP/HTTPSを公開する場合はIngressを利用する
  • Job

    • 1つ以上のPodを作成し、指定された数のPodが正常完了するまでを管理するリソース
    • 終了してもPodは残るのでログや実行結果の確認が可能
    • バッチ系のアプリケーション向き
  • Helm

    • Chartを管理するツール
  • Chart

    • マニフェストテンプレートのパッケージ
    • 複数環境にデプロイするアプリケーションであればChartでパッケージングしHelmでデプロイやアップデートを行う