Docker Hub レジストリの IPv6 サポートが一般提供開始

世界がますます相互接続されるようになるにつれて、インターネットは増加するデバイスとユーザーをサポートすることが不可欠です。 そこで登場するのが IPv6 です。

明るい青の背景にネットワーク線と青い円でipv6テキストを示すグラフィック

IPv6とは何ですか、そしてそれはDockerと何の関係がありますか? 

IPv6は、インターネットプロトコルの最新バージョンであり、デバイスがインターネットを介して相互に通信できるようにするシステムです。 これは、使用可能なアドレスが不足している以前のバージョンの IPv4 の制限に対処するように設計されています。 

Dockerがより多くの顧客をサポートするにつれて、これは、IPv6のみのネットワークなど、さまざまなユースケースをサポートする必要があることを意味します。 本日、Docker Hub Registry、Docker Docs 、および Docker Scout エンドポイントの IPv6 サポートの一般提供を発表できることを嬉しく思います。 

なぜIPv6を採用するのですか? 

コミュニティから、 Docker のサービスとしてのソフトウェア (SaaS) エンドポイントを効率的かつ効果的に動作させるには、IPv6 のサポートが必要であるという声が寄せられています。これまで、IPv6 のみのネットワークでは、Docker の SaaS リソースの一部と対話するために追加のツールが必要でした。 これはもはや当てはまりません。 これで、NAT64ゲートウェイと docker pull.

これはワークフローにとってどのような意味がありますか? 

これは私のお気に入りの部分です... 何もない! 🥳 IPv6 のベータ テスト中に、Docker Hub レジストリにアクセスするための新しいエンドポイントを導入しました。 これらはベータテスト専用であり、もはや必要ありません。 これで、IPv6専用ネットワーク、デュアルスタックネットワーク、またはIPv4専用ネットワークを使用している場合、これらのコマンドが機能します。

まず、Docker ハブにログインします。

docker login

次に、必要な画像をプルします。

docker pull alpine

Docker Hub のダウンロード レート制限はどのように機能しますか?

Docker Hub レジストリからコンテナー イメージをプルするときに認証を使用する場合、何も変更されません。 当社のサーバーは、HTTPリクエストで認証されたユーザーIDにレート制限データを適切に添付します。 

最初に実行 docker login してコマンドを認証 docker pull しない場合は、IP アドレスに基づいて要求をレート制限する必要があります。IPv4 アドレスの場合、これは IP ごとに行われます。 

IPv6 アドレスの場合、IPv6 では顧客が利用できる IP アドレス範囲がはるかに広いため、これはより難しい問題になります。 したがって、より大きな IP アドレス範囲に対応するために、IPv6 アドレスの最初の 64 ビットに対してレート制限を行います。 サーバーがソースとして使用するものの例は、次の HTTP 応答で返されるヘッダーで docker-ratelimit-source 確認できます。

$ curl https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest -I -XGET -6
HTTP/1.1 401 Unauthorized
content-type: application/json
docker-distribution-api-version: registry/2.0
www-authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:ratelimitpreview/test:pull"
date: Wed, 28 June 2023 01:06:44 GMT
content-length: 164
strict-transport-security: max-age=31536000
docker-ratelimit-source: 2601:245:c100:a71::

IPv6 が使用されていることを確認するにはどうすればよいですか? 

Docker Docsを参照したり、Dockerコンテナイメージをプルしたりするときに、トラフィックの監視などの tcpdump ネットワーク監視ソフトウェアを使用できます。

たとえば、Docker Hub レジストリからコンテナー イメージをプルするために使用するネットワークを確認するとします。

まず、お気に入りのターミナルでキャプチャを開始します tcpdump 。 このコマンドは、ローカルマシンとDockerハブサーバー間のすべてのネットワーク接続のログレコードを生成します。

sudo tcpdump host registry-1.docker.io -vv

別のターミナル ウィンドウで、Docker Hub からコンテナー イメージをプルします。

docker pull registry-1.docker.io/library/alpine:latest

次のような出力が表示されます。

🚀 sudo tcpdump host registry-1.docker.io -vv
tcpdump: data link type PKTAP
tcpdump: listening on pktap, link-type PKTAP (Apple DLT_PKTAP), snapshot length 524288 bytes
15:42:16.740577 IP6 (flowlabel 0xa0800, hlim 64, next-header TCP (6) payload length: 44) 2601:245:c100:a71:8454:86d0:52f1:d46f.62630 > 2600:1f18:2148:bc02:cfd8:db68:ea1f:277c.https: Flags [S], cksum 0xb80b (correct), seq 2539670618, win 65535, options [mss 1440,nop,wscale 6,nop,nop,TS val 4154959809 ecr 0,sackOK,eol], length 0
15:42:16.774831 IP6 (class 0x20, hlim 229, next-header TCP (6) payload length: 40) 2600:1f18:2148:bc02:cfd8:db68:ea1f:277c.https > 2601:245:c100:a71:8454:86d0:52f1:d46f.62630: Flags [S.], cksum 0x6b60 (correct), seq 4264170311, ack 2539670619, win 26847, options [mss 1440,sackOK,TS val 2058512533 ecr 4154959809,nop,wscale 12], length 0
…

タブ区切りデータの 2 列目を見ると、IPv6 が使用されていることを示すメッセージが表示されます IP6 。 さらに、出力に表示される IP アドレスは、 IPv4 形式ではなく IPv6 形式 です。IPアドレスにコロン(:)が含まれているかどうかを簡単に判断する方法は、IPv6です。 IP アドレスにピリオド (.) しかない場合は、IPv4 です。 🎉

今後の展開

Docker Hub Registry、Docker Docs、および Docker Scout エンドポイントに完全なデュアルスタック ネットワーク機能を提供できることを嬉しく思います。 デュアルスタック機能は、お客様に重要なパフォーマンスと信頼性のメリットを提供すると考えています。 新しいエンドポイントにデュアルスタックネットワークのサポートを提供する予定で、ユーザーに可能な限り最高のエクスペリエンスを提供するという取り組みの一環としてです。 

ローカル ネットワークを制御できる場合は、IPv6 を有効にして、Docker Hub レジストリ、Docker Docs、および Docker Scout エンドポイントが引き続き機能することを確認します。 IPv6のみのネットワークにアクセスできる場合は、ドキュメントページを試してみてください docker pull —それらはすべて以前と同じように機能し続けます。 

ハブフィードバックの GitHub 課題トラッカーを通じて、コミュニティからのフィードバックをお待ちしています。

さらに詳しく