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

Lima+containerd+nerdctlで作るコンテナ環境/lima_container...

moz_sec_
December 07, 2024

 Lima+containerd+nerdctlで作るコンテナ環境/lima_containerd_nerdctl

moz_sec_

December 07, 2024
Tweet

More Decks by moz_sec_

Other Decks in Technology

Transcript

  1. 3 • Linuxの仕組み(namespace, cgroup, capability, etc.)を使って、コンテナを作成 • クライアント・サーバーモデル(RESTで通信) • Docker

    CLIでコマンドを実⾏すると、Docker Daemonにhttpリクエストを出 して、コンテナを操作 → Docker CLIを実⾏するマシンとDocker Daemonが動くマシンは同じでなく てもよい Docker <>%PDLFS%PDT%PDLFS"SDIJUFDUVSF IUUQTEPDTEPDLFSDPNHFUTUBSUFEEPDLFSPWFSWJFXEPDLFSBSDIJUFDUVSF 1台構成(よくあるパターン) 2台構成 Linux docker run docker build docker pull Docker Daemon Images Container Registry (Docker Hub etc.) Images REST Containers Linux docker run docker build docker pull Docker Daemon Images Containers Container Registry (Docker Hub etc.) Images OSは問わない REST
  2. 4 • WindowsやMacには、コンテナを作る機能がない → Docker Desktopがある︖ → 内部的には、Linux VMを⽴てて、WindowsやMacからREST APIを呼び出す

    ※ Docker Desktopには、Docker CLIやGUI以外にも、ExtensionやKubernetesの 機能なども含まれている <>%PDLFS#FHJOOFSUP1SP IUUQTDPVSTFTEFWPQTEJSFDUJWFDPNEPDLFSCFHJOOFSUP QSPMFTTPOTUFDIOPMPHZPWFSWJFXEPDLFSBQQMJDBUJPOBSDIJUFDUVSF Linux Docker Daemon Images Container Registry (Docker Hub etc.) Images Docker Desktop GUI docker run docker build docker pull REST CLI Containers Docker
  3. 5 • High Levelランタイムはデーモン、Low Levelランタイムはただのバイナリ • Docker Daemonはリクエストを受け取ると、以下の処理を⾏う 1. リクエストを解析・検証し、イメージがローカルにあるかチェック

    (ない場合はpull) 2. containerdがファイルシステムやネットワークインタフェースを設定 3. shimプロセスを使⽤して、runcにコンテナの実⾏を委任 4. runcによりコンテナが実⾏されると、containerdがコンテナのステー タスを監視 Container Runtime <>DPOUBJOFSEͱ%PDLFSͦΕΒͷؔ܎ͱͦΕΒ͕ͲͷΑ͏ʹ࿈ܞ͢Δ͔Λཧղ͢Δ IUUQTXXXEPDLFSDPNKBKQCMPHDPOUBJOFSEWTEPDLFS <>コンテナランタイムはじめの⼀歩 / Container Runtime 101 IUUQTTQFBLFSEFDLDPNJOEVDUPSDPOUBJOFSSVOUJNF <>Ϋϥ΢υωΠςΟϒͷج൫ཁૉɺίϯςφͷࠓͱະདྷ IUUQTTQFBLFSEFDLDPNVUBNLLVSBVEPOFJUFJCVOPKJQBOZBPTV LPOUFOBOPKJOUPXFJMBJ Docker Daemon Container Runtime Linux High Level Low Level gRPC JSON設定ファイル と サブコマンド Container コンテナの設定や管理をHigh Levelランタイムが⾏い、 コンテナの作成はLow Levelランタイムが⾏う
  4. 7 • Macのためのツール(WindowsはWSLがあるから) • Linux VMを作成する(Docker DesktopとかWSLとやっていることはほぼ同じ) 1.ホストOSと⾃動でファイルシステムを共有 2.コンテナへのポートフォーワード +)

    containered と nerdctlを含む • デフォルトではnerdctlを使⽤するが、DockerやPodmanを使うことも可能 Lima: Linux Machines <>MJNBWNMJNB IUUQTHJUIVCDPNMJNBWNMJNB 2. VMの起動 3. VMの表⽰ 1. VMの作成 4. VM上でコマンド実⾏ limactlコマンドでVMの操作を⾏い、 limaコマンドの引数にVM上で実⾏ したいコマンドを⼊⼒して使う UTMやVirtual BoxでVMを⽴てて、⼿動で これらの設定をすれば同じ環境は作れる が、Limaを使うと⾃動でやってくれる
  5. 8 • デファクトスタンダードなHigh Level ランタイム • Low Level ランタイムの抽象化レイヤであり、コンテナの設定や管理を⾏う •

    2015年にDocker社が作成し、2017年にDockerから分離してCNCFに寄贈 • スコープを拡⼤し、今ではcontainerdだけでDockerの機能をほぼカバー ※ Docker Daemonの機能をであり、Docker Desktopと同じ機能をカバーして いるわけではない containerd <>DPOUBJOFSEDPOUBJOFSE IUUQTHJUIVCDPNDPOUBJOFSEDPOUBJOFSE <>%PDLFS͔ΒDPOUBJOFSE΁ͷҠߦ /555FDI$POGFSFODFൃදϨϙʔτ IUUQTNFEJVNDPNOUUMBCTEPDLFSUPDPOUBJOFSEGBFGC Docker Daemon Container Runtime Linux High Level Low Level JSON設定ファイル と サブコマンド Container 何かしらの コマンド gRPC containerdと直接やりと りできると便利
  6. 9 • containerdを操作するためのコマンド • Docker互換CLI • containerdにはctrというコマンドも存在するが、あくまでテスト⽤であり、 使いずらい • Dockerがサポートしていないcontainerdの機能も使⽤できる

    • ⾼速イメージpull(Lazy Pulling) • P2Pイメージ共有 • コンテナイメージの暗号化 • イメージの署名・検証 • ⾼速なrootlessモード nerdctl(contaiNERD CTL) <>%PDLFS͔ΒDPOUBJOFSE΁ͷҠߦ /555FDI$POGFSFODFൃදϨϙʔτ IUUQTNFEJVNDPNOUUMBCTEPDLFSUPDPOUBJOFSEGBFGC <>DPOUBJOFSEOFSEDUM IUUQTHJUIVCDPNDPOUBJOFSEOFSEDUM Docker Daemon Container Runtime Linux High Level Low Level JSON設定ファイル と サブコマンド Container nerdctl gRPC
  7. 11 • containerd v2.0 が 2024/11/05 にリリース(メジャーアップデートは7年ぶり) • それに伴い、nerdctl v2.0,

    Lima v1.0 がリリース • limaのデフォルトの設定で作成されるVMでは、containerd v2.0 と nerdctl 2.0 が⼊っている • ただ、Kubernetesで使われる機能のアップデートが多い • Kubernetes周りの開発・運⽤に携わるのであれば、lima+containerd+nerdctl を使うとcontainerd v2.0 の検証が楽 • ソフトウェア開発者からすると、containerd v1.7からcontainerd v2.0 になっ てもあまり開発者体験は変わらないかもしれない containerd v2.0 <>DPOUBJOFSE W OFSEDUM W BOE-JNBW IUUQTNFEJVNDPNOUUMBCTDPOUBJOFSEWOFSEDUMWMJNBWCG <>DPOUBJOFSEDPOUBJOFSE EPDTDPOUBJOFSENE IUUQTHJUIVCDPNDPOUBJOFSEDPOUBJOFSECMPCNBJOEPDTDPOUBJOFSENE
  8. 12 • MacやWindowsでコンテナを使う⽅法はいくつか(Docker Desktop, Podman Desktop)あるが、やっていることは Linux VMを⽴てて、その中でコンテナ を動かしている だけ

    • Lima + containerd + nerdctl で同じことを実現すればコンテナは作れる • Limaを使うとLinux VMを作ることができ、limaコマンドでMac側からVMで 実⾏したいコマンドを実⾏できる(コンテナ⽤途以外でも使⽤可) • Lima v1.0 からは、containerd v2.0 がデフォルトで使⽤されるため、 containerd v2.0 の検証は簡単にできる • Lazy Pullingとか、ソフトウェア開発においてはあまり必要ないかもしれな いが、クラウドでは普通に使われている技術だったりする まとめ