イントロダクション#
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 | 暗号化されたイメージはサポートされていません |