12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Docker/Kubernetes実践コンテナ開発入門 改訂新版」まとめ

Last updated at Posted at 2024-04-29

はじめに

miiveとは

  • miiveとはプリペイド式のクレジットカードで、「食事」または「学び」に使用できるポイントが毎月3,500円分支給されます。
  • 私は主に書籍の購入で活用していますが、毎月書籍購入で3,500円分の補助があるのは本当にありがたいです!
  • 弊社でのmiive導入についてはこちらで詳しく紹介しているので、興味のある方は是非ご覧ください。

初版との比較

  • 初版と比べると、より分厚くなってることがわかります。
  • 5年半ぶりの改訂新版ということで、この5年半でのDocker/Kubernetes界隈の技術の進歩が窺えます。

1. コンテナとDockerの基礎

  • タイトル通り基本中の基本です。
  • そもそも「コンテナとは」「Dockerとは」から学ぶにはとても良い内容ですね。
  • 「開発環境に限らず本番環境でもコンテナ技術を活用すべき」という話の中では、筆者の方がCyberAgentグループ所属ということもあり、ABEMAが配信した2022年FIFAワールドカップの事例が紹介されています。
  • 私自身2022年FIFAワールドカップは深夜に起きて観ていたので、サービスを使う一人のユーザとしてコンテナ技術の有用性を感じることができました。

2. コンテナのデプロイ

  • コンテナでアプリケーションをデプロイするところまでの流れについて書かれています。
  • docker searchdocker container runなど具体的なコマンドを使って解説してくれているので、わかりやすいですね。

3. 実用的なコンテナの構築とデプロイ

  • 2章までは基礎的な内容でしたが、ここからは実際にコンテナを構築したりデプロイしたりする際に起こる事象について解説されています。
  • コンテナの粒度についても解説されており、「1コンテナ = 1プロセス」にするべきかは確かに私が所属するチーム内でも議論になったことがあります。
  • この問題について、Dockerの公式ドキュメントでは「コンテナは1つの関心ごとにだけ集中すべきだ」という見解がなされています。
  • ここで言う「1つの関心ごと」とは、「1つの役割(ロール)」や「1つの問題領域(ドメイン)」と言い換えることもできます。
  • これらを踏まえて筆者は以下の考え方を示しており、「なるほどな」と思いました。
    • アプリケーションとコンテナの粒度について考える場合、「それぞれのコンテナが担うべき役割を適切に見定め、かつそれがレプリカとして複製された場合でも副作用なくスタックとして正しく動作できる状態になるか?」という考えにもとづいて設計すると良いわけです。

4. 複数コンテナ構成でのアプリケーション構築

  • タスク管理アプリのアーキテクチャを例にして、以下6つのコンテナによるWebアプリケーションの構成について解説されています。
    • web
      • nginx-web(Reverse Proxy for Web)
      • web(Web server)
    • api
      • nginx-api(Reverse Proxy for API)
      • api(API server)
    • db
      • migrator(DB migration tool)
      • mysql(MySQL server)
  • なお、初版の4章ではSwarmが扱われていましたが、現在は開発終了しているため改訂新版ではComposeTiltが扱われています。
  • 次章からは代表的なコンテナオーケストレーションツールであるKuberbetesが登場するため、初学者の方にも理解しやすいように、まずは本章で初歩として適している最もシンプルなコンテナオーケストレーションシステムのComposeが選ばれています。

5. Kubernetes入門

  • ここからKubernetesが登場します。
  • 入門ということで、「Kubernetesとは何か」から図解入りで丁寧に解説してくれています。
  • また、コラムではk9sというツールについても解説されています。
    • k8sKubernetesの略ですが、k9sKubernetes上のリソースを監視・管理するためのCLIツールです。
    • デファクトスタンダードになっているCLIツールkubctlよりも操作手順が減って、使いやすいらしいです。

6. Kubernetesのデプロイ・クラスタ構築

  • 4章のCompose上で実行したタスクアプリを、Kubernetesでどのように実行して行くのか解説されています。
  • 初版ではGKE(Google Kubernetes Engine)を使って構築していましたが、改訂新版ではローカルKubernetes環境(Docker Desktop)に構築しています。
    • これはよりシンプルにわかりやすく解説するためでしょうか
  • 最後に、ローカルKubernetes環境では難しいIngressのインターネット上への公開を、AKS(Azure Kubernetes Service)を使って行っています。

7. Kubernetesの発展的な利用

  • Kubernetesの一般的なデプロイ以外の用途について、以下の3つが紹介されています。
    • Podのデプロイ戦略
      • RollingUpdate
      • Blue-Green Deployment
    • 定期的なバッチジョブの実行
      • CronJob
    • ユーザ管理とRBAC(Role-Based Access Control)

8. Kubernetesアプリケーションのパッケージング

  • Kubernetesリソースの構成管理やパッケージングを補助するためのツールであるKustomizeHelmについて、解説されています。
  • 初版ではHelmのみ扱われていましたが、改訂新版ではKustomizeも加わっています。
  • この2つの使い分け方について、以下のように記載されています。
    • Kustomizeは、開発環境や本番環境など複数の環境にデプロイする際、必要最小限のマニフェストファイルの管理をするために利用しています。

    • Helmは、Kustomizより細かいマニフェストファイルの制御が必要な場合に利用します。また、Kubernetesアプリケーションを他のプロジェクトで再利用したり、OSSで公開する用途でも有用です。

9. コンテナの運用

  • コンテナ運用で欠かせないロギングやログ収集・管理機構の構築について、Elastic Stackを通して解説されています。
  • Elastic Stackとは、Elastic社が提供するElasticsearchKibanaBeatsLogstash等で構成されるプロダクト群のことで、様々なソースからデータを取得して検索・分析・可視化することができます。

10. 最適なコンテナイメージ作成と運用

  • 本書で最も重要な章かと思います。
  • 初版では「より軽量なDockerイメージを作る」という章がありましたが、改訂新版では「最適なコンテナイメージ」という内容に書き直されています。
  • 以下のような流れで解説されています。
    • まず、scratchBusyBoxAlpine LinuxDistrolessといった軽量なベースイメージから、軽量なコンテナイメージを作る方法について
    • 次に、Docker 17.05から導入されたMulti-stage buildsについて
    • また、従来のイメージビルダー(docker image buildコマンド)を拡張したBuildKitについて
    • 最後に、GitHub Actionsを用いたワークフローコンテナのビルドとPushについて

11. コンテナにおける継続的デリバリー

  • この章は初版には無く、改訂新版で新たに追加された章になります。
  • 継続的デリバリー(Continuos Delivery)について、GitOpsを中心に解説されています。
  • GitOpsとは、コンテナアプリケーションのデプロイ方法の王道です。
    • Gitリポジトリを信頼できる唯一の情報源として扱い、マニフェストファイル群を管理します。
  • また、以下3つの継続的デリバリーシステムが紹介されています。

12. コンテナのさまざまな活用方法

  • 本章では、以下のようなアプリケーションのデプロイ以外のコンテナの活用方法について解説されています
    • チーム開発での開発環境の統一
    • コマンドラインツールでのコンテナの利用
      • コンテナイメージ脆弱性診断ツールTrivyをコンテナで実行する
    • 負荷テストでの利用
      • 負荷テストツールのLocustk6について

最後に

  • 私自身バックエンド領域の業務がメインのため、既に用意されたDockerfiledocker-compose.ymlから自分のローカル開発環境を作ることは多いのですが、一からdocker環境を構築した経験は少ないので、大変勉強になりました。
  • 初版も数年前にしっかり読んだはずなのですが、普段から使っていない技術はやはり忘れてしまってますね。
  • バックエンド領域の業務がメインでも、DockerやKubernetesといったコンテナ技術やインフラ領域についての知見があるに越したことは無いので、これからも学んで行きたいですね。
12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?