SlideShare una empresa de Scribd logo
1 de 36
Copyright(c)2022 NTT Corp. All Rights Reserved.
Dockerからcontainerdへの移行
日本電信電話株式会社
ソフトウェアイノベーションセンタ
徳永 航平
須田 瑛大
NTT Tech Conference 2022 (March 23rd)
Copyright(c)2022 NTT Corp. All Rights Reserved.
Dockerの復習
2
● docker composeで複数コンテナをまとめて管理
可能
● コンテナ開発に有用な機能を提供するツール
docker run -it --rm alpine
docker build -t foo /dockerfile-dir
docker push ghcr.io/ktock/myalpine:latest
Build
Ship
Run
● Mac,WindowsではDocker Desktopを利
用可能
Build(イメージ作成) Run(コンテナ実行)
レジストリ
Ship(コンテナ配布)
イメージ
材料 コンテナ
Copyright(c)2022 NTT Corp. All Rights Reserved.
Dockerに関する最近の話題:Kubernetesでのdockershim非推奨化
3
kubectl apply
runc
スケジュールされたPodの管理
コンテナ実行状態の管理
Linux機能を使いコンテナの作成
ノード
apiserver
kubelet
Pod割り当て
コンテナ・イメージの管理
Docker
(非推奨化)
● Kubernetes v1.23まではノード上で
Dockerをコンテナランタイムとして利
用可能
● Kubernetes v1.20からkubeletから
Docker利用は非推奨に
● Kubernetes v1.24ではDockerのサポ
ート(dockershim)を削除予定
○ 今後独立のツールとしてMirantis
社によってメンテされる
○ https://github.com/Mirantis/cri-dockerd
Copyright(c)2022 NTT Corp. All Rights Reserved.
Dockerに関する最近の話題:Docker Desktop有償化
4
● Docker Desktop 有償化:”professional use in larger businesses”対象
• https://www.docker.com/blog/updating-product-subscriptions/
● GUI版のDocker Desktopは有償だが、Docker CLI + Docker EngineのVM
内での利用は有償化されない
• https://www.docker.com/pricing/faq
■ “Can I just install the Docker CLI instead of using Docker
Desktop?”
Copyright(c)2022 NTT Corp. All Rights Reserved. 5
containerdによるコンテナ管理
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerdによるコンテナ管理
6
● オープンソースなコンテナランタイム(CNCF graduatedプロジェクト)
● Docker/Moby、Kubernetesサービス(EKS、AKS、GKE)で使われるな
ど、採用が拡大している
https://github.com/containerd/containerd
引用元:https://sysdig.com/blog/sysdig-
2021-container-security-usage-report/
(2021年1月)
引用元:
https://www.cncf.io/report
s/cncf-annual-survey-2021/
(2022年2月)
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerdとDocker、Kubernetesの関係
7
コンテナ管理運用基盤
Linuxカーネル
コンテナ開発ツール
コンテナ管理運用基盤
Kubernetes
従来
分散環境上のコンテナ管理
ノード上のコンテナ管理
containerd
コンテナ実行状態の管理
runc
カーネルの機能を使いコンテナ作成
コンテナ開発ツール
Linuxカーネル
containerd
汎用のコンテナ管理フレームワーク
runc
カーネルの機能を使いコンテナ作成
nerdctl
(containerdの一部)
コンテナ作成/実行/配布など
開発支援機能の提供
Kubernetes
分散環境上のコンテナ管理
高速rootless、eStargzなど先進
機能を備えたDocker互換ツール
Docker
近年
containerd だけで Docker の機能をほぼカバー
containerdを直接利用
Docker
Copyright(c)2022 NTT Corp. All Rights Reserved.
nerdctl:Docker互換なcontainerd用CLI
8
● Docker風のUI/UX(composeもサポート)
https://github.com/containerd/nerdctl
● 先進機能
● 高速イメージpull(eStargz)
● P2Pイメージ共有(IPFS)
● 暗号化イメージ (OCIcrypt)
● イメージへの署名/検証(cosign)
● 高速rootless(bypass4netns)
nerdctl CLI
containerd API
nerdctl run -it --rm alpine
nerdctl build -t foo /dockerfile-dir
nerdctl push ghcr.io/ktock/myalpine:latest
nerdctl compose up
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerdによるKubernetesでのコンテナ管理
9
● 各ノード上でコンテナランタイムと
してcontainerdを利用可能
● kubeletはContainer Runtime
Interface(CRI)経由で
containerdを直接利用
● EKS、AKS、GKEなどマネージド
Kubernetesサービスでも利用可能
kubectl apply
runc
スケジュールされたPodの管理
Pod、コンテナ、イメージの管理
Linux機能を使いコンテナの作成
ノード
apiserver
kubelet
CRI
Pod割り当て
Copyright(c)2022 NTT Corp. All Rights Reserved.
GKEでのcontainerdへの移行
10
https://cloud.google.com/kubernetes-engine/docs/deprecations/docker-containerd
https://cloud.google.com/kubernetes-engine/docs/how-to/migrate-containerd
● Dockerベースのノードイメージは1.24以降でサポートされなくなる
● containerdベースのノードイメージ(Linuxノードでは1.19、Windowsでは1.21
からデフォルト)に移行する必要がある
Dockerノードイメージ Containerdノードイメージ
Dockerを含むContainer-Optimized OS (cos) Containerdを含むContainier-Optimized OS (cos_containerd)
Dockerを含むUbuntu(ubuntu) Containerdを含むUbuntu(ubuntu_containerd)
Dockerを含むWindows Server LTSC(windows_ltsc) Containerdを含むWindows Server LTSC(windows_ltsc_containerd)
Dockerを含むWindows Server SAC(windows_sac) Containerdを含むWindows Server SAC(windows_sac_containerd)
● 移行作業のためのスクリプト`find-nodepools-to-migrate.sh`が提供されている
• クラスタを解析して、移行のための推奨コマンドを示してくれる
https://github.com/GoogleCloudPlatform/k8s-node-tools/blob/HEAD/migrating-to-containerd/find-nodepools-to-
migrate.sh
● 推奨されたコマンド(`gcloud container clusters upgrade`)を使ってcontainerdに
移行可能
Copyright(c)2022 NTT Corp. All Rights Reserved.
EKSでのcontainerdへの移行
11
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/dockershim-deprecation.html
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/eks-optimized-ami.html#containerd-bootstrap
● Amazon Linux AMIは1.21現在でDockerがデフォルトランタイム
● バージョン1.23以降、含まれるランタイムはcontainerdのみになる
● 1.21現在までのAMIでも、ブートストラップフラグ` --container-runtime
containerd`でcontainerdノードを利用可能
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster
region: region-code
managedNodeGroups:
- name: my-nodegroup
ami: eks-optimized-AMI-ID
overrideBootstrapCommand: |
#!/bin/bash
set -eu -o pipefail
/etc/eks/bootstrap.sh my-cluster --container-runtime containerd
● あるいは、ランタイムとしてcontainerdを利用しているBottlerocket AMIまたはEKS
Fargateに移行するのも可
● WindowsノードでもKubernetes 1.20より新しいバージョンでcontainerdを選択可能
○ https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#containerd-bootstrap-windows
Copyright(c)2022 NTT Corp. All Rights Reserved.
AKSでのcontainerdへの移行
12
https://docs.microsoft.com/en-us/azure/aks/cluster-configuration#container-runtime-configuration
● LinuxノードではKubernetes v1.19からcontainerdがランタイムとして使われている
● AKSのバージョンを`az aks upgrade`などで1.19以降にアップグレードすることで
Linuxノードについてはcontainerdへ移行可能
● とはいえすでに1.19以前はEOLのため、サポートされているAKS全バージョンでLinux
ノードではcontainerdが使われていることになる
● Windowsノードでは1.20からcontainerdを利用可能。1.22以前のクラスタでは
Dockerがデフォルト。1.23からはcontainerdがデフォルトになる。
○ `az aks nodepool upgrade`などで移行可能:https://docs.microsoft.com/en-us/azure/aks/windows-
container-cli#optional-using-containerd-with-windows-server-node-pools
Copyright(c)2022 NTT Corp. All Rights Reserved.
kubeadmでのcontainerdへの移行
13
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#initializing-your-control-
plane-node
● ノードにDockerが稼働していればcontainerdも既に稼働している
● kubeadm(v1.23現在)はDockerを優先的に使用するので、明示的にcontainerdのソケ
ットパス`--cri-socket=/run/containerd/containerd.sock`を指定する必要がある
sudo kubeadm reset
sudo kubeadm join 192.168.56.120:6443 --cri-socket=/run/containerd/containerd.sock
--token <省略> --discovery-token-ca-cert-hash <省略>
● ここで、containerdのconfig(/etc/containerd/config.toml)に`disabled_plugins =
[“cri”]`が指定されてないことを要確認
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: イメージを作り直す必要はあるか?
14
A. No。既存のコンテナイメージがそのままcontainerdで使える。
標準準拠ランタイム
Docker
Docker
BuildKit
Kaniko
イメージビルダ
etc…
etc…
● イメージには標準仕様があるのでcontainerd移行後も引き続き実行可能
標準準拠イメージ
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: レジストリはそのまま使えるか?
15
A. Yes。ただしレジストリミラー等の設定は移行が必要。
● レジストリには標準仕様があるのでcontainerd移行後も引き続き利用可能
● ただし、`/etc/docker/`にレジストリクライアント関連の設定(ミラーや証明書など)
をしていた場合は、`/etc/containerd/`で設定しなおす必要がある
• 設定方法(containerd >= 1.5):
https://github.com/containerd/containerd/blob/v1.6.1/docs/hosts.md
標準準拠レジストリ 標準準拠ランタイム
Docker
pull
Docker
BuildKit
Kaniko
イメージビルダ
push
etc…
etc…
標準準拠イメージ
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: ノードの作り直しは必要か?
16
● GKE/EKS/AKSでは前述の通りノードの更新が必要。
● kubeadmでは、厳密にはNo。運用上はYes。
• Dockerが稼働していればcontainerdも稼働している
• しかしDockerを維持する理由がないならばDocker無
しでノードを作り直した方が良い
containerd
Docker
Kubernetes
(kubelet)
runc
クラウドの場合:Yes。
kubeadmの場合:厳密にはNo。運用上はYes。
A.
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: ノードのデバッグに`docker`コマンドは使い続けられるか?
17
A. No。代わりにnerdctlが使える。
$ sudo nerdctl --namespace=k8s.io ps
CONTAINER
ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
1fe5fe717d05 k8s.gcr.io/pause:3.5 "/pause" 9 minutes
ago Up k8s://kube-system/etcd-ktock
226a45b850fa k8s.gcr.io/kube-controller-manager:v1.23.4 "kube-controller-man…" 9 minutes
ago Up k8s://kube-system/kube-controller-manager-ktock/kube-controller-manager
・・・
`--namespace=k8s.io`を指定するとKubernetesのコンテナをDocker同様のUIでデバッグ可能
● 他にもノード上で利用可能なCLIはあるが、独特なUIに慣れが必要
• ctr: containerdに付属するデバッグ専用CLI。containerd APIに肉薄した操作(e.g.
snapshots、contents)や、containerd自体のデバッグに有用。
• https://github.com/containerd/containerd/tree/main/cmd/ctr
• crictl: Kubernetes SIG Nodeで開発されるCRI用CLI。YAMLファイルでPod,コンテ
ナ,イメージを操作可能
• https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: ノードのデバッグに`docker`コマンドは使い続けられるか?
18
$ mkdir -p /tmp/ctx && cat <<EOF > /tmp/ctx/Dockerfile
FROM alpine:3.15
CMD [ "sh", "-c", "while true ; do echo hello ; sleep 1 ; done" ]
EOF
$ sudo nerdctl --namespace k8s.io build -t foo /tmp/ctx
$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: foo
image: foo
imagePullPolicy: Never
EOF
$ kubectl logs foo
hello
`nerdctl build`を使ってノード上で
イメージをビルドして実行することも可能
A. No。代わりにnerdctlが使える。
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: ログ管理に影響はあるか?
19
A. ログ基盤がDocker依存の設定をもつ場合は修正の必要あり。
● `/var/log/pods`のログフォーマットはDockerとCRIランタイムで異なる
● 非マネージドなログ基盤で、Docker用のパーサしか設定されていなかったり、Docker
APIに依存してログ収集しているなど、Docker依存の設定がある場合は変更が必要
{"log":"Log line is here¥n","stream":"stdout","time":"2019-01-01T11:11:11.111111111Z"}
https://docs.docker.com/config/containers/logging/json-file/
2016-10-06T00:17:09.669794202Z stdout P log content 1
https://github.com/kubernetes/kubernetes/blob/9a8defda15e4c34e9c1989
75968d9619f48a0786/pkg/kubelet/kuberuntime/logs/logs.go#L125-L169
Dockerのログフォーマット
CRIランタイム(containerd含)のログフォーマット
Copyright(c)2022 NTT Corp. All Rights Reserved.
FAQ: Pod内で`docker`コマンドは引き続き利用可能か?
20
● GKE: Dockerに直接依存しないようワークロードをアップデートすべき。
• https://cloud.google.com/kubernetes-engine/docs/deprecations/docker-containerd#impact_of_migrating
● EKS: Docker socketをマウントするアプリケーションでは変更が必要になる。
• https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/dockershim-deprecation.html
● AKS: Dockerは利用不可。
• https://docs.microsoft.com/en-us/azure/aks/cluster-configuration#containerd-limitationsdifferences
● kubeadm: ノード上でCRIランタイムとしてcontainerdを使いつつ、Dockerも稼働させ
ておけば引き続き可能。
Pod内でDockerデーモンを稼働させる場合:Yes
ノード上のDockerに依存する場合:クラウドでは移行が推奨されている。
kubeadm利用時はYes。
A.
Copyright(c)2022 NTT Corp. All Rights Reserved.
Cluster
FAQ: Pod内で`docker`コマンドは引き続き利用可能か?
21
BuildKit
buildctl
BuildKit
BuildKit
BuildKit
Service
BuildKit
buildctl
BuildKit
BuildKit BuildKit
buildctl
+
BuildKit
kubectl
Deployment+Service StatefulSet Job
ランダムロードバランシング。
レジストリを介したキャッシ
ュ共有により高速なビルドが
可能。
クライアント側でのロードバ
ランシング。consistent
hashを使えば効率的にロー
カルキャッシュを活用可能。
ワンショットなビルド実行。
BuildKitデーモンの稼動が不
要。ローカルキャッシュはビ
ルドのたびに削除。
Cluster Cluster
Kubernetes上でのビルドにはBuildKitの利用も有用
https://github.com/moby/buildkit/tree/master/examples/kubernetes
Copyright(c)2022 NTT Corp. All Rights Reserved. 22
containerd・nerdctlの持つ様々な機能
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerd・nerdctlの持つ様々な機能
23
● nerdctl コマンドの使い方は、docker コマンドの使い方とだいたい同じ
● 単に docker コマンドの置き換えを目指しているわけではなくて、コンテナ
ランタイム関連の新機能を実験、普及展開するためのプラットフォームとし
て開発している
○ 高速イメージpull(eStargz)
○ P2Pイメージ共有(IPFS)
○ 暗号化イメージ (OCIcrypt)
○ イメージへの署名/検証(cosign)
○ 高速rootless(bypass4netns)
Copyright(c)2022 NTT Corp. All Rights Reserved.
高速なイメージPull(eStargz)
24
● Lazy pulling: イメージのpull完了を待たずにコンテナを起動可能
● eStargz: OCI仕様に後方互換のlazy pulling可能なイメージ形式
• lazy pulling非対応なランタイムでも通常のイメージとして扱える
0 10 20 30 40 50
estargz
estargz-noopt
legacy
Start up time of python:3.7 (print “hello”)
pull create run [se
c]
Figure from “Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
- Kohei Tokunaga & Tao Peng. KubeCon+CloudNativeCon North America 2021.
https://sched.co/lV2a “
$ nerdctl –-snapshotter=stargz run –it ghcr.io/stargz-containers/python:3.9-esgz
https://github.com/containerd/nerdctl/blob/master/docs/stargz.md
✅nerdctl
✅Kubernetes
Copyright(c)2022 NTT Corp. All Rights Reserved.
P2Pイメージ共有(IPFS)
25
nerdctl push ipfs://ubuntu:20.04
peer peer
IPFS
nerdctl run ipfs://bafkreicq4dg6nkef5ju422ptedcwfz6kcvpvvhuqeykfrwq5krazf3muze
● P2Pデータ共有プロトコルのIPFSを使ってコンテナイメージをP2P共有可能
● nerdctl各コマンドで”ipfs://CID“の形式でIPFS上のイメージを利用可能
● eStargzのlazy pulling、OCICryptなども依然利用可能
Experimental
https://github.com/containerd/nerdctl/blob/master/docs/ipfs.md
✅nerdctl
✅Kubernetes
※Kubernetesではnerdctl付
属のOCI互換プロキシを用いる
Copyright(c)2022 NTT Corp. All Rights Reserved.
イメージ暗号化・復号化(OCICrypt)
26
● キーペアを用いて、イメージの暗号化が可能
● 暗号化したイメージはcontainerdでPullして復号、実行できる
Registry
image image
公開鍵 秘密鍵
イメージの暗号化 イメージの復号
nerdctl image encrypt nerdctl image decrypt
https://github.com/containerd/nerdctl/blob/master/docs/ocicrypt.md
✅nerdctl
✅Kubernetes
Copyright(c)2022 NTT Corp. All Rights Reserved.
イメージ署名・検証(cosign)
27
● 署名を用いて、イメージが改竄されていないかを検証できる
● Notaryに似ているが、最近はcosignが流行りつつある
Registry
image
秘密鍵 公開鍵
イメージの署名 イメージの検証
nerdctl push --sign=cosign nerdctl pull --verify=cosign
https://github.com/containerd/nerdctl/blob/master/docs/cosign.md
✅nerdctl
✅Kubernetes
※Kubernetesではcosign付属
のadmission controllerを使用
image
Copyright(c)2022 NTT Corp. All Rights Reserved.
高速rootless(bypass4netns)
28
● rootlessコンテナでもrootfulと同等以上のNW性能を得られる
● rootlessコンテナに従来存在したユーザ空間TCP/IPスタック(slirp4netns)のネットワー
クオーバヘッドを回避
• SECCOMP_IOCTL_NOTIF_ADDFD で、bind(2) や connect(2) をホスト側にバイパ
スしている
Experimental
引用元:”インターンレポート: RootlessコンテナのTCP/IP高速化”.
https://medium.com/nttlabs/accelerating-rootless-container-network-29d0e908dda4
https://github.com/containerd/nerdctl/blob/master/docs/rootless.md
✅nerdctl
Copyright(c)2022 NTT Corp. All Rights Reserved.
その他
29
● 完全にread-onlyなmountが出来る: nerdctl run -v /mnt:/mnt:rro
○ docker run -v /mnt:/mnt:ro だと、/mnt/usb とかread-only にならない
● nerdctl runの--netは複数指定できる (コンテナを複数ネットワークに同時接続できる)
○ DockerでもComposeでなら同じことが出来るが、docker runでは出来ない
● FreeBSD コンテナ (jails) も少しだけ動く
○ ネットワークには未対応
● CNIやOCIなどの標準への準拠度が高い
○ nerdctl はCNI対応、docker は未対応
○ nerdctl save/nerdctl load はOCI Image SpecとDocker Image Specの両方対応、
docker save/docker load はOCI Image Spec未対応
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerdに移行すると出来なくなること
30
● Kubernetesノード上での docker コマンド使用
○ nerdctlを代わりに使用できる
● Docker REST API
○ Docker REST API に頼るアプリは動かない
○ docker コマンドを直に exec するアプリは、nerdctl を exec するように書き換
えるだけで動く
● Docker Swarm
○ コンテナオーケストレーションにはKubernetesやNomadを利用できる
nerdctl –-namespace=k8s.io build -t foo:1.2.3 .
Copyright(c)2022 NTT Corp. All Rights Reserved. 31
containerd・nerdctlへの移行方法
※Kubernetesの場合の移行方法は前述
(スライド10-13)
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerd・nerdctl への移行(linux)
32
https://github.com/containerd/nerdctl/releases
$ sudo systemctl enable --now containerd
$ sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine
$ containerd-rootless-setuptool.sh install
$ nerdctl run -d --name nginx -p 8080:80 nginx:alpine
Rootful
Rootless
tarballにcontainerd、nerdctl、runc等のバイナリ一式が全て含まれている
(/usr/local などのパスに展開)
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerd・nerdctl への移行(macOS)
33
● Lima (macOS用のWSL2のようなもの)に containerd・nerdctl も付属
● ホストのホームディレクトリが、ゲストからも見える
● ゲストのlocalhostに、ホストからもlocalhostとしてアクセスできる
https://github.com/lima-vm/lima
$ brew install lima
$ limactl start
$ lima nerdctl run …
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerd・nerdctl への移行(macOS)
34
● Rancher Desktop にも containerd・nerdctl が付属
○ 内部的にはやはりLima
○ GUI付き
○ https://rancherdesktop.io/
Copyright(c)2022 NTT Corp. All Rights Reserved.
containerd・nerdctl への移行(Windows)
35
● LinuxコンテナはWSL2上で動かせる
● Rancher Desktop for Windows にも containerd・nerdctl が付属
● 内部的にはWSL2
● Windowsネイティブなコンテナにも対応 (nerdctlではexperimental)
● https://github.com/containerd/nerdctl/issues/28
Copyright(c)2022 NTT Corp. All Rights Reserved.
まとめ
36
● Docker から containerd への移行が進んでいる
● kubeadmの場合は、--cri-socket=/run/containerd/containerd.sock を渡すだけ
● 従来の Docker イメージはそのまま使える
● docker コマンドの代わりに nerdctl (contaiNERD CTL) が使える
○ ただの docker コマンドの置き換えではなく、いろいろな新機能がついている
(高速イメージPull、暗号化、...)
○ macOS でもすぐ始められる (Windowsの場合はWSL2)
$ brew install lima
$ limactl start
$ lima nerdctl run …

Más contenido relacionado

La actualidad más candente

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)NTT DATA Technology & Innovation
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす Akihiro Suda
 

La actualidad más candente (20)

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 

Similar a Dockerからcontainerdへの移行

Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
Webアプリケーション開発者のためのDockerハンズオン20210519
Webアプリケーション開発者のためのDockerハンズオン20210519Webアプリケーション開発者のためのDockerハンズオン20210519
Webアプリケーション開発者のためのDockerハンズオン20210519虎の穴 開発室
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Webアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオンWebアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオン虎の穴 開発室
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Masahito Zembutsu
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Microsoft Corporation
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門Yuto Takei
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見るzhengen lin
 
BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)Akihiro Suda
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on WindowsTsubasa Nomura
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 

Similar a Dockerからcontainerdへの移行 (20)

Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
Webアプリケーション開発者のためのDockerハンズオン20210519
Webアプリケーション開発者のためのDockerハンズオン20210519Webアプリケーション開発者のためのDockerハンズオン20210519
Webアプリケーション開発者のためのDockerハンズオン20210519
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Webアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオンWebアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオン
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
 
Docker入門
Docker入門Docker入門
Docker入門
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on Windows
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 

Más de Akihiro Suda

20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_Akihiro Suda
 
20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdf20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdfAkihiro Suda
 
20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdf20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdfAkihiro Suda
 
[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless Podman[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless PodmanAkihiro Suda
 
[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilion[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilionAkihiro Suda
 
[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilion[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilionAkihiro Suda
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdfAkihiro Suda
 
[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2Akihiro Suda
 
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...Akihiro Suda
 
The internals and the latest trends of container runtimes
The internals and the latest trends of container runtimesThe internals and the latest trends of container runtimes
The internals and the latest trends of container runtimesAkihiro Suda
 
[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilionAkihiro Suda
 
[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilion[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilionAkihiro Suda
 
[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?Akihiro Suda
 
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with DockerfileAkihiro Suda
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] LimaAkihiro Suda
 
[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOSAkihiro Suda
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...Akihiro Suda
 
[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10Akihiro Suda
 
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into ContainerdAkihiro Suda
 

Más de Akihiro Suda (20)

20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_
 
20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdf20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdf
 
20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdf20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdf
 
[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless Podman[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless Podman
 
[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilion[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilion
 
[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilion[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilion
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
 
[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2
 
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
 
The internals and the latest trends of container runtimes
The internals and the latest trends of container runtimesThe internals and the latest trends of container runtimes
The internals and the latest trends of container runtimes
 
[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion
 
[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilion[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilion
 
[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?
 
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima
 
[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
 
[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10
 
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
 

Dockerからcontainerdへの移行

  • 1. Copyright(c)2022 NTT Corp. All Rights Reserved. Dockerからcontainerdへの移行 日本電信電話株式会社 ソフトウェアイノベーションセンタ 徳永 航平 須田 瑛大 NTT Tech Conference 2022 (March 23rd)
  • 2. Copyright(c)2022 NTT Corp. All Rights Reserved. Dockerの復習 2 ● docker composeで複数コンテナをまとめて管理 可能 ● コンテナ開発に有用な機能を提供するツール docker run -it --rm alpine docker build -t foo /dockerfile-dir docker push ghcr.io/ktock/myalpine:latest Build Ship Run ● Mac,WindowsではDocker Desktopを利 用可能 Build(イメージ作成) Run(コンテナ実行) レジストリ Ship(コンテナ配布) イメージ 材料 コンテナ
  • 3. Copyright(c)2022 NTT Corp. All Rights Reserved. Dockerに関する最近の話題:Kubernetesでのdockershim非推奨化 3 kubectl apply runc スケジュールされたPodの管理 コンテナ実行状態の管理 Linux機能を使いコンテナの作成 ノード apiserver kubelet Pod割り当て コンテナ・イメージの管理 Docker (非推奨化) ● Kubernetes v1.23まではノード上で Dockerをコンテナランタイムとして利 用可能 ● Kubernetes v1.20からkubeletから Docker利用は非推奨に ● Kubernetes v1.24ではDockerのサポ ート(dockershim)を削除予定 ○ 今後独立のツールとしてMirantis 社によってメンテされる ○ https://github.com/Mirantis/cri-dockerd
  • 4. Copyright(c)2022 NTT Corp. All Rights Reserved. Dockerに関する最近の話題:Docker Desktop有償化 4 ● Docker Desktop 有償化:”professional use in larger businesses”対象 • https://www.docker.com/blog/updating-product-subscriptions/ ● GUI版のDocker Desktopは有償だが、Docker CLI + Docker EngineのVM 内での利用は有償化されない • https://www.docker.com/pricing/faq ■ “Can I just install the Docker CLI instead of using Docker Desktop?”
  • 5. Copyright(c)2022 NTT Corp. All Rights Reserved. 5 containerdによるコンテナ管理
  • 6. Copyright(c)2022 NTT Corp. All Rights Reserved. containerdによるコンテナ管理 6 ● オープンソースなコンテナランタイム(CNCF graduatedプロジェクト) ● Docker/Moby、Kubernetesサービス(EKS、AKS、GKE)で使われるな ど、採用が拡大している https://github.com/containerd/containerd 引用元:https://sysdig.com/blog/sysdig- 2021-container-security-usage-report/ (2021年1月) 引用元: https://www.cncf.io/report s/cncf-annual-survey-2021/ (2022年2月)
  • 7. Copyright(c)2022 NTT Corp. All Rights Reserved. containerdとDocker、Kubernetesの関係 7 コンテナ管理運用基盤 Linuxカーネル コンテナ開発ツール コンテナ管理運用基盤 Kubernetes 従来 分散環境上のコンテナ管理 ノード上のコンテナ管理 containerd コンテナ実行状態の管理 runc カーネルの機能を使いコンテナ作成 コンテナ開発ツール Linuxカーネル containerd 汎用のコンテナ管理フレームワーク runc カーネルの機能を使いコンテナ作成 nerdctl (containerdの一部) コンテナ作成/実行/配布など 開発支援機能の提供 Kubernetes 分散環境上のコンテナ管理 高速rootless、eStargzなど先進 機能を備えたDocker互換ツール Docker 近年 containerd だけで Docker の機能をほぼカバー containerdを直接利用 Docker
  • 8. Copyright(c)2022 NTT Corp. All Rights Reserved. nerdctl:Docker互換なcontainerd用CLI 8 ● Docker風のUI/UX(composeもサポート) https://github.com/containerd/nerdctl ● 先進機能 ● 高速イメージpull(eStargz) ● P2Pイメージ共有(IPFS) ● 暗号化イメージ (OCIcrypt) ● イメージへの署名/検証(cosign) ● 高速rootless(bypass4netns) nerdctl CLI containerd API nerdctl run -it --rm alpine nerdctl build -t foo /dockerfile-dir nerdctl push ghcr.io/ktock/myalpine:latest nerdctl compose up
  • 9. Copyright(c)2022 NTT Corp. All Rights Reserved. containerdによるKubernetesでのコンテナ管理 9 ● 各ノード上でコンテナランタイムと してcontainerdを利用可能 ● kubeletはContainer Runtime Interface(CRI)経由で containerdを直接利用 ● EKS、AKS、GKEなどマネージド Kubernetesサービスでも利用可能 kubectl apply runc スケジュールされたPodの管理 Pod、コンテナ、イメージの管理 Linux機能を使いコンテナの作成 ノード apiserver kubelet CRI Pod割り当て
  • 10. Copyright(c)2022 NTT Corp. All Rights Reserved. GKEでのcontainerdへの移行 10 https://cloud.google.com/kubernetes-engine/docs/deprecations/docker-containerd https://cloud.google.com/kubernetes-engine/docs/how-to/migrate-containerd ● Dockerベースのノードイメージは1.24以降でサポートされなくなる ● containerdベースのノードイメージ(Linuxノードでは1.19、Windowsでは1.21 からデフォルト)に移行する必要がある Dockerノードイメージ Containerdノードイメージ Dockerを含むContainer-Optimized OS (cos) Containerdを含むContainier-Optimized OS (cos_containerd) Dockerを含むUbuntu(ubuntu) Containerdを含むUbuntu(ubuntu_containerd) Dockerを含むWindows Server LTSC(windows_ltsc) Containerdを含むWindows Server LTSC(windows_ltsc_containerd) Dockerを含むWindows Server SAC(windows_sac) Containerdを含むWindows Server SAC(windows_sac_containerd) ● 移行作業のためのスクリプト`find-nodepools-to-migrate.sh`が提供されている • クラスタを解析して、移行のための推奨コマンドを示してくれる https://github.com/GoogleCloudPlatform/k8s-node-tools/blob/HEAD/migrating-to-containerd/find-nodepools-to- migrate.sh ● 推奨されたコマンド(`gcloud container clusters upgrade`)を使ってcontainerdに 移行可能
  • 11. Copyright(c)2022 NTT Corp. All Rights Reserved. EKSでのcontainerdへの移行 11 https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/dockershim-deprecation.html https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/eks-optimized-ami.html#containerd-bootstrap ● Amazon Linux AMIは1.21現在でDockerがデフォルトランタイム ● バージョン1.23以降、含まれるランタイムはcontainerdのみになる ● 1.21現在までのAMIでも、ブートストラップフラグ` --container-runtime containerd`でcontainerdノードを利用可能 apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code managedNodeGroups: - name: my-nodegroup ami: eks-optimized-AMI-ID overrideBootstrapCommand: | #!/bin/bash set -eu -o pipefail /etc/eks/bootstrap.sh my-cluster --container-runtime containerd ● あるいは、ランタイムとしてcontainerdを利用しているBottlerocket AMIまたはEKS Fargateに移行するのも可 ● WindowsノードでもKubernetes 1.20より新しいバージョンでcontainerdを選択可能 ○ https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#containerd-bootstrap-windows
  • 12. Copyright(c)2022 NTT Corp. All Rights Reserved. AKSでのcontainerdへの移行 12 https://docs.microsoft.com/en-us/azure/aks/cluster-configuration#container-runtime-configuration ● LinuxノードではKubernetes v1.19からcontainerdがランタイムとして使われている ● AKSのバージョンを`az aks upgrade`などで1.19以降にアップグレードすることで Linuxノードについてはcontainerdへ移行可能 ● とはいえすでに1.19以前はEOLのため、サポートされているAKS全バージョンでLinux ノードではcontainerdが使われていることになる ● Windowsノードでは1.20からcontainerdを利用可能。1.22以前のクラスタでは Dockerがデフォルト。1.23からはcontainerdがデフォルトになる。 ○ `az aks nodepool upgrade`などで移行可能:https://docs.microsoft.com/en-us/azure/aks/windows- container-cli#optional-using-containerd-with-windows-server-node-pools
  • 13. Copyright(c)2022 NTT Corp. All Rights Reserved. kubeadmでのcontainerdへの移行 13 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#initializing-your-control- plane-node ● ノードにDockerが稼働していればcontainerdも既に稼働している ● kubeadm(v1.23現在)はDockerを優先的に使用するので、明示的にcontainerdのソケ ットパス`--cri-socket=/run/containerd/containerd.sock`を指定する必要がある sudo kubeadm reset sudo kubeadm join 192.168.56.120:6443 --cri-socket=/run/containerd/containerd.sock --token <省略> --discovery-token-ca-cert-hash <省略> ● ここで、containerdのconfig(/etc/containerd/config.toml)に`disabled_plugins = [“cri”]`が指定されてないことを要確認
  • 14. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: イメージを作り直す必要はあるか? 14 A. No。既存のコンテナイメージがそのままcontainerdで使える。 標準準拠ランタイム Docker Docker BuildKit Kaniko イメージビルダ etc… etc… ● イメージには標準仕様があるのでcontainerd移行後も引き続き実行可能 標準準拠イメージ
  • 15. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: レジストリはそのまま使えるか? 15 A. Yes。ただしレジストリミラー等の設定は移行が必要。 ● レジストリには標準仕様があるのでcontainerd移行後も引き続き利用可能 ● ただし、`/etc/docker/`にレジストリクライアント関連の設定(ミラーや証明書など) をしていた場合は、`/etc/containerd/`で設定しなおす必要がある • 設定方法(containerd >= 1.5): https://github.com/containerd/containerd/blob/v1.6.1/docs/hosts.md 標準準拠レジストリ 標準準拠ランタイム Docker pull Docker BuildKit Kaniko イメージビルダ push etc… etc… 標準準拠イメージ
  • 16. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: ノードの作り直しは必要か? 16 ● GKE/EKS/AKSでは前述の通りノードの更新が必要。 ● kubeadmでは、厳密にはNo。運用上はYes。 • Dockerが稼働していればcontainerdも稼働している • しかしDockerを維持する理由がないならばDocker無 しでノードを作り直した方が良い containerd Docker Kubernetes (kubelet) runc クラウドの場合:Yes。 kubeadmの場合:厳密にはNo。運用上はYes。 A.
  • 17. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: ノードのデバッグに`docker`コマンドは使い続けられるか? 17 A. No。代わりにnerdctlが使える。 $ sudo nerdctl --namespace=k8s.io ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fe5fe717d05 k8s.gcr.io/pause:3.5 "/pause" 9 minutes ago Up k8s://kube-system/etcd-ktock 226a45b850fa k8s.gcr.io/kube-controller-manager:v1.23.4 "kube-controller-man…" 9 minutes ago Up k8s://kube-system/kube-controller-manager-ktock/kube-controller-manager ・・・ `--namespace=k8s.io`を指定するとKubernetesのコンテナをDocker同様のUIでデバッグ可能 ● 他にもノード上で利用可能なCLIはあるが、独特なUIに慣れが必要 • ctr: containerdに付属するデバッグ専用CLI。containerd APIに肉薄した操作(e.g. snapshots、contents)や、containerd自体のデバッグに有用。 • https://github.com/containerd/containerd/tree/main/cmd/ctr • crictl: Kubernetes SIG Nodeで開発されるCRI用CLI。YAMLファイルでPod,コンテ ナ,イメージを操作可能 • https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md
  • 18. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: ノードのデバッグに`docker`コマンドは使い続けられるか? 18 $ mkdir -p /tmp/ctx && cat <<EOF > /tmp/ctx/Dockerfile FROM alpine:3.15 CMD [ "sh", "-c", "while true ; do echo hello ; sleep 1 ; done" ] EOF $ sudo nerdctl --namespace k8s.io build -t foo /tmp/ctx $ kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: foo spec: containers: - name: foo image: foo imagePullPolicy: Never EOF $ kubectl logs foo hello `nerdctl build`を使ってノード上で イメージをビルドして実行することも可能 A. No。代わりにnerdctlが使える。
  • 19. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: ログ管理に影響はあるか? 19 A. ログ基盤がDocker依存の設定をもつ場合は修正の必要あり。 ● `/var/log/pods`のログフォーマットはDockerとCRIランタイムで異なる ● 非マネージドなログ基盤で、Docker用のパーサしか設定されていなかったり、Docker APIに依存してログ収集しているなど、Docker依存の設定がある場合は変更が必要 {"log":"Log line is here¥n","stream":"stdout","time":"2019-01-01T11:11:11.111111111Z"} https://docs.docker.com/config/containers/logging/json-file/ 2016-10-06T00:17:09.669794202Z stdout P log content 1 https://github.com/kubernetes/kubernetes/blob/9a8defda15e4c34e9c1989 75968d9619f48a0786/pkg/kubelet/kuberuntime/logs/logs.go#L125-L169 Dockerのログフォーマット CRIランタイム(containerd含)のログフォーマット
  • 20. Copyright(c)2022 NTT Corp. All Rights Reserved. FAQ: Pod内で`docker`コマンドは引き続き利用可能か? 20 ● GKE: Dockerに直接依存しないようワークロードをアップデートすべき。 • https://cloud.google.com/kubernetes-engine/docs/deprecations/docker-containerd#impact_of_migrating ● EKS: Docker socketをマウントするアプリケーションでは変更が必要になる。 • https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/dockershim-deprecation.html ● AKS: Dockerは利用不可。 • https://docs.microsoft.com/en-us/azure/aks/cluster-configuration#containerd-limitationsdifferences ● kubeadm: ノード上でCRIランタイムとしてcontainerdを使いつつ、Dockerも稼働させ ておけば引き続き可能。 Pod内でDockerデーモンを稼働させる場合:Yes ノード上のDockerに依存する場合:クラウドでは移行が推奨されている。 kubeadm利用時はYes。 A.
  • 21. Copyright(c)2022 NTT Corp. All Rights Reserved. Cluster FAQ: Pod内で`docker`コマンドは引き続き利用可能か? 21 BuildKit buildctl BuildKit BuildKit BuildKit Service BuildKit buildctl BuildKit BuildKit BuildKit buildctl + BuildKit kubectl Deployment+Service StatefulSet Job ランダムロードバランシング。 レジストリを介したキャッシ ュ共有により高速なビルドが 可能。 クライアント側でのロードバ ランシング。consistent hashを使えば効率的にロー カルキャッシュを活用可能。 ワンショットなビルド実行。 BuildKitデーモンの稼動が不 要。ローカルキャッシュはビ ルドのたびに削除。 Cluster Cluster Kubernetes上でのビルドにはBuildKitの利用も有用 https://github.com/moby/buildkit/tree/master/examples/kubernetes
  • 22. Copyright(c)2022 NTT Corp. All Rights Reserved. 22 containerd・nerdctlの持つ様々な機能
  • 23. Copyright(c)2022 NTT Corp. All Rights Reserved. containerd・nerdctlの持つ様々な機能 23 ● nerdctl コマンドの使い方は、docker コマンドの使い方とだいたい同じ ● 単に docker コマンドの置き換えを目指しているわけではなくて、コンテナ ランタイム関連の新機能を実験、普及展開するためのプラットフォームとし て開発している ○ 高速イメージpull(eStargz) ○ P2Pイメージ共有(IPFS) ○ 暗号化イメージ (OCIcrypt) ○ イメージへの署名/検証(cosign) ○ 高速rootless(bypass4netns)
  • 24. Copyright(c)2022 NTT Corp. All Rights Reserved. 高速なイメージPull(eStargz) 24 ● Lazy pulling: イメージのpull完了を待たずにコンテナを起動可能 ● eStargz: OCI仕様に後方互換のlazy pulling可能なイメージ形式 • lazy pulling非対応なランタイムでも通常のイメージとして扱える 0 10 20 30 40 50 estargz estargz-noopt legacy Start up time of python:3.7 (print “hello”) pull create run [se c] Figure from “Faster Container Image Distribution on a Variety of Tools with Lazy Pulling - Kohei Tokunaga & Tao Peng. KubeCon+CloudNativeCon North America 2021. https://sched.co/lV2a “ $ nerdctl –-snapshotter=stargz run –it ghcr.io/stargz-containers/python:3.9-esgz https://github.com/containerd/nerdctl/blob/master/docs/stargz.md ✅nerdctl ✅Kubernetes
  • 25. Copyright(c)2022 NTT Corp. All Rights Reserved. P2Pイメージ共有(IPFS) 25 nerdctl push ipfs://ubuntu:20.04 peer peer IPFS nerdctl run ipfs://bafkreicq4dg6nkef5ju422ptedcwfz6kcvpvvhuqeykfrwq5krazf3muze ● P2Pデータ共有プロトコルのIPFSを使ってコンテナイメージをP2P共有可能 ● nerdctl各コマンドで”ipfs://CID“の形式でIPFS上のイメージを利用可能 ● eStargzのlazy pulling、OCICryptなども依然利用可能 Experimental https://github.com/containerd/nerdctl/blob/master/docs/ipfs.md ✅nerdctl ✅Kubernetes ※Kubernetesではnerdctl付 属のOCI互換プロキシを用いる
  • 26. Copyright(c)2022 NTT Corp. All Rights Reserved. イメージ暗号化・復号化(OCICrypt) 26 ● キーペアを用いて、イメージの暗号化が可能 ● 暗号化したイメージはcontainerdでPullして復号、実行できる Registry image image 公開鍵 秘密鍵 イメージの暗号化 イメージの復号 nerdctl image encrypt nerdctl image decrypt https://github.com/containerd/nerdctl/blob/master/docs/ocicrypt.md ✅nerdctl ✅Kubernetes
  • 27. Copyright(c)2022 NTT Corp. All Rights Reserved. イメージ署名・検証(cosign) 27 ● 署名を用いて、イメージが改竄されていないかを検証できる ● Notaryに似ているが、最近はcosignが流行りつつある Registry image 秘密鍵 公開鍵 イメージの署名 イメージの検証 nerdctl push --sign=cosign nerdctl pull --verify=cosign https://github.com/containerd/nerdctl/blob/master/docs/cosign.md ✅nerdctl ✅Kubernetes ※Kubernetesではcosign付属 のadmission controllerを使用 image
  • 28. Copyright(c)2022 NTT Corp. All Rights Reserved. 高速rootless(bypass4netns) 28 ● rootlessコンテナでもrootfulと同等以上のNW性能を得られる ● rootlessコンテナに従来存在したユーザ空間TCP/IPスタック(slirp4netns)のネットワー クオーバヘッドを回避 • SECCOMP_IOCTL_NOTIF_ADDFD で、bind(2) や connect(2) をホスト側にバイパ スしている Experimental 引用元:”インターンレポート: RootlessコンテナのTCP/IP高速化”. https://medium.com/nttlabs/accelerating-rootless-container-network-29d0e908dda4 https://github.com/containerd/nerdctl/blob/master/docs/rootless.md ✅nerdctl
  • 29. Copyright(c)2022 NTT Corp. All Rights Reserved. その他 29 ● 完全にread-onlyなmountが出来る: nerdctl run -v /mnt:/mnt:rro ○ docker run -v /mnt:/mnt:ro だと、/mnt/usb とかread-only にならない ● nerdctl runの--netは複数指定できる (コンテナを複数ネットワークに同時接続できる) ○ DockerでもComposeでなら同じことが出来るが、docker runでは出来ない ● FreeBSD コンテナ (jails) も少しだけ動く ○ ネットワークには未対応 ● CNIやOCIなどの標準への準拠度が高い ○ nerdctl はCNI対応、docker は未対応 ○ nerdctl save/nerdctl load はOCI Image SpecとDocker Image Specの両方対応、 docker save/docker load はOCI Image Spec未対応
  • 30. Copyright(c)2022 NTT Corp. All Rights Reserved. containerdに移行すると出来なくなること 30 ● Kubernetesノード上での docker コマンド使用 ○ nerdctlを代わりに使用できる ● Docker REST API ○ Docker REST API に頼るアプリは動かない ○ docker コマンドを直に exec するアプリは、nerdctl を exec するように書き換 えるだけで動く ● Docker Swarm ○ コンテナオーケストレーションにはKubernetesやNomadを利用できる nerdctl –-namespace=k8s.io build -t foo:1.2.3 .
  • 31. Copyright(c)2022 NTT Corp. All Rights Reserved. 31 containerd・nerdctlへの移行方法 ※Kubernetesの場合の移行方法は前述 (スライド10-13)
  • 32. Copyright(c)2022 NTT Corp. All Rights Reserved. containerd・nerdctl への移行(linux) 32 https://github.com/containerd/nerdctl/releases $ sudo systemctl enable --now containerd $ sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine $ containerd-rootless-setuptool.sh install $ nerdctl run -d --name nginx -p 8080:80 nginx:alpine Rootful Rootless tarballにcontainerd、nerdctl、runc等のバイナリ一式が全て含まれている (/usr/local などのパスに展開)
  • 33. Copyright(c)2022 NTT Corp. All Rights Reserved. containerd・nerdctl への移行(macOS) 33 ● Lima (macOS用のWSL2のようなもの)に containerd・nerdctl も付属 ● ホストのホームディレクトリが、ゲストからも見える ● ゲストのlocalhostに、ホストからもlocalhostとしてアクセスできる https://github.com/lima-vm/lima $ brew install lima $ limactl start $ lima nerdctl run …
  • 34. Copyright(c)2022 NTT Corp. All Rights Reserved. containerd・nerdctl への移行(macOS) 34 ● Rancher Desktop にも containerd・nerdctl が付属 ○ 内部的にはやはりLima ○ GUI付き ○ https://rancherdesktop.io/
  • 35. Copyright(c)2022 NTT Corp. All Rights Reserved. containerd・nerdctl への移行(Windows) 35 ● LinuxコンテナはWSL2上で動かせる ● Rancher Desktop for Windows にも containerd・nerdctl が付属 ● 内部的にはWSL2 ● Windowsネイティブなコンテナにも対応 (nerdctlではexperimental) ● https://github.com/containerd/nerdctl/issues/28
  • 36. Copyright(c)2022 NTT Corp. All Rights Reserved. まとめ 36 ● Docker から containerd への移行が進んでいる ● kubeadmの場合は、--cri-socket=/run/containerd/containerd.sock を渡すだけ ● 従来の Docker イメージはそのまま使える ● docker コマンドの代わりに nerdctl (contaiNERD CTL) が使える ○ ただの docker コマンドの置き換えではなく、いろいろな新機能がついている (高速イメージPull、暗号化、...) ○ macOS でもすぐ始められる (Windowsの場合はWSL2) $ brew install lima $ limactl start $ lima nerdctl run …