$30 off During Our Annual Pro Sale. View Details »

Podmanで実現する手軽なCI/CD環境

Ueda Naoaki
November 16, 2023

 Podmanで実現する手軽なCI/CD環境

Ueda Naoaki

November 16, 2023
Tweet

More Decks by Ueda Naoaki

Other Decks in Technology

Transcript

  1. Podman で実現する手軽な
    CI/CD 環境
    Ueda Naoaki

    View Slide

  2. 自己紹介
    - SocialDog, Inc
    - Podman歴2年
    上田直諒
    Ueda Naoaki / na0x2c6
    https://twitter.com/na0x2c6
    https://socialdog.jp/

    View Slide

  3. 自己紹介
    - SocialDog, Inc
    - Podman歴2年
    - OpenShift運用歴
    - Kubernetes運用歴
    上田直諒
    Ueda Naoaki / na0x2c6
    https://twitter.com/na0x2c6
    https://socialdog.jp/

    View Slide

  4. 自己紹介
    - SocialDog, Inc
    - Podman歴2年
    - OpenShift運用歴0年
    - Kubernetes運用歴0年
    上田直諒
    Ueda Naoaki / na0x2c6
    https://twitter.com/na0x2c6
    https://socialdog.jp/

    View Slide

  5. 自己紹介
    - SocialDog, Inc
    - Podman歴2年
    - OpenShift運用歴0年
    - Kubernetes運用歴0年
    - Podman愛だけで来ました
    上田直諒
    Ueda Naoaki / na0x2c6
    https://twitter.com/na0x2c6
    https://socialdog.jp/

    View Slide

  6. PodmanでCI/CDを運用したゆえに助かった話をします

    View Slide

  7. ※Podman初めての方向けの内容を含みます

    View Slide

  8. どういう話か
    - JenkinsコンテナをPodmanで運用していた
    - もともと静的ファイルのデプロイに使っていた
    - 途中で依存系のインストールやビルドをしたくなった

    View Slide

  9. 出発点:静的ファイルをデプロイするためだけの

    View Slide

  10. - TypeScriptをビルドしたい
    出発点:静的ファイルをデプロイするためだけの

    View Slide

  11. - TypeScriptをビルドしたい
    出発点:静的ファイルをデプロイするためだけの

    View Slide

  12. 出発点:静的ファイルをデプロイするためだけの
    - TypeScriptをビルドしたい
    - 必要な環境が増える度にイメージに含める?

    View Slide

  13. 出発点:静的ファイルをデプロイするためだけの
    - TypeScriptをビルドしたい
    - 必要な環境が増える度にイメージに含める?
    - 💡コンテナでビルドしよう

    View Slide

  14. Podman in Container
    参考:How to use Podman inside of a container | Enable Sysadmin

    View Slide

  15. Podman in Container
    参考:How to use Podman inside of a container | Enable Sysadmin

    View Slide

  16. Podman in Container
    参考:How to use Podman inside of a container | Enable Sysadmin

    View Slide

  17. Podman in Container
    参考:How to use Podman inside of a container | Enable Sysadmin
    Podman実行環境を用意

    View Slide

  18. やりたかったこと
    参考:How to use Podman inside of a container | Enable Sysadmin

    View Slide

  19. やりたかったこと
    参考:How to use Podman inside of a container | Enable Sysadmin
    npm ci
    npm run build

    View Slide

  20. やりたかったこと
    参考:How to use Podman inside of a container | Enable Sysadmin
    npm ci
    npm run build
    Jenkinsイメージにビルド環境を用意する必要がある

    View Slide

  21. やりたかったこと
    参考:How to use Podman inside of a container | Enable Sysadmin
    npm ci
    npm run build
    Jenkinsイメージにビルド環境を用意する必要がある
    Podman実行環境があれば…

    View Slide

  22. やりたかったこと
    参考:How to use Podman inside of a container | Enable Sysadmin
    npm ci
    npm run build
    Jenkinsイメージにビルド環境を用意する必要がある
    podman run --rm -v "$PWD:$PWD" -w "$PWD" -- docker.io/node:lts npm ci
    podman run --rm -v "$PWD:$PWD" -w "$PWD" -- docker.io/node:lts npm build
    Podman実行環境があれば…
    コンテナでビルドすればよい

    View Slide

  23. Makefileの工夫
    よく見る書き方

    View Slide

  24. Makefileの工夫
    custom.mk で上書き可能に

    View Slide

  25. Makefileの工夫
    custom.mk

    View Slide

  26. Makefileの工夫
    Jenkinsで使う
    custom.mk.deployでコミット

    View Slide

  27. Makefileの工夫
    Podmanでビルド🎉

    View Slide

  28. だがしかし

    View Slide

  29. だがしかし:責務を詰め込みすぎ?

    View Slide

  30. だがしかし:責務を詰め込みすぎ?
    Jenkinsのためのコンテナ?
    Podmanのためのコンテナ?
    Container

    View Slide

  31. だがしかし:責務を詰め込みすぎ?
    Jenkinsのためのコンテナ?
    Podmanのためのコンテナ?
    Container

    View Slide

  32. Container Container
    JenkinsコンテナからPodmanエンジンコンテナを利用する
    別コンテナにする

    View Slide

  33. 別コンテナにしたい:準備

    View Slide

  34. 別コンテナにしたい:準備
    コンテナエンジンホストを指定
    ※同一pod内で実行するためローカルホスト
    tcp://127.0.0.1:2375

    View Slide

  35. dockerクライアントも利用可能
    tcp://127.0.0.1:2375

    View Slide

  36. Podmanはコンテナエンジンサービスとして待機可能
    tcp://127.0.0.1:2375 で待機しているよ〜

    View Slide

  37. Podmanはコンテナエンジンサービスとして待機可能
    tcp://127.0.0.1:2375 で待機しているよ〜
    OCI準拠のコンテナエンジンサービス
    OCI: Open Container Initiative
    コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ
    とを目的としたオープンなガバナンス機構
    Open Container Initiative - Open Container Initiative

    View Slide

  38. OCI準拠のコンテナエンジンサービス
    OCI: Open Container Initiative
    コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ
    とを目的としたオープンなガバナンス機構
    Open Container Initiative - Open Container Initiative
    別コンテナにしたい
    tcp://127.0.0.1:2375 で待機しているよ〜
    Container
    Container

    View Slide

  39. OCI準拠のコンテナエンジンサービス
    別コンテナにしたい:Podmanエンジン in Podman
    tcp://127.0.0.1:2375 で待機しているよ〜
    OCI: Open Container Initiative
    コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ
    とを目的としたオープンなガバナンス機構
    Open Container Initiative - Open Container Initiative
    Container
    Container

    View Slide

  40. OCI準拠のコンテナエンジンサービス
    別コンテナにしたい:Podmanエンジン in Podman
    tcp://127.0.0.1:2375 で待機しているよ〜
    OCI: Open Container Initiative
    コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ
    とを目的としたオープンなガバナンス機構
    Open Container Initiative - Open Container Initiative
    Container
    Container

    View Slide

  41. Kubernetes YAML定義のサンプル

    View Slide

  42. Kubernetes YAML定義のサンプル
    /var/jenkins_home
    Podmanコンテナのビルド生成物を
    Jenkinsで利用可能に

    View Slide

  43. PodmanはKubernetes YAMLを実行できる
    Pod

    View Slide

  44. Quadlet: systemd を kubelet の代わりに
    引用:podman-systemd.unit — Podman documentation

    View Slide

  45. Quadlet: systemd を kubelet の代わりに
    引用:podman-systemd.unit — Podman documentation
    Podmanをインストールすると
    systemd-generator に登録される

    View Slide

  46. Quadlet: systemd を kubelet の代わりに
    引用:podman-systemd.unit — Podman documentation
    例:test.kube というファイルで
    ~/.config/containers/systemd/ に配置

    View Slide

  47. Quadlet: systemd を kubelet の代わりに
    引用:podman-systemd.unit — Podman documentation
    Quadletがsystemd unitに変換してくれる
    例:test.kube というファイルで
    ~/.config/containers/systemd/ に配置

    View Slide

  48. Quadlet: systemd を kubelet の代わりに
    引用:podman-systemd.unit — Podman documentation
    Quadletがsystemd unitに変換してくれる
    例:test.kube というファイルで
    ~/.config/containers/systemd/ に配置
    Podmanなら
    k8s YAMLで手軽な環境構築も可能

    View Slide

  49. Quadlet: systemd を kubelet の代わりに
    引用:podman-systemd.unit — Podman documentation
    Quadletがsystemd unitに変換してくれる
    例:test.kube というファイルで
    ~/.config/containers/systemd/ に配置
    Podmanなら
    k8s YAMLで手軽な環境構築も可能
    ※もちろんコンテナ単体のサービス化も可能
    ホストネットワークを tailscaleネットワークに参加させる例。
    コンテナイメージの自動更新も可能。

    View Slide

  50. スライドの環境を再現するcompose.yaml
    Pod
    Container
    https://github.com/na0x2c6/connpass-231116-container-in-container

    View Slide

  51. tcp://127.0.0.1:2375
    そういえば:podman は docker compose も実行できる

    View Slide

  52. PodmanにはDesktopアプリがある
    Podman Desktop - Containers and Kubernetes

    View Slide

  53. Pod
    Container
    https://github.com/na0x2c6/connpass-231116-container-in-container
    スライドの環境を再現するcompose.yaml

    View Slide

  54. Pod
    Container
    https://github.com/na0x2c6/connpass-231116-container-in-container
    Let’s try Podman!!!
    スライドの環境を再現するcompose.yaml

    View Slide