Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Software Design 11月号第1特集「理想のコンテナイメージを作る」を振り返る 第4章

Software Design 11月号第1特集「理想のコンテナイメージを作る」を振り返る 第4章

Software Design 11月号の第1特集「理想のコンテナイメージを作る Dockerfileのベストプラクティス」の全5章のうち3章を弊社のエンジニアが担当しました。今回は各担当者による担当部分の解説セッションと、それをベースに参加者のみなさんからのご質問やご意見をいただきながらディスカッションを行いたいと思います。
「理想のコンテナイメージとはどのようなものなのか」はそれぞれの立場や関心事によって変わって来るかと思います。今回の勉強会では理想像を見つけるのではなく、多面的に理想的なコンテナイメージとはどのようなものかを考えられる視点を学んでいただけます。

とことんDevOps

November 08, 2023
Tweet

More Decks by とことんDevOps

Other Decks in Technology

Transcript

  1. 日本仮想化技術株式会社
    VirtualTech.jp
    2023/11/8 R.2
    イメージ作成に役⽴つ
    ツールのご紹介

    View full-size slide

  2. 日本仮想化技術株式会社 概要
    • 社名:日本仮想化技術株式会社
    • 英語名:VirtualTech Japan Inc.
    • 設立:2006年12月
    • 資本金:3,000万円
    • 本社:東京都渋谷区渋谷1-8-1
    • 取締役:宮原 徹(代表取締役社長兼CEO)、伊藤 宏通(取締役CTO)
    • スタッフ:11名(うち、9名が仮想化技術専門エンジニアです)
    • URL:http://VirtualTech.jp/
    • 仮想化技術に関する研究および開発
    • 仮想化技術に関する各種調査
    • 仮想化技術に関連したソフトウェアの開発
    • 仮想化技術を導入したシステムの構築
    • OpenStackやKubernetes、DevOpsシステムの導入支援・新規機能開発
    2
    ベンダーニュートラルな
    独立系仮想化技術の
    エキスパート集団
    会社概要

    View full-size slide

  3. DevOpsサポートサービス
    DevOpsを始めたいチームのための支援サービス
    開発プロジェクト
    • 開発環境
    • GitHubリポジトリ
    • CI/CD
    • IaC (デプロイ環境)
    運用チーム
    • 運用監視
    • 脆弱性スキャン
    • インシデント管理
    • IaC (共通インフラ)
    運用をまるっとお任せしたい
    おまかせDevOps
    (かんたんDevOpsに加えて)
    DevOps環境の運用・改善
    インフラコードの保守
    発生したインシデントへの対応
    DevOps人材を育成したい
    かんたんDevOps
    DevOpsの環境初期構築
    インフラのコード化
    DevOpsプロセスの実践手順書・支援
    技術サポート
    会社概要
    ৄࡉɾ͓໰͍߹Θͤઌ
    https://virtualtech.jp/devops/

    View full-size slide

  4. 自己紹介
    • 名前 遠山 洋平
    • 出生地 宮城県
    • 出身地 神奈川県川崎市 → 埼玉県
    • 仕事 OpenStack, Kubernetes, コンテナー, PG-Strom etc...
    • 普段はGPUと速いストレージでSQLを爆速にする技術調査、導入支援
    • 主にクラウド関連技術のオンプレ関連を担当
    • 弊社ブログやたまに雑誌記事執筆
    4

    View full-size slide

  5. 私が書いた4章の概要
    • 「イメージチェックツールについて書いてください」というオー
    ダーでした
    • イメージ作成ツールについては他の章で取り上げているので、次
    のようなものを取り上げることにしました
    1. イメージの脆弱性スキャン
    2. 最近話題のSBOM
    3. Dockerfileの書き方のバリデートツール
    5

    View full-size slide

  6. これまでのおさらい
    多いので、さらっと
    6

    View full-size slide

  7. コンテナーとイメージ
    • コンテナーはイメージベースでアプリを動かす
    • Docker
    • Kubernetes
    • 安定したアプリを実⾏するには適切なイメージ選定が重要
    • ベースイメージに動かしたいアプリを組み込む→実行
    7

    View full-size slide

  8. コンテナーのベースイメージとは
    • コンテナーでアプリを動かすときに使うイメージ
    • ベースイメージは以下の組合せ
    1. Linuxカーネル部分を除くOS部分
    2. アプリケーション実⾏環境
    • Python
    • Go
    • Rust
    • Node.js etc
    8

    View full-size slide

  9. ベースイメージ選定で注意すること
    1. イメージの出どころ
    • 誰が作成しているか
    2. イメージの新鮮さ
    • 定期的にどのようにアップデートされているか
    • ⼿動ビルド or ⾃動ビルド
    3. イメージの内容
    • 複雑ではないか
    • イメージサイズは適切か
    • ライセンスは問題ないか
    9

    View full-size slide

  10. アプリイメージの維持管理
    • 作ったアプリイメージは定期的な更新が必要
    • ベースイメージは定期的にバグと脆弱性のアップデートがある
    • アプリケーション側のアップデートでもイメージ更新が必要
    • 定期的にメンテナンスする仕組みを検討しよう
    • イメージビルドの⾃動化
    • 脆弱性チェックツール
    10
    Applications
    Bin/Libs
    OS
    ベース部分

    View full-size slide

  11. マルチステージビルドとは
    • シングルバイナリーで動くアプリケーションはマルチステージビ
    ルドを採用すると良い
    • ビルド環境でバイナリービルド
    • ビルド成果物をコピー
    • 小さいイメージでアプリを実行
    • 最小限の実行環境
    • アプリのみ
    11
    busybox, alpine

    View full-size slide

  12. そのほか覚えておくべきこと
    • 複数CPUアーキテクチャーを考慮したイメージ作成
    • Multi-platform images
    • CPUアーキテクチャーフリーなイメージ作成
    • WASM
    12
    ͪΐͬͱ୤ઢ...

    View full-size slide

  13. SBOM(Software Bill of Materials)
    • 直訳するとソフトウェアの部品表
    • アプリケーションを実行する環境を構成するライブラリ一覧を決
    められた形式で出力したテキストファイル
    • 提出を求められた場合は指定された形式で作成
    13
    ϥΠϒϥϦͱόʔδϣϯɺ
    ࡞ऀɺϥΠηϯε

    View full-size slide

  14. イメージ作成時に便利な
    Dockerの機能と拡張機能
    14

    View full-size slide

  15. Docker Scout
    • Docker Desktopの新しい機能
    • イメージの脆弱性スキャン
    • 追加インストールの必要なく使える
    • ローカルイメージのスキャンは無料
    • Docker DesktopではGUIとCLIが提供
    15
    Docker֦ுػೳ

    View full-size slide

  16. Docker Scout GUI
    16
    Docker֦ுػೳ

    View full-size slide

  17. Aqua Trivy 拡張
    • OSSのスキャンツール「Trivy」のDocker拡張機能
    • Docker Desktopの拡張機能として追加
    • イメージのスキャン
    • SBOM作成
    17
    Docker֦ுػೳ

    View full-size slide

  18. Aqua Trivy 外観
    • 拡張ではGUIのみ
    • CLIは必要なら別途
    18
    Docker֦ுػೳ

    View full-size slide

  19. Dive In 拡張
    • イメージのレイヤーを視覚化
    • イメージ共有する前にこのツールでチェックを推奨
    • 但しContainerdイメージストアリング非対応
    • 例えば
    • クラウドのクレデンシャル情報が含まれていないか
    • イメージに不要なログやアーカイブ、キャッシュが含まれていないか
    19
    Docker֦ுػೳ

    View full-size slide

  20. Dive In 外観
    20
    Docker֦ுػೳ

    View full-size slide

  21. Dockerfile作成に便利な
    VSCodeの拡張機能
    21

    View full-size slide

  22. Docker 拡張
    • VSCodeから離れずにDockerの操作が可能
    • 書いたDockerfileを使ったイメージ作成
    • 書いたcompose.yamlを使ったコンテナ環境作成
    • Dockerコンテナーの作成、停止、再起動
    • Dockerfileやcompose.yaml編集時入力補完やヘルプ表示等
    22
    VSCode֦ுػೳ

    View full-size slide

  23. Docker 拡張機能の機能紹介
    • Dockerfileからイメージビルド
    23
    VSCode֦ுػೳ

    View full-size slide

  24. Docker 拡張機能の機能紹介
    • アプリをブラウザーで開く
    • シェルで開く
    • ログを表示
    • コンテナの操作など
    24
    VSCode֦ுػೳ

    View full-size slide

  25. Hadolint 拡張
    • 「ヘドリント」と読むらしい(Youtubeの動画などから)
    • Dockerfileの構文チェックをリアルタイムに実行
    • 修正提案もしてくれる
    • きれいなDockerfileの出来上がり
    25
    VSCode֦ுػೳ

    View full-size slide

  26. Hadolint 拡張機能の機能紹介
    • 適切ではない部分にマークを付けてくれる
    • リアルタイムで警告
    26
    VSCode֦ுػೳ

    View full-size slide

  27. Hadolint 拡張機能の機能紹介
    • 波線にカーソルを合わせると、問題の内容をポップアップ
    • リンククリックで詳細情報を確認
    27
    VSCode֦ுػೳ

    View full-size slide

  28. チェック用CLIツールの
    紹介
    28

    View full-size slide

  29. Docker Scout CLI
    • Docker Desktop標準のイメージチェックツール
    • ローカルイメージは無料でチェックできる
    • GUIとCLIがある
    • イメージスキャン
    • SBOM作成も可能
    29
    CLIπʔϧ঺հ

    View full-size slide

  30. イメージスキャン
    • docker scout quickviewで確認
    • docker scout cvesで詳細情報
    30
    CLIπʔϧ঺հ

    View full-size slide

  31. SBOM作成
    • 次のようなコマンドでSBOM作成が可能
    31
    CLIπʔϧ঺հ

    View full-size slide

  32. Trivy CLI
    • OSSのスキャンツール
    • コンテナーイメージチェックの他に、次のスキャンも可能
    • Dockerfile
    • Kubernetes マニフェスト(YAML)
    • Terraform
    • SBOM生成も可能
    • 今後も色々機能追加されていく予定だとか
    32
    CLIπʔϧ঺հ

    View full-size slide

  33. Trivy CLI 使用例
    • イメージスキャン
    • IaCファイルのスキャン
    • Dockerfile
    • K8s YAML
    • Terraform
    • SBOM作成
    33
    CLIπʔϧ঺հ
    $ trivy image alpine:3.15
    $ trivy config Dockerfile
    $ trivy config deployment.yaml
    $ trivy image --format spdx-json --output result.json alpine:3.15
    $ ls
    result.json

    View full-size slide

  34. Hadolint CLI
    • Dockerfileが構文に沿っているかチェックするツール
    • VSCodeのHadolint拡張を使う場合に必須
    • 私はCLIよりVSCodeを介して使うほうが好き
    34
    CLIπʔϧ঺հ

    View full-size slide

  35. Hadolint CLI 使用例
    • 次のようなコマンドでDockerfileのチェックが可能
    35
    CLIπʔϧ঺հ

    View full-size slide

  36. Dive CLI
    • VSCodeの拡張機能のところでも説明したとおり
    • CLIで使うとTUIでイメージ探索できる
    • 但し、Containerdイメージストアリング非対応
    36
    CLIπʔϧ঺հ

    View full-size slide

  37. まとめ
    コンテナーを実運用する場合は、次を実践しましょう
    1.ベースイメージはチェックしてから使おう
    2.マニフェストはLintツールを使ってきれいに書こう
    3.自作のコンテナーイメージは定期的な保守を心がけよう
    • イメージの定期メンテナンスは手間がかかる
    • DevOpsの考え方を適用して自動化
    37

    View full-size slide

  38. DevOpsサポートサービス
    DevOpsを始めたいチームのための支援サービス
    開発プロジェクト
    • 開発環境
    • GitHubリポジトリ
    • CI/CD
    • IaC (デプロイ環境)
    運用チーム
    • 運用監視
    • 脆弱性スキャン
    • インシデント管理
    • IaC (共通インフラ)
    運用をまるっとお任せしたい
    おまかせDevOps
    (かんたんDevOpsに加えて)
    DevOps環境の運用・改善
    インフラコードの保守
    発生したインシデントへの対応
    DevOps人材を育成したい
    かんたんDevOps
    DevOpsの環境初期構築
    インフラのコード化
    DevOpsプロセスの実践手順書・支援
    技術サポート
    会社概要
    ৄࡉɾ͓໰͍߹Θͤઌ
    https://virtualtech.jp/devops/

    View full-size slide