Docker HubからDockerコマンドを使わずにイメージをダウンロードする
こんな状況に
ネットは繋がるけど、ユーザ権限が制限されてるWindowsからネットに繋がってない開発機に色々入れる必要がある。
Dockerは入れられたけどコンテナイメージは入れてなかったサーバにイメージ入れたいけど、使える端末はWindowsでOS機能が制限されていてDocker Desktopのデーモンが起動できない。
Docker Registory HTTP API
DockerにはAPIがあり、ざっくりと認証トークン取得→マニフェスト取得→BLOB取得→イメージ統合することでdocker save相当のイメージファイルがゲットできるようです。
マニフェスト取得までは自力でやってみましたが、既にPythonやPowerShellでもスクリプト化してくれている方がいたので、挫折ついでにいくつか使ってみました。
Dockerを使わずにDocker Imageを取得するツールあれこれ
. docker-drag(docker_pull.py)
今回試したものその1。
docker-dragというPythonスクリプト、requestsを入れる必要有り。
. download-frozen-image-v2.sh
今回試したものその2。
Mobyプロジェクトに含まれるDocker Imageダウンロード用シェルスクリプト、jqとgoコマンドを入れる必要有り。
. Scopeo
試してないものの、GitHubでスター2.4Kと人気なプロダクトのようです。
今回はWindows非対応とのことで除外。
お試し1:docker-drag
以下の環境でお試ししています。
Windows 10
Python v3.8.2
Pythonについてはここではあまり触れません、インストール後、環境変数設定しておいてください。
そもそもPythonインストールなんて出来ないよ!って方はお試し2を御覧ください。
Pythonのインストールが終わったら依存モジュールをインストールします。
pip install requests
pipで入れられない!って方はPyPiのHPから、requestsと依存モジュール4個をダウンロードして、それぞれローカルインストールしましょう。
requestsのリポジトリから依存関係は下記のとおりです。
'chardet>=3.0.2,<4', 'idna>=2.5,<3', 'urllib3>=1.21.1,<1.26,!=1.25.0,!=1.25.1', 'certifi>=2017.4.17'
環境が整ったらReadmeにある通り実行するだけです。
// python docker_pull.py [image名]:[タグ] python docker_pull.py mysql/mysql-server:8.0
プロキシ環境でhttps(Port 443) タイムアウトする場合はPythonのプロキシ設定をしましょう。
お試し2:download-frozen-image-v2.sh
以下の環境でお試ししています。
Windows 10
cygwin(WSLが利用不可な環境だったため)
jq
go 1.15
このシェルが、goとjqに依存するため、実行前にこの2つをセットアップしておきます。
goについては、Windows用のインストーラをダウンロードして予めインストールしておきます。
bash的なことをするためcygwinをインストールして、ライブラリを追加する時に、jqを追加しておきます。ほかは特に変更なくて大丈夫でした。
WSLで実行される場合はaptやらyumやらでjqを調達する必要があります。(試してない)
セッティングが終わったら、以下の様にコマンドを実行することでイメージをダウンロード出来ます。
// ./download-frozen-image-v2.sh [DLディレクトリ] [image名]:[タグ] ./download-frozen-image-v2.sh ./ ubuntu:latest
プロキシ環境下ではPython同様、Proxy設定して実行してみてください。
PythonとかCygwinとか無理なんだけど
っていう方はPowerShellで同じようなものを作成されてる方がいましたので、そちらを参考にしてみてください。
PowerShell見ると眠くなる呪いさえなければ・・・
もっと便利なツールなどあればぜひとも教えて下さい!