イントロダクション#
docker-tar は、Docker リポジトリからイメージをプルし、自動的に Tar パッケージにパッケージ化するためのツールです。
Github: docker-tar
特徴#
- Docker 環境不要:バイナリにすべての機能が含まれており、すぐに使用可能
- 複数のオペレーティングシステムで動作:関連するバイナリを提供し、
Linux
、Windows
、MacOS
、Solaris
、OpenBSD
などのオペレーティングシステムで使用可能、さらにサポートされているオペレーティングシステムはリリースを参照 - 複数のプロセッサアーキテクチャで動作:関連するバイナリを提供し、
amd64/x64
、i386/x86
、arm
、arm64
、mips
、ppc64
などのプロセッサアーキテクチャをサポート、PC やルーターを使用してこのツールを実行できます。さらにサポートされているアーキテクチャはリリースを参照 - イメージモードのダウンロード:イメージサイトからダウンロードしたイメージ tar はタグを付ける必要がなく、入力したイメージ名と一致させることができます
- ログインダウンロード:認証が必要な Docker リポジトリおよびそのイメージサイトをサポート
- イメージアーキテクチャの選択:複数のアーキテクチャを持つ Docker イメージのダウンロードを選択することをサポート
- Docker CLI に近いダウンロード結果:このツールでダウンロードした tar イメージファイルは、
docker pull
とdocker save
で保存したファイルと完全に一致します - ラボモード:DNS 汚染や SNI ブロッキングを解決するためのラボモードを提供し、アクセスできない Docker リポジトリサイトに直接接続するのを助けます
コマンドライン使用説明#
-action action
pull: イメージ tar ファイルをプルします。
list: プル可能なプロセッサアーキテクチャのイメージをリストします
-arch architecture
プルするイメージアーキテクチャを指定します (デフォルトは "amd64")
-image name
ダウンロードするイメージ情報
バージョンを指定しない場合は最新がデフォルト
デフォルトで DockerHub の Docker リポジトリを使用
nginx
home-assistant/home-assistant:stable
ghcr.io/home-assistant/home-assistant:stable
-output filename
出力する tar イメージのファイル名、指定しない場合はランダムに生成されます
-username username
Docker リポジトリ/イメージサイトにログインが必要な場合、ユーザー名を提供する必要があります
-password password
Docker リポジトリ/イメージサイトにログインが必要な場合、パスワードを提供する必要があります
-mirror string
イメージサイトを使用してイメージをダウンロードします
この方法では -image で指定された名前は変更されません
-lab
ラボモード、これを有効にすると、デフォルトのパラメータを使用して DNS 汚染と SNI ブロッキングを回避します。pull と list モードの両方で使用できます。
通常、デフォルト設定で十分です
-dns-servers ip list
ラボモードが有効な場合、このオプションが有効になります。
ツールにはリストが内蔵されており、入力内容は内蔵リストを上書きします。
DNS サーバーの設定オプションで、解決された IP アドレスである必要があり、カンマで区切ります
-dns-timeout int
ラボモードが有効な場合、このオプションが有効になります。
DNS 競合のタイムアウト時間を設定します。 (デフォルト値 2s)
-network network
ラボモードが有効な場合、このオプションが有効になります。
ip4: IPv4 のみを使用してイメージをダウンロード
ip6: IPv6 のみを使用してイメージをダウンロード
ip: IPv4 および IPv6 を使用してイメージをダウンロード (デフォルト値 "ip")
使用例#
対象イメージがサポートするアーキテクチャをリストする#
nginx がサポートするアーキテクチャを確認する
docker-tar -action list -image nginx
出力結果
利用可能なアーキテクチャ:
amd64
armv5
armv7
arm64v8
386
mips64le
ppc64le
s390x
イメージをダウンロードする(直接ダウンロード)#
この方法を使用するには HTTPS_PROXY 環境変数を設定する必要があります
nginx の armv7 アーキテクチャの nginx をダウンロード
docker-tar -action pull -image nginx -arch armv7 -output nginx.tar
出力結果
nginx:latest からプル中
[1/7]3d83c6df5858: ダウンロード中 100% |██████████████████████████████████████████████████| (24/24 MB, 1.9 MB/s)
[2/7]9260be83662e: ダウンロード中 100% |██████████████████████████████████████████████████| (37/37 MB, 2.0 MB/s)
[3/7]3058d76256fc: ダウンロード中 100% |██████████████████████████████████████████████████| (628/628 B, 986 kB/s)
[4/7]7888ef92f48d: ダウンロード中 100% |██████████████████████████████████████████████████| (956/956 B, 994 kB/s)
[5/7]5c27d4148f08: ダウンロード中 100% |██████████████████████████████████████████████████| (404/404 B, 400 kB/s)
[6/7]9c733a7e6553: ダウンロード中 100% |█████████████████████████████████████████████████| (1.2/1.2 kB, 1.5 MB/s)
[7/7]931fb3c7333d: ダウンロード中 100% |█████████████████████████████████████████████████| (1.4/1.4 kB, 2.5 MB/s)
出力ファイル: nginx.tar
イメージをダウンロードする(イメージサイト経由)#
nginx の armv7 アーキテクチャの nginx をダウンロード
docker-tar -action pull -image nginx -arch armv7 -output nginx.tar -mirror docker.xuanyuan.me
出力結果
nginx:latest からプル中
[1/7]9c733a7e6553: ダウンロード中 100% |█████████████████████████████████████████████████| (1.2/1.2 kB, 1.0 MB/s)
[2/7]931fb3c7333d: ダウンロード中 100% |█████████████████████████████████████████████████| (1.4/1.4 kB, 2.8 MB/s)
[3/7]3d83c6df5858: ダウンロード中 100% |███████████████████████████████████████████████████| (24/24 MB, 3.6 MB/s)
[4/7]9260be83662e: ダウンロード中 100% |███████████████████████████████████████████████████| (37/37 MB, 5.2 MB/s)
[5/7]3058d76256fc: ダウンロード中 100% |███████████████████████████████████████████████████| (628/628 B, 68 kB/s)
[6/7]7888ef92f48d: ダウンロード中 100% |██████████████████████████████████████████████████| (956/956 B, 107 kB/s)
[7/7]5c27d4148f08: ダウンロード中 100% |███████████████████████████████████████████████████| (404/404 B, 35 kB/s)
出力ファイル: nginx.tar
イメージをダウンロードする(ラボモードを使用して直接ダウンロード)#
nginx の armv7 アーキテクチャの nginx をダウンロード
docker-tar -action pull -image nginx -arch armv7 -output nginx.tar -lab
出力結果
nginx:latest からプル中
[1/7]3d83c6df5858: ダウンロード中 100% |███████████████████████████████████████████████████| (24/24 MB, 6.9 MB/s)
[2/7]9260be83662e: ダウンロード中 100% |████████████████████████████████████████████████████| (37/37 MB, 12 MB/s)
[3/7]3058d76256fc: ダウンロード中 100% |██████████████████████████████████████████████████| (628/628 B, 489 kB/s)
[4/7]7888ef92f48d: ダウンロード中 100% |██████████████████████████████████████████████████| (956/956 B, 671 kB/s)
[5/7]5c27d4148f08: ダウンロード中 100% |██████████████████████████████████████████████████| (404/404 B, 353 kB/s)
[6/7]9c733a7e6553: ダウンロード中 100% |█████████████████████████████████████████████████| (1.2/1.2 kB, 1.1 MB/s)
[7/7]931fb3c7333d: ダウンロード中 100% |█████████████████████████████████████████████████| (1.4/1.4 kB, 2.8 MB/s)
出力ファイル: nginx.tar
TODO#
- マルチレイヤーの同時ダウンロード
- 分割ダウンロードのサポート、Range をサポートするレスポンスに対して分割ダウンロードを実装
- Docker API の互換性(ContentType)
- コード構造、命名の調整
- より親しみやすいエラー出力
互換性状況(現在テスト済み)#
- DockerHub
- DockerHub イメージサイト
- ghcr.io
- ghcr.io イメージサイト
- quay.io (現在 application/vnd.docker.distribution.manifest.v1+prettyjws に適合していません)
- quay.io イメージサイト (現在 application/vnd.docker.distribution.manifest.v1+prettyjws に適合していません)
いくつかの役立つ情報#
リクエストフェーズ | サポートされる ContentType | その他 |
---|---|---|
トークン取得 | 応答ボディのみ処理し、タイプを無視 | アクセストークン, ユーザー名とパスワード(必要な場合): Basic |
すべてのアーキテクチャのイメージマニフェストインデックスを取得 | application/vnd.oci.image.index.v1+json | このタイプ以外の応答は直接終了します |
指定されたアーキテクチャのイメージマニフェストを取得 | application/vnd.oci.image.manifest.v1+json | 互換性のあるタイプも可 |
イメージ設定を取得 | application/vnd.oci.image.config.v1+json | 互換性のあるタイプも可 |
レイヤーをダウンロード | application/vnd.oci.image.layer.v1.tar application/vnd.oci.image.layer.v1.tar+gzip application/vnd.oci.image.layer.v1.tar+zstd application/vnd.oci.image.layer.nondistributable.v1.tar application/vnd.oci.image.layer.nondistributable.v1.tar+gzip application/vnd.oci.image.layer.nondistributable.v1.tar+zstd application/vnd.docker.image.rootfs.diff.tar application/vnd.docker.image.rootfs.diff.tar.gzip application/vnd.docker.image.rootfs.diff.tar.zstd | 暗号化されたイメージはサポートされていません |