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

Podman_update_2023-11

orimanabu
November 16, 2023

 Podman_update_2023-11

orimanabu

November 16, 2023
Tweet

More Decks by orimanabu

Other Decks in Technology

Transcript

  1. 1
    Podman最新情報
    Fall 2023
    Manabu Ori
    Red Hat
    2023-11-16
    v0.9

    View Slide

  2. 2
    自己紹介
    ● 名前: 織 学 (@orimanabu)
    ● 所属: Red Hat
    ● 仕事: OpenStack、OpenShift/Kubernetes、Ansible等のコンサルティング

    View Slide

  3. 3
    Agenda
    ● Podmanの本が出ました
    ● 最近のリリース状況
    ● 最近の機能
    ● 今後のロードマップ

    View Slide

  4. 4
    Podmanの本が
    出ました

    View Slide

  5. 5
    「Podmanイン・アクション」でました
    ● Podmanの生みの親であるDaniel Walshによる原著
    ○ https://www.manning.com/books/podman-in-action
    ● Red Hatの有志で翻訳
    ● デーモンレス、Fork & Execモデルの実行、ルートレス等の設
    計思想や仕組みについて詳しく解説
    ● https://www.amazon.co.jp/dp/4798070203/

    View Slide

  6. 6
    「Podmanイン・アクション」でました
    表紙の裏も見てね♡

    View Slide

  7. 7
    「10, 11章 セキュリティ」のご紹介
    ● Dan Walshはセキュリティの専門家
    ○ SELinuxnのメイン開発者
    ○ (当時の)Dockerのセキュリティ観点の課題をなんとかしたかった
    ● /sys, /procを可能な限りコンテナから見えない or 触れないようにする
    ○ ファイルには/dev/nullをバインドマウント
    ○ ディレクトリにはread onlyのtmpfsをマウント
    ■ /proc/acpi, /proc/kcore, /sys/firmware, /sys/dev/block等
    ○ 特定のサブディレクトリに対して、自身をread onlyでバインドマウント
    ■ /proc/bus, /proc/fs, /proc/irq等
    ○ コンテナに見せないファイルを追加したり(--security-opt mask=パス)、デフォルトではを見えな
    いファイルを見えるように設定することも可能 (--security-opt unmask=パス)
    ● Capability
    ○ Docker (14個のcapをdrop) よりも多くのCapabilityをデフォルトでdrop
    ■ Podmanが追加でdropするcap: CAP_MKNOD, CAP_AUDIT_WRITE, CAP_NET_RAW
    ○ --cap-add, --cap-dropでカスタマイズ可能

    View Slide

  8. 8
    「10, 11章 セキュリティ」のご紹介
    ● --security-opt no-new-privilegesで、コンテナプロセスが新たに特権を得ることを
    防げる
    ● 全てのCapabilityをdropしたとしても、rootユーザーは危険 → ユーザー名前空間、
    rootless
    ● SELinux重要
    ○ カーネルの名前空間による分離に穴があったとしても、SELinuxによってコン
    テナ間やコンテナ→ホストのアクセスを防ぐことができる可能性が高い
    ● Seccompを使ってシステムコール単位で制限をかける
    ● Fork & Execモデルにより、非rootプロセスによるdocker.sockへのアクセスの課題
    に対応
    ○ ユーザー情報 (/proc/self/loginuid) がauditログに適切に記録される
    ● podman secretによる機密情報の管理
    ● podman image trustによるコンテナイメージの署名検証
    https://developers.redhat.com/e-books/selinux-coloring-book

    View Slide

  9. 9
    最近のリリース状

    View Slide

  10. 10
    最近のリリース状況
    ● v4.1.0 2022-05-06 https://github.com/containers/podman/releases/tag/v4.1.0
    ● v4.1.1 2022-06-15 https://github.com/containers/podman/releases/tag/v4.1.1
    ● v4.2.0 2022-08-11 https://github.com/containers/podman/releases/tag/v4.2.0
    ● v4.2.1 2022-09-07 https://github.com/containers/podman/releases/tag/v4.2.1
    ● v4.3.0 2022-10-19 https://github.com/containers/podman/releases/tag/v4.3.0
    ● v4.3.1 2022-11-10 https://github.com/containers/podman/releases/tag/v4.3.1
    ● v4.4.0 2023-02-02 https://github.com/containers/podman/releases/tag/v4.4.0
    ● v4.4.1 2023-02-09 https://github.com/containers/podman/releases/tag/v4.4.1
    ● v4.4.2 2023-02-24 https://github.com/containers/podman/releases/tag/v4.4.2
    ● v4.4.3 2023-03-24 https://github.com/containers/podman/releases/tag/v4.4.3
    ● v4.4.4 2023-03-28 https://github.com/containers/podman/releases/tag/v4.4.4
    ● v4.5.0 2023-04-15 https://github.com/containers/podman/releases/tag/v4.5.0
    ● v4.5.1 2023-05-27 https://github.com/containers/podman/releases/tag/v4.5.1
    ● v4.6.0 2023-07-21 https://github.com/containers/podman/releases/tag/v4.6.0
    ● v4.6.1 2023-08-11 https://github.com/containers/podman/releases/tag/v4.6.1
    ● v4.6.2 2023-08-29 https://github.com/containers/podman/releases/tag/v4.6.2
    ● v4.7.0 2023-09-28 https://github.com/containers/podman/releases/tag/v4.7.0
    ● v4.7.1 2023-10-06 https://github.com/containers/podman/releases/tag/v4.7.1
    ● v4.7.2 2023-10-31 https://github.com/containers/podman/releases/tag/v4.7.2
    しょっちゅうバージョンアップしてます

    View Slide

  11. 11
    RHEL9
    RHEL Podman GA Date Notes
    9.0 4.0.2 2022-05-17 Shortname
    Cgroups v2
    Native overlayfs in the kernel for non-root user
    NFS storage
    Crun default
    Netavark network stack
    9.1 4.2.0 2022-11-15 GitLab Runner support (v1.51〜)
    Netavark
    9.2 4.4.1 2023-05-10 Quadlet (Tech Preview)
    Event auditing
    CNI deprecated
    Sigstore signatures with Fulcio and Rekor
    podman generate kube → podman kube generate
    podman play kube → podman kube play
    Pre execution hooks
    passt/pasta for userland networking
    9.3 4.6.1 2023-11-07 Quadlet support
    Compress with zstd format
    SQLite database as a backend instead of BoltDB
    Podmansh login shell

    View Slide

  12. 12
    RHEL8
    RHEL Podman GA Date Notes
    8.0 1.0.0 2019-05-07 Docker is not included
    Podman full support
    Arm support
    Rootless Tech Preview
    8.1 1.4.2 2019-11-05 Rootless support
    8.2 1.6.4 2020-04-28 FIPS support
    8.3 2.0.5 2020-11-03 Docker compatible volume API endpoint
    Generating systemd unit files API endpoint
    crun (Tech Preview)
    Podman container image (Tech Preview)
    CNI plugins for Rootless (Tech Preview)
    8.4 3.0.1 2021-05-18 Container image signature verification
    CNI plugins for Rootless
    8.5 3.3.1 2021-11-09 Native overlayfs support in the kernel when running rootless
    8.6 4.0.2 2022-05-10
    8.7 4.2.0 2022-11-09 GitLab Runner support
    Sigstore signatures
    8.8 4.4.1 2023-05-16 Events for auditing
    Quadlet Tech Preview
    Pre-execution hooks

    View Slide

  13. 13
    RHEL7
    RHEL Podman GA Date Notes
    7.5 0.4.1 2018-04-10
    7.6 0.10.1.3 2018-10-30 Podman full support
    7.7 1.4.4 2019-08-06 Rootless (Tech Preview)
    7.8 1.6.4 2020-03-31 Rootless full support
    fuse-overlayfs
    7.9 1.6.4 2020-09-29

    View Slide

  14. 14
    最近の機能

    View Slide

  15. 15
    Podman --module
    ● containers.confを必要に応じて追加で読み込むフラグ
    ● podman run等、多数のコマンドラインオプションが必要な場合に、toml形式のconfファイルに書
    いておいて--moduleで指定できるようになる
    To
    • podman --module mymod.conf
    Change
    • podman run --volume /mypath:/ctr --dns 1.1.1.1 --env TEST=123 $IMAGE

    View Slide

  16. -
    Podman Desktop - dedicated for Containers and Kubernetes for application developers
    Windows, Mac, and Linux

    View Slide

  17. 17
    Podman Desktop covers the full spectrum
    Offering a smooth transition from containers to pods and to Kubernetes
    OpenShift Local / Minikube / K3s /
    Kind
    Kubernetes Cluster
    Node Node Node
    Pod Pod Pod
    Managed
    Services
    OpenShift Remote and Managed Services
    Container
    Docker-Compose
    Pod
    Podman Engine
    Ingress/Router

    View Slide

  18. 18
    Network stack update
    ● ネットワークプラグイン
    ○ 従来のCNI pluginから、以下の組み合わせに変更
    ■ Netavark https://github.com/containers/netavark
    ■ Aardvark-dns https://github.com/containers/aardvark-dns
    ○ v4.0で登場、v4.4からPodman新規インストール時はNetavarkがデフォルトに
    ■ CNIはdeprecated(非推奨)扱い、v5.0から使えなくなる
    ● CNI deprecation and removal from Podman 5.0
    https://blog.podman.io/2023/11/cni-deprecation-and-removal-from-podma
    n-5-0/
    ● ただしv5.0の時期は決まっておらず、おそらく遠い将来
    ■ 複数ネットワーク接続、IPv6等のサポート
    ● ユーザーモードネットワーク
    ○ pastaのサポート
    ■ https://github.com/containers/podman/pull/16141
    ■ https://passt.top/passt/about/#pasta-pack-a-subtle-tap-abstraction
    ○ slirp4netnsに比べてパフォーマンスがよく、IPv6をサポートしている

    View Slide

  19. 19
    Quadlet
    ● Podmanコンテナとsystemdとの連携をより簡単に、宣言的に行うための仕組み
    ● 従来:
    ○ podman generate system → service unitファイルを生成
    ● Quadletの場合:
    ○ Quadlet用のsystemd generatorファイルを作成し、所定のディレクトリに配置する
    ■ Quadletがサポートするgenerator: .volume, .network, .container, .kube
    ■ 配置先:
    ● /etc/containers/systemd (rootful)
    ● ${HOME}/.config/containers/systemd (rootless)
    ○ generatorを手動で呼び出してservice unitファイルを生成する
    ■ systemctl daemon-reload (rootful)
    ■ systemctl --user daemon-reload (rootless)
    ○ service unitは下記パスに生成される
    ■ /run/systemd/generator/*.service (rootful)
    ■ /run/user/${UID}/systemd/generator/*.service (rootless)

    View Slide

  20. 20
    Quadlet
    ● generatorファイルの例
    $ cat ${HOME}/.config/containers/systemd/redis.container
    [Unit]
    Description=Redis container
    [Container]
    Image=docker.io/redis
    PublishPort=6379:6379
    User=999
    [Service]
    Restart=always
    [Install]
    WantedBy=local.target

    View Slide

  21. 21
    Quadlet
    ● generatorからservice unitを生成 (ドライラン)
    ]$ /usr/libexec/podman/quadlet -user -dryrun
    quadlet-generator[753080]: Loading source unit file /home/ori/.config/containers/systemd/redis.container
    ---redis.service---
    [Unit]
    Description=Redis container
    SourcePath=/home/ori/.config/containers/systemd/redis.container
    RequiresMountsFor=%t/containers
    [X-Container]
    Image=docker.io/redis
    PublishPort=6379:6379
    User=999
    [Service]
    Restart=always
    Environment=PODMAN_SYSTEMD_UNIT=%n
    KillMode=mixed
    ExecStop=/usr/bin/podman rm -f -i --cidfile=%t/%N.cid
    ExecStopPost=-/usr/bin/podman rm -f -i --cidfile=%t/%N.cid
    Delegate=yes
    Type=notify
    NotifyAccess=all
    SyslogIdentifier=%N
    ExecStart=/usr/bin/podman run --name=systemd-%N --cidfile=%t/%N.cid --replace --rm --cgroups=split --sdnotify=conmon -d --user
    999 --publish 6379:6379 docker.io/redis
    [Install]
    WantedBy=local.target

    View Slide

  22. 22
    Flexible Interfaces from Development to Production
    RESTful API
    systemd Quadlet
    * podman supports a large subset of the Kube API. View the podman-kube-play manpage for details.
    RHEL system role (Ansible)
    Kubernetes*
    podman desktop
    Command Line Interface (CLI)
    Dev
    Prod
    Web Console (cockpit-podman)

    View Slide

  23. 23
    Podman in Production
    Kube YAML
    podman generate kube [UUID]
    apiVersion: v1
    kind: Pod
    Metadata:
    annotations:
    io.podman.annotations.ulimit:
    nofile=524288:524288
    labels:
    app: thirstywilson-pod
    name: thirstywilson-pod
    spec:
    containers:
    - image: ubi9/nginx-120
    command: [“nginx”]
    args: [“g”, “daemon off;”]
    name: thirstywilson
    ports:
    - containerPort: 8080
    hostPort: 8080
    stdin: true
    tty: true
    systemd unit file
    podman generate systemd --new [UUID]
    [Unit]
    Description= nginx container
    After=network-online.target
    [Service]
    Restart=on-failure
    ExecStart=/usr/bin/podman run \
    --cidfile=%t/%n.ctr-id \
    --cgroups=no-conmon \
    --rm \
    --sdnotify=conmon \
    -d \
    -p 8080:8080 \
    ubi9/nginx-120 nginx -g “daemon off;”
    [Install]
    WantedBy=multi-user.target
    Quadlet
    /etc/containers/systemd/nginx.container
    [Service]
    Restart=always
    [Container]
    ContainerName=nginx
    Image=ubi9/nginx-120
    PublishPort=8080:8080
    Exec=nginx -g "daemon off;"
    [Install]
    WantedBy=default.target

    View Slide

  24. 24
    Build Farm
    ● 複数の異なるCPUアーキテクチャのPodman Machineに対してコンテナビルドを実行する
    ● ビルドしたコンテナイメージはpodman farmを実行した手元に転送され、ひとつのイメージ
    Manifestとして登録される
    podman farm create NAME CONNECTION1 CONNECTION2 ...
    podman farm --farm NAME build -t TAG -f Dockerfile .
    podman farm list
    デモ動画: https://asciinema.org/a/V6WufoZX0Kglvlgq2YfmqZhH7

    View Slide

  25. 25
    Build Farm
    ● 複数の異なるCPUアーキテクチャのPodman Machineに対してコンテナビルドを実行する
    ● ビルドしたコンテナイメージはpodman farmを実行した手元に転送され、ひとつのイメージ
    Manifestとして登録される
    podman farm create NAME CONNECTION1 CONNECTION2 ...
    podman farm --farm NAME build -t TAG -f Dockerfile .
    podman farm list

    View Slide

  26. 26
    Build Farm
    ● 複数の異なるCPUアーキテクチャのPodman Machineに対してコンテナビルドを実行する
    ● ビルドしたコンテナイメージはpodman farmを実行した手元に転送され、ひとつのイメージ
    Manifestとして登録される
    podman farm create NAME CONNECTION1 CONNECTION2 ...
    podman farm --farm NAME build -t TAG -f Dockerfile .
    podman farm list

    View Slide

  27. 27
    Build Farm
    ● 複数の異なるCPUアーキテクチャのPodman Machineに対してコンテナビルドを実行する
    ● ビルドしたコンテナイメージはpodman farmを実行した手元に転送され、ひとつのイメージ
    Manifestとして登録される
    podman farm create NAME CONNECTION1 CONNECTION2 ...
    podman farm --farm NAME build -t TAG -f Dockerfile .
    podman farm list

    View Slide

  28. 28
    Podmansh
    ● ユーザーのログインシェルを、Quadletで定義されたPodmanコンテナにする仕組み
    ○ ユーザーがアクセスできるボリュームマウントや、Capability設定等をQuadletで定義する
    ● ユーザーからのリソースアクセスはコンテナ環境に制限される
    ○ SELinuxはじめ、標準的なコンテナのリソース分離の仕組みを活用
    ● ユーザーからの複数のログインは同じコンテナを使用する
    ○ ユーザーからの全て接続が終了するとコンテナは終了する
    ● Podman v4.6 Introduces Podmansh: A Revolutionary Login Shell
    https://blog.podman.io/2023/08/podman-v4-6-introduces-podmansh-a-revolutionary-l
    ogin-shell/

    View Slide

  29. 29
    Podmansh
    # useradd -s /usr/bin/podmansh lockedu
    # grep lockedu /etc/passwd
    lockedu:x:4008:4008::/home/lockedu:/usr/bin/podmansh
    # USER_ID=$(id -u lockedu)
    # mkdir -p /etc/containers/systemd/users/${USER_ID}
    # cat > /etc/containers/systemd/users/${USER_ID}/podmansh.container << _EOF
    [Unit]
    Description=The Podmansh container
    After=local-fs.target
    [Container]
    Image=registry.fedoraproject.org/fedora
    ContainerName=podmansh
    RemapUsers=keep-id
    RunInit=yes
    DropCapability=all
    NoNewPrivileges=true
    Exec=sleep infinity
    [Install]
    RequiredBy=default.target
    _EOF

    View Slide

  30. 30
    Native Hypervisor support
    ● macOS: Apple Virtualization.framework
    ○ MVP for Podman Machine with AppleHV #18402
    ■ https://github.com/containers/podman/pull/18402
    ● Windows: Hyper-V
    ○ basic hypverv machine implementation #17838
    ■ https://github.com/containers/podman/pull/17838
    % ./bin/darwin/podman machine ls
    NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
    applehv applehv About a minute ago Currently running 4 2GiB 100GiB

    View Slide

  31. 31
    AppleHV
    ● https://fedorapeople.org/groups/podman/testing/applehv/
    % ./bin/darwin/podman --log-level debug machine start applehv
    INFO[0000] ./bin/darwin/podman filtering at log level debug
    DEBU[0000] Using Podman machine with `applehv` virtualization provider
    DEBU[0000] connection refused: http://localhost:8081/vm/state
    Starting machine "applehv"
    DEBU[0000] connection refused: http://localhost:8081/vm/state
    DEBU[0000] gvproxy binary being used: /opt/homebrew/opt/podman/libexec/podman/gvproxy
    DEBU[0000] [-debug -mtu 1500 -ssh-port 58763 -listen-vfkit unixgram:///var/folders/zb/g4m_k4dj331b5f_p_x_vdj2r0000gn/T/podman/gvproxy.sock
    -forward-sock /Users/ori/.local/share/containers/podman/machine/applehv/podman.sock -forward-dest /run/user/501/podman/podman.sock -forward-user core
    -forward-identity /Users/ori/.ssh/applehv -pid-file /var/folders/zb/g4m_k4dj331b5f_p_x_vdj2r0000gn/T/podman/gvproxy.pid]
    DEBU[0000] gvproxy unixgram socket "/var/folders/zb/g4m_k4dj331b5f_p_x_vdj2r0000gn/T/podman/gvproxy.sock" not found: stat
    /var/folders/zb/g4m_k4dj331b5f_p_x_vdj2r0000gn/T/podman/gvproxy.sock: no such file or directory
    DEBU[0000] vfkit path is: /usr/local/bin/vfkit
    DEBU[0000] first boot detected
    DEBU[0000] serving ignition file over /Users/ori/.local/share/containers/podman/machine/applehv/ignition.sock
    DEBU[0000] listening for ready on: /var/folders/zb/g4m_k4dj331b5f_p_x_vdj2r0000gn/T/podman/applehv_ready.sock
    DEBU[0000] reading ignition file: /Users/ori/.config/containers/podman/machine/applehv/applehv.ign
    DEBU[0000] waiting for ready notification
    DEBU[0000] ignition socket device: /Users/ori/.local/share/containers/podman/machine/applehv/ignition.sock
    DEBU[0029] ready notification received
    This machine is currently configured in rootless mode. If your containers
    require root permissions (e.g. ports < 1024), or if you run into compatibility
    issues with non-podman clients, you can switch using the following command:
    podman machine set --rootful applehv
    API forwarding listening on: /Users/ori/.local/share/containers/podman/machine/applehv/podman.sock
    Another process was listening on the default Docker API socket address.
    You can still connect Docker API clients by setting DOCKER_HOST using the
    following command in your terminal session:
    export DOCKER_HOST='unix:///Users/ori/.local/share/containers/podman/machine/applehv/podman.sock'
    Machine "applehv" started successfully
    DEBU[0030] Called machine start.PersistentPostRunE(./bin/darwin/podman --log-level debug machine start applehv)
    DEBU[0030] Shutting down engines

    View Slide

  32. 32
    Hyper-V
    ● WSLではFedora CoreOS (FCOS) を実行することが難しい
    ○ Ignitionを渡せないため
    ○ 現時点でのWindows版Podmanでは、FCOSではなくFedoranのイメージを使っている
    ○ Podman開発陣としては、Windows版もFCOSにそろえたい
    → Hyper-Vで頑張る
    ● https://fedorapeople.org/groups/podman/testing/hyperv/aarch64/

    View Slide

  33. 33
    バックエンドDBをSQLiteに変更
    ● Pod、コンテナ等の構成情報、終了ステータス等をBoltDBデータベースに保存
    ○ ${HOME}/.local/share/containers/cache/blob-info-cache-v1.boltdb
    ● DBの中身がまれに壊れるタイミングがあるため、SQLiteに切り替え
    $ sqlite3 "file:${HOME}/.local/share/containers/storage/db.sql?mode=ro" .table
    ContainerConfig ContainerState PodConfig
    ContainerDependency ContainerVolume PodState
    ContainerExecSession DBConfig VolumeConfig
    ContainerExitCode IDNamespace VolumeState

    View Slide

  34. 34
    PodmanでコンテナをKVM isolation実行
    ● 仕掛けその1: crun実行時にrun.oci.handlerを指定することで、実行時のハンドラを指定すること
    ができる
    ○ https://github.com/containers/crun/blob/main/crun.1.md#runocihandlerhandler
    ● 仕掛けその2: libkrunを使ってKVM仮想化環境の中でプロセスを実行する
    ○ libkrun: プロセスをKVM仮想環境内で実行できるようにするライブラリ
    ■ https://github.com/containers/libkrun
    ● crun実行時にrun.oci.handlerでkrunを指定
    → crunがlibkrunをdlopen(3)し、コンテナをKVM仮想環境内で実行

    View Slide

  35. 35
    libkrun
    ● プロセスをKVM仮想環境内で実行できるようにするライブラリ
    ■ https://github.com/containers/libkrun
    ■ https://kvmforum2021.sched.com/event/ke36/libkrun-more-than-a-vmm-in-dy
    namic-library-form-sergio-lopez-pascual-red-hat
    ● Kataよりも軽量、最小限のvirtioデバイス
    ○ virtio-console
    ○ virtio-vsock (specialized for TSI, Transparent Socket Impersonation)
    ○ virtio-fs
    ○ virtio-baloon (only free-page reporting)
    ○ virtio-rng
    ○ virtio-block (for AMD SEV)

    View Slide

  36. 36
    Podman+crun+libkrunでKVM isolation実行
    ● crun+libkrunでコンテナを実行する
    $ podman run -d \
    -v /dev/kvm:/dev/kvm \
    --annotation=run.oci.handler=krun \
    --name nginx
    nginx
    ● コンテナプロセスのPIDを確認する
    ● KVMの仮想環境でコンテナプロセスが動いていることを確認する
    $ ls -l /proc/${pid}/fd | grep kvm
    lrwx------. 1 ori ori 64 Nov 16 00:40 19 -> anon_inode:kvm-vm
    lrwx------. 1 ori ori 64 Nov 16 00:43 29 -> anon_inode:kvm-vcpu:0
    lrwx------. 1 ori ori 64 Nov 16 00:43 31 -> anon_inode:kvm-vcpu:1
    lrwx------. 1 ori ori 64 Nov 16 00:43 33 -> anon_inode:kvm-vcpu:2
    lrwx------. 1 ori ori 64 Nov 16 00:43 35 -> anon_inode:kvm-vcpu:3
    lrwx------. 1 ori ori 64 Nov 16 00:43 37 -> anon_inode:kvm-vcpu:4
    lrwx------. 1 ori ori 64 Nov 16 00:43 39 -> anon_inode:kvm-vcpu:5
    lrwx------. 1 ori ori 64 Nov 16 00:43 41 -> anon_inode:kvm-vcpu:6
    lrwx------. 1 ori ori 64 Nov 16 00:43 43 -> anon_inode:kvm-vcpu:7
    $ podman inspect nginx | jq '.[].State.Pid'
    190597
    $ pid=$(podman inspect nginx | jq '.[].State.Pid')
    $ ps -p ${pid} f
    PID TTY STAT TIME COMMAND
    190597 ? Ssl 0:00 [libcrun:krun] /docker-entrypoint.sh nginx -g daemon off;

    View Slide

  37. 37
    Podman+crun+WasmEdgeでWasmバイナリを実行
    ● Wasmバイナリを生成する準備をする
    $ rustup target add wasm32-wasi
    ● Wasmバイナリをビルドする
    ● Wasmバイナリをそのまま実行してみる
    $ wasmedge target/wasm32-wasi/debug/hello.wasm world
    hello
    world
    ● Dockerを作成する
    $ cat > Dockerfile <FROM scratch
    COPY target/wasm32-wasi/debug/hello.wasm /
    CMD ["/hello.wasm" "world"]
    END
    ● コンテナイメージをビルドする
    $ buildah build -t mywasm-hello .
    ● コンテナとしてWasmバイナリを実行する
    $ podman run --annotation=run.oci.handler=wasm localhost/mywasm-hello
    hello
    world
    $ git clone https://github.com/second-state/wasm-learning.git
    $ cd wasm-learning/cli/hello
    $ cat src/main.rs
    use std::env;
    fn main() {
    println!("hello");
    for argument in env::args().skip(1) {
    println!("{}", argument);
    }
    }
    $ cargo build --target wasm32-wasi
    Wasmネタは@utam0kさんのセッションで!

    View Slide

  38. 38
    YoukiもRootless Podmanで動くようになりました!

    View Slide

  39. V0000000
    41
    Podmanコミュニティ
    https://podman.io/
    Podman Community Meeting
    1st Tuesday of even numbered months
    11 AM US ET / 5 PM CET
    Join Meeting - Agenda
    Podman Community Cabal
    3rd Thursday every month
    11 AM US ET / 5 PM CET
    Join Meeting - Agenda
    IRC: #podman on libera.chat (web link)
    Podman Discord
    Matrix
    Mailing list
    Github

    View Slide

  40. CONFIDENTIAL Designator
    linkedin.com/company/red-hat
    youtube.com/user/RedHatVideos
    facebook.com/redhatinc
    twitter.com/RedHat
    42
    Red Hat is the world’s leading provider of enterprise
    open source software solutions. Award-winning support,
    training, and consulting services make Red Hat a trusted
    adviser to the Fortune 500.
    Thank you

    View Slide