[[419814]] 先ほど、ctr を使用して containerd イメージ コンテナーを管理する方法を紹介しました。ただし、docker cli の使用に慣れているため、ctr は使いにくいかもしれません。すべてのユーザーが containerd に切り替えられるように、コミュニティでは新しいコマンドライン ツール nerdctl (https://github.com/containerd/nerdctl) を提供しています。 nerdctl は、docker cli スタイルと互換性があり、docker compose 構文と直接互換性のある containerd クライアント ツールです。これにより、ローカル開発、テスト、またはスタンドアロン コンテナーのデプロイメントとして containerd を直接使用する効率が大幅に向上します。 インストール対応する圧縮パッケージを GitHub リリース ページから直接ダウンロードし、PATH パスに解凍することもできます。
- # containerdがインストールされていない場合は、nerdctl - full- <VERSION>-linux-amd64.tar.gzパッケージをダウンロードしてインストールできます。
- ➜ ~ wget https://github.com/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz
- # 制限がある場合は、ダウンロードを高速化するために次のURLに置き換えることもできます
- # wget https://download.fastgit.org/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz
- ➜ ~ mkdir -p /usr/ local /containerd/bin/ && tar -zxvf nerdctl-0.11.0-linux-amd64.tar.gz nerdctl && mv nerdctl /usr/ local /containerd/bin/
- ➜ ~ ln -s /usr/ローカル/containerd/bin/nerdctl /usr/ローカル/bin/nerdctl
- ➜ ~ nerdctl バージョン
- クライアント:
- バージョン: v0.11.0
- Gitコミット: c802f934791f83dacf20a041cd1c865f8fac954e
-
- サーバ:
- コンテナ:
- バージョン: v1.5.5
- リビジョン: 72cec4be58a9eb6b2910f5d10f1c01ca47d231c0
インストールが完了したら、nerdctl コマンドライン ツールの使用方法を学習します。 注文実行と実行nerdctl 実行 docker run と同様に、nerdctl run コマンドを使用してコンテナを実行できます。次に例を示します。 - ➜ ~ nerdctl run -d -p 80:80
- docker.io/library/nginx:alpine: 解決済み |++++++++++++++++++++++++++++++++++++++++++++|
- インデックス-sha256:bead42240255ae1485653a956ef41c9e458eb077fcb6dc664cbc3aa9701a05ce: 完了 |++++++++++++++++++++++++++++++++++++++++| manifest-sha256:ce6ca11a3fa7e0e6b44813901e3289212fc2f327ee8b1366176666e8fb470f24: 完了 |++++++++++++++++++++++++++++++++++++++++| config-sha256:7ce0143dee376bfd2937b499a46fb110bda3c629c195b84b1cf6e19be1a9e23b: 完了 |++++++++++++++++++++++++++++++++++++++++|
オプションのパラメータは、-i、-t、--cpus、--memory などの docker run のパラメータと基本的に同じです。使用可能なコマンド オプションを取得するには、nerdctl run --help を使用できます。 - ➜ ~ nerdctl 実行
- 名前:
- nerdctl run -新しいコンテナでコマンドを実行する
-
- 使用法:
- nerdctl run [コマンド オプション] [引数...]
-
- オプション:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
nerdctl 実行 exec コマンドを使用して、コンテナ関連のコマンドを実行することもできます。次に例を示します。 - ➜ ~ nerdctl exec -it nginx /bin/sh
- / #日付
- 2021年8月19日木曜日 06:43:19 UTC
- / #
コンテナ管理nerdctl ps: コンテナの一覧表示 すべてのコンテナを一覧表示するには、nerdctl ps コマンドを使用します。 - ➜ ~ nerdctl ps
- コンテナID イメージ コマンド 作成ステータス ポート名
- 6e489777d2f7 docker.io/library/nginx:alpine "/docker-entrypoint.…" 10 分前 0.0.0.0:80->80/tcp nginx が起動しました
-a オプションを使用して、すべてのコンテナのリストを表示することもできます。デフォルトでは、実行中のコンテナのみが表示されます。ただし、nerdctl ps コマンドは、docker ps の --filter、--format、--last、--size などのオプションを実装していないことに注意してください。 nerdctl inspect: コンテナに関する詳細情報を取得します。 - ➜ ~ nerdctl で nginx を検査する
- [
- {
- 「ID」 : 「6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8」 、
- 「作成日」 : 「2021-08-19T06:35:46.403464674Z」 、
- 「パス」 : 「/docker-entrypoint.sh」 、
- 「引数」 : [
- 「nginx」 、
- 「-g」 、
- 「デーモンオフ」
- ]、
- "州" : {
- 「ステータス」 : 「実行中」 、
- 「実行中」 : true 、
- 「一時停止」 : false 、
- 「ピッド」 :2002年
- 「終了コード」 : 0,
- 「終了日時」 : 「0001-01-01T00:00:00Z」
- },
- 「イメージ」 : 「docker.io/library/nginx:alpine」 、
- "ResolvConfPath" : "/var/lib/nerdctl/1935db59/containers/default/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8/resolv.conf" 、
- 「ログパス」 : 「/var/lib/nerdctl/1935db59/containers/default/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c 2270b30eff1806bcf8/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8-json.log」 、
- 「名前」 : 「nginx」 、
- 「ドライバー」 : 「overlayfs」 、
- 「プラットフォーム」 : 「linux」 、
- 「AppArmorProfile」 : 「nerdctl-default」 、
- 「ネットワーク設定」 : {
- 「ポート」 :{
- 「80/tcp」 :[
- {
- 「ホストIP」 : 「0.0.0.0」 、
- 「ホストポート」 : 「80」
- }
- ]
- },
- "グローバルIPv6アドレス" : "" ,
- "グローバルIPv6プレフィックス長" : 0,
- 「IPアドレス」 : 「10.4.0.3」 、
- 「IPプレフィックス長」 : 24,
- "MacAddress" : "f2:b1:8e:a2:fe:18" ,
- 「ネットワーク」 :{
- "不明-eth0" : {
- 「IPアドレス」 : 「10.4.0.3」 、
- 「IPプレフィックス長」 : 24,
- "グローバルIPv6アドレス" : "" ,
- "グローバルIPv6プレフィックス長" : 0,
- "Macアドレス" : "f2:b1:8e:a2:fe:18"
- }
- }
- }
- }
- ]
表示される結果は基本的にdockerinspectの結果と同じであることがわかります。 nerdctl logs: コンテナログを取得する コンテナログの表示はよく使う機能です。 nerdctl logs を使用してログ データを取得することもできます。 - ➜ ~ nerdctl ログ -f nginx
- ......
- 2021/08/19 06:35:46 [お知らせ] 1#1: ワーカープロセスを開始
- 2021/08/19 06:35:46 [通知] 1#1: ワーカープロセス32を開始
- 2021/08/19 06:35:46 [通知] 1#1: ワーカープロセス33を開始
-f、-t、-n、--since、--until オプションもサポートします。 nerdctl stop: コンテナを停止する - ➜ ~ nerdctl で nginx を停止する
- nginx
- ➜ ~ nerdctl ps
- コンテナID イメージ コマンド 作成ステータス ポート名
- ➜ ~ nerdctl ps -a
- コンテナID イメージ コマンド 作成ステータス ポート名
- 6e489777d2f7 docker.io/library/nginx:alpine "/docker-entrypoint.…" 20 分前 0.0.0.0:80->80/tcp nginx が起動しました
nerdctl rm: コンテナを削除する - ➜ ~ nerdctl rm nginx
- 実行中のコンテナ f4ac170235595f28bf962bad68aa81b20fc83b741751e7f3355bd77d8016462d を削除することはできません。コンテナの取り外しや 強制的に削除
- ➜ ~ nerdctl rm -f ginx
- nginx
- ➜ ~ nerdctl ps
- コンテナID イメージ コマンド 作成ステータス ポート名
強制的に削除するには、-f または --force オプションを使用することもできます。 画像管理nerdctl イメージ: 画像リスト - ➜ ~ nerdctl 画像
- リポジトリ タグ イメージ ID 作成サイズ
- アルパイン 最新 eb3e4e175ba6 6日前 5.9 MiB
- nginx alpine bead42240255 29 分前 16.0 KiB
また、--all、--digests、--filter、--format など、docker イメージの一部のオプションは実装されていないことに注意してください。 nerdctl pull: イメージをプルする - ➜ ~ nerdctl イメージ rm busybox
- タグなし: docker.io/library/busybox:latest@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
- 削除済み: sha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373
- docker.io/library/busybox:latest: 解決済み |++++++++++++++++++++++++++++++++++++++++++++|
- インデックス-sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60: 完了 |++++++++++++++++++++++++++++++++++++++++|
- manifest-sha256:dca71257cd2e72840a21f0323234bb2e33fea6d949fa0f21c5102146f583486b: 完了 |++++++++++++++++++++++++++++++++++++++++| config-sha256:69593048aa3acfee0f75f20b77acb549de2472063053f6730c4091b53f2dfb02: 完了 |++++++++++++++++++++++++++++++++++++++++++++|レイヤー-sha256:b71f96345d44b237decc0c2d6c2f9ad0d17fde83dad7579608f1f0764d9686f2: 完了 |++++++++++++++++++++++++++++++++++++++++++++|経過時間: 5.7 秒 合計: 752.8 (132.0 KiB/秒)
nerdctl push: 画像をプッシュ もちろん、イメージをプッシュする前に、nerdctl login コマンドを使用してイメージ リポジトリにログインし、プッシュ操作を実行することもできます。 ログインするには nerdctl login --username xxx --password xxx を使用し、ログアウトするには nerdctl logout を使用します。 nerdctl タグ: ミラー タグ イメージのエイリアス イメージを作成するには、tag コマンドを使用します。 - ➜ ~ nerdctl 画像
- リポジトリ タグ イメージ ID 作成サイズ
- busybox 最新 0f354ec1728d 6分前 1.3 MiB
- nginx alpine bead42240255 41 分前 16.0 KiB
- ➜ ~ nerdctl tag nginx:alpine harbor.k8s。ローカル/course/nginx:alpine
- ➜ ~ nerdctl 画像
- リポジトリ タグ イメージ ID 作成サイズ
- busybox 最新 0f354ec1728d 7分前 1.3 MiB
- nginx alpine bead42240255 41 分前 16.0 KiB
- ハーバー.k8s。ローカル/course/nginx alpine bead42240255 2 秒前 16.0 KiB
nerdctl save: イメージをエクスポート save コマンドを使用して、イメージを tarball としてエクスポートします。 - ➜ ~ nerdctl save -o busybox.tar.gz busybox:latest
- ➜ ~ ls -lh busybox.tar.gz
- -rw-r
nerdctl rmi: 画像を削除 - ➜ ~ nerdctl rmi ビジーボックス
- タグなし: docker.io/library/busybox:latest@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
- 削除済み: sha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373
nerdctl load: イメージをインポートする load コマンドを使用して、上記でエクスポートしたイメージを再度インポートします。 - ➜ ~ nerdctlロード-i busybox.tar.gz
- docker.io/library/busybox:latest (sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60) を解凍しています...完了
インポートする圧縮パッケージを指定するには、-i または --input オプションを使用します。 イメージ構築イメージ構築は私たちの日常生活において非常に重要な要件です。 ctr にはイメージをビルドするコマンドがないことはわかっていますが、現在は Docker を使用していません。では、イメージをビルドするにはどうすればよいでしょうか?幸いなことに、nerdctl は nerdctl build などのイメージ構築コマンドを提供します。 nerdctl build: Dockerfileからイメージをビルドする たとえば、nginx イメージをカスタマイズし、以下に示すように Dockerfile ファイルを作成します。 - nginxから
- RUN echo 'これは、nerdctl を使用して containerd に基づいて構築された nginx イメージです' > /usr/share/nginx/html/ index .html
次に、ファイルが配置されているディレクトリでイメージ構築コマンドを実行します。 - ➜ ~ nerdctl build -t nginx:nerdctl -f Dockerfile 。
- FATA[0000] `buildctl`をインストールし、 ` buildkitd` を実行する必要があります。https ://github.com/moby/buildkit を参照してください: exec : "buildctl" : 実行ファイルが$PATHに見つかりません
buildctl をインストールして buildkitd を実行することを要求するエラー プロンプトが表示されます。これは、nerdctl build がビルドキット ツールに依存しているためです。 ビルドキット プロジェクトは、OCI 標準イメージの構築をサポートする Docker のオープン ソース ビルド ツールキットでもあります。主に以下の部分が含まれます。 - サーバーbuildkitd: 現在、runcとcontainerdをワーカーとしてサポートしています。デフォルトはruncですが、ここではcontainerdを使用します。
- クライアントbuildctl: Dockerfileを解析し、ビルドリクエストをサーバーbuildkitdに送信する役割を担う
Buildkit は典型的な C/S アーキテクチャです。クライアントとサーバーは同じサーバー上に存在しない可能性があります。イメージをビルドする場合、nerdctl は buildkitd のクライアントとしても機能するため、buildkitd をインストールして実行する必要があります。 それではまずビルドキットをインストールしましょう: - ➜ ~ wget https://github.com/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz
- # 制限がある場合は、ダウンロードを高速化するために次のURLに置き換えることもできます
- # wget https://download.fastgit.org/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz
- ➜ ~ tar -zxvf buildkit-v0.9.0.linux-amd64.tar.gz -C /usr/ローカル/containerd/
- ビン/
- bin/ビルドctl
- bin/buildkit-qemu-aarch64
- bin/buildkit-qemu-arm
- bin/buildkit-qemu-i386
- bin/buildkit-qemu-mips64
- bin/buildkit-qemu-mips64el
- bin/buildkit-qemu-ppc64le
- bin/buildkit-qemu-riscv64
- bin/buildkit-qemu-s390x
- bin/buildkit-runc
- bin/buildkitd
- ➜ ~ ln -s /usr/ローカル/containerd/bin/buildkitd /usr/ローカル/bin/buildkitd
- ➜ ~ ln -s /usr/ローカル/containerd/bin/buildctl /usr/ローカル/bin/buildctl
ここでは、Systemd を使用して buildkitd を管理し、次の systemd ユニット ファイルを作成します。 - ➜ ~ cat /etc/systemd/system/buildkit.service
- [ユニット]
- 説明=ビルドキット
- ドキュメント=https://github.com/moby/buildkit
-
- [サービス]
- ExecStart=/usr/ローカル/bin/buildkitd
-
- [インストール]
- WantedBy =マルチユーザー.ターゲット
次にbuildkitdを起動します。 - ➜ ~ systemctlデーモンリロード
- ➜ ~ systemctl ビルドキットを有効にする
- /etc/systemd/system/multi- user .target.wants/buildkit.service → /etc/systemd/system/buildkit.service のシンボリックリンクを作成しました。
- ➜ ~ systemctl ステータスビルドキット
- ● buildkit.service - ビルドキット
- ロード済み: ロード済み (/etc/systemd/system/buildkit.service; 有効; ベンダープリセット: 有効)
- メモリ: 8.6M
- Cグループ: /system.slice/buildkit.service
- └─5779 /usr/ローカル/bin/buildkitd
-
- 8月19日 16:03:10 ydzsio systemd[1]: BuildKitを開始しました。
- 8月19日 16:03:10 ydzsio buildkitd[5779]:時間= "2021-08-19T16:03:10+08:00" レベル=警告メッセージ= 「ホストネットワークをデフォルトとして使用しています」
- 8月19日 16:03:10 ydzsio buildkitd[5779]:時間= "2021-08-19T16:03:10+08:00" レベル=info msg= "作業者 \"euznuelxhxb689bc5of7pxmbc\" が見つかりました、ラベル>
- 8月19日 16:03:10 ydzsio buildkitd[5779]:時間= "2021-08-19T16:03:10+08:00" レベル=info msg= "ワーカー 1 人が見つかりました。デフォルト =\" euznuelxhxb689bc5of7pxm>
- 8月19日 16:03:10 ydzsio buildkitd[5779]:時間= "2021-08-19T16:03:10+08:00" level =warning msg= 「現在、デフォルトのワーカーのみ使用できます。」
- 8月19日 16:03:10 ydzsio buildkitd[5779]:時間= "2021-08-19T16:03:10+08:00" レベル=info msg= "/run/buildkit/buildkitd.sock でサーバーを実行しています"
- 〜
それでは、イメージを再構築してみましょう。 nerdctlはイメージを構築します ビルドが完了したら、イメージが正常にビルドされたかどうかを確認します。 - ➜ ~ nerdctl 画像
- 警告[0000] 解析できないイメージ名 "オーバーレイfs@sha256:d5b9b9e4c930f30340650cb373f62f97c93ee3b92c83f01c6e00b7b87d62c624"
- リポジトリ タグ イメージ ID 作成サイズ
- nginx 最新 4d4d96ac750a 4 分前 16.0 KiB
- nginx nerdctl d5b9b9e4c930 約1分前 24.0 KiB
- d5b9b9e4c930 約1分前 24.0 KiB
構築したnginx:nerdctlイメージがすでに存在していることがわかりますが、警告メッセージWARN[0000] 解析できないイメージ名 "xxx" が表示されます。画像リストには、作成した画像 ID と同じ空の画像タグを持つ画像があることもわかります。この問題は、nerdctl github の問題にも記載されています: https://github.com/containerd/nerdctl/issues/177 ですが、今のところ修正はありません。幸いなことに、これは単なる⚠️であり、使用には影響しません。 次に、上記で作成したイメージを使用して、テスト用のコンテナを起動します。 - ➜ ~ nerdctl run -d -p 80:80
- f8f639cb667926023231b13584226b2c7b856847e0a25bd5f686b9a6e7e3cacd
- ➜ ~ nerdctl ps
- コンテナID イメージ コマンド 作成ステータス ポート名
- f8f639cb6679 docker.io/library/nginx:nerdctl "/docker-entrypoint.…" 1秒前 0.0.0.0:80->80/tcp nginx が起動しました
- ➜ ~ ローカルホストをカールする
- これは、 containerdをベースにした nerdctl ビルドの nginx イメージです。
このように、nerdctl + buildkitd を使用してコンテナ イメージを簡単にビルドできます。 もちろん、スタンドアロン環境で Docker Compose を使用したい場合は、この機能と互換性を保つために containerd モードで nerdctl を使用することもできます。同様に、nerdctl compose、nerdctl compose up、nerdctl compose logs、nerdctl compose build、nerdctl compose down などのコマンドを使用して Compose サービスを管理できます。このように、containerd と nerdctl を buildkit などのツールと組み合わせて使用すると、イメージ構築とイメージ コンテナにおける docker の管理機能を完全に置き換えることができます。 |