フューチャー技術ブログ

アプリエンジニアがコンテナ開発の基本を読んで学ぶ

はじめに

こんにちは。HealthCare Innovation Group(HIG)1所属の清水です。

秋のブログ週間2023、3週目・12本目の記事です。

Kubernetesクラスタ上で構築された学習基盤2を業務で利用することをきっかけに、「Dockerコンテナ開発・環境構築の基本」という書籍を読んでみました。

https://book.impress.co.jp/books/1120101031

これまでDocker・Kubernetesをあまり触ったことがないエンジニアが、書籍を読んだ感想を書いていきます。

Wikipediaによると、「クバネティス/クバネテス/クーべネティス」と読まれているようです。
「クーベネティス」だと予測変換にKubernetesが出てくる(手元のiOS、macOS)ため、「クーベネティス」と打っています。

感想

本書は、Dockerをベースにコンテナ技術の理解・実践からKubernetesクラスタ上でアプリケーションを稼働させる仕組みを解説した書籍です。
サンプルのソースコード付きで、書籍の中でも概要の説明→コマンドで実現する方法という流れで分かりやすかったです。
各コマンドで何をしているのか、コマンドの書式付きで解説があったので初心者にも理解しやすい内容になっていました。

読む前は、Docker・Kubernetesのコマンドを調べて業務を進めることはできるものの、理解が浅いためコンテナを利用して開発を進める際に抵抗感がありました。
書籍を通して、普段使っているコマンドの中でどんなことを実現しているか・マニフェストを用意する上で考慮すべきことを理解したことで、気持ちの問題ですが臆せず開発できるようになりました。

また、実行環境の統一のため、使用した実行環境がローカルPCではなくGoogle Cloud Platform(以降GCP)であったのが普段ほぼローカルで開発している私にとっては印象的でした。
Docker・Kubernetesの勉強になったのはもちろん、サンプル中にTrivy3やGitHub Actionsを使うシーンもあり、名前は知っているけどまだ使ったことない技術に触れたのもいい機会でした。

概要と気になった内容

コンテナアプリケーション開発について(第1章)

既存のアプリケーション開発及び仮想化の仕組みについて説明した上で、コンテナアプリケーション開発におけるサイクルを説明されています。

本章では、主に以下の点を解説されています。

  • 仮想マシンとコンテナイメージの違い
  • コンテナイメージの構造

「アプリを動かす土台を共有して、その土台の上でアプリを動かすことで環境差異を減らす」というイメージは元々ありましたが、
上記2点を押さえることで、仕組みやメリットの理解が深まりました。

また、コンテナ技術を利用することによるメリットだけではなく、コンテナアプリケーション開発スタイルが「銀の弾丸ではない」ことを、章の最後に触れていたことが印象的です。

コンテナアプリケーション開発のライフサイクル(第2章・第3章)

GCPを用いてにDocker環境をセットアップして、実際に動かしながらコンテナアプリケーション開発におけるライフサイクル「Build・Ship・Run」を説明されています。

「Build・Ship・Run」はそれぞれ、

  1. Build: 実行ファイル及びそれを動かすために必要なOS・ライブラリをパッケージ化
  2. Ship: Buildしたコンテナイメージの配布及び共有
  3. Run: Shipしたコンテナイメージの起動と操作

を指します。

本章を読むことで、以下の気になっていたことがすっきり分かりました!

  • Dockerfileで、ローカルのファイルなどをコンテナイメージに含めるADDCOPYの使い分け
  • Dockerfileで、&&で結合したRUN命令が多い理由
  • コンテナとコンテナホスト(Dockerを動かしているマシン)間でのデータのやり取り

Kubernetesの仕組みと利用の流れ(第4章・第5章)

Kubernetesの概要からkubectlコマンドを利用してコンテナアプリケーションを動かす流れを説明されています。

本章では、以下の点が記載されています。

  • なぜコンテナオーケストラレータが必要か
  • Kubernetesにおける自動修復(セルフヒーリング)の仕組み
  • Kubernetesのリソースとマニフェスト(コンテナアプリケーションを実行するための手順を記載したyamlファイル)の結びつき

第4章では主に説明を、第5章では実際に手を動かす部分を主に記載しています。
第5章で実際に手を動かしつつ、第4章に戻って確認することで仕組みがどう実現されているか理解が深まりました。

ローカル開発とCI/CD(第6章・第7章)

ローカル開発を効率的にするツールの紹介及びコンテナアプリケーション開発におけるCI/CDについて説明されています。

本章では、以下の点を学ぶことができます。

  • DokcerfileやKubernetesのマニフェストを加味したCI/CD
  • CIOpsとは? GitOpsとは?
  • GitHub Actionsを利用したコンテナアプリケーション開発のCI/CD

普段、業務ではGitLabを利用しているため、GitHub Actionsワークフローの作成と実行が丁寧に記載あって助かりました。

さいごに

Docker・Kubernetesに関する基礎を固めるためには、とても良い書籍だと思いました。
サンプル付きで、dockerコマンドやkubectlコマンドとコンテナ技術の仕組みを結びつけながら理解できました。
DockerやKubernetesを少し触ったことがあり、もう一歩理解したい方におすすめです。

次は澁川さんのPython Distillesは幅広い人にPythonの基礎を叩き込む本です。


  1. 1.医療・ヘルスケア分野での案件や新規ビジネス創出を担う、2020年に誕生した事業部です。 設立エピソードは、以下記事をご覧ください。 "新規事業の立ち上げ フューチャーの知られざる医療・ヘルスケアへの挑戦"
  2. 2.学習基盤に関する記事は、以下記事をご覧ください。 MLOpsことはじめ ~実験管理導入と学習基盤の構築~
  3. 3.Trivy. Dockerイメージの脆弱性を検知するOSS https://github.com/aquasecurity/trivy