-- 2020/9 追記 ----
似たツールとして、crane コマンドについても記事を書きました。
---------------------
Dockerを実行しているサーバがインターネットに接続されていないオフライン環境だと、docker pull ができず困ってしまう場合があります。そのような時、インターネットに繋がっている他の端末でイメージをダウンロードして、それをtarファイルにしてscpやらUSBメモリやら経由でコピーすればいいのですが、DockerイメージダウンロードするためだけにDockerをインストールするのが大袈裟なことがあります。
そのような場合、graboid コマンドを使うと簡単にイメージをDockerなしで手動ダウンロードすることができます。graboid は、GO言語で書かれたコマンドラインツールで、Linuxだけでなく、MacやWindowsにも対応しています。インストール方法は簡単で、GitHub のリリースページにバイナリが公開されているため、これをダウンロードし展開するだけです。
ここではWindowsを例に、試してみたいと思います。
ブラウザから、https://github.com/blacktop/graboid/releases/download/0.14.0/graboid_0.14.0_win_amd64.zip をダウンロードし、ダウンロードしたzipを展開すると、graboid.exe というファイルがでてきます。あとは、コマンドプロンプトを起動し、graboid.exe にDockerHubのイメージを引数で渡すだけです。ここでは、c:\tmp にgraboid.exe があると仮定し、busybox のDockerイメージをダウンロードしてみます。
※ プロキシ使用時は、HTTPS_PROXY 環境変数を定義しておけば良いみたい。
C:\>cd c:\tmp c:\tmp>graboid.exe busybox:latest [34m •[0m Initialize Registry [34mdomain[0m=https://index.docker.io [34mimage[0m=library/busybox [34mtag[0m=latest [34m •[0m getting auth token [34m •[0m GET CONFIG [34m •[0m GET LAYERS 716.06 KiB / 716.06 KiB [====================================================] 100.00% 0s [34m •[0m CREATE manifest.json [34m •[0m CREATE docker image tarball: library_busybox.tar [34m •[0m [1mSUCCESS![0m
Windowsのコマンドプロンプトだと、若干表示がおかしいですが、無事ダウンロードできようなので、ファイルを確認します。
c:\tmp>dir
ドライブ C のボリューム ラベルは Windows です
c:\tmp のディレクトリ
2018/09/18 11:02 <DIR> .
2018/09/18 11:02 <DIR> ..
1979/12/31 00:00 5,664,256 graboid.exe
2018/09/18 11:02 734,502 library_busybox.tar
2 個のファイル 6,398,758 バイト
2 個のディレクトリ 38,434,910,208 バイトの空き領域
上記の通り、library_busybox.tar ファイルが生成されました。あとは、これをDockerの動いているサーバにコピーし、インポートすれば作業完了です。
# docker load < library_busybox.tar
ちなみに、LinuxやCygwinのプロンプトだと、ダウンロード時の表示はこのように綺麗に表示されました。
$ ./graboid.exe busybox:latest • Initialize Registry domain=https://index.docker.io image=library/busybox tag=latest • getting auth token • GET CONFIG • GET LAYERS 716.06 KiB / 716.06 KiB [====================================================] 100.00% 0s • CREATE manifest.json • CREATE docker image tarball: library_busybox.tar • SUCCESS!