基本的に Docker イメージは Docker リポジトリからダウンロードしたりアップロードするものだと思う。
とはいえ、インターネットに疎通がなかったりすることもあるし、自前でリポジトリを運用するのもつらい。
そんなときは Docker イメージを、そのままファイルでやり取りしたいなと思うときがある。
結論から先に言ってしまうと、そんなときは docker save
コマンドと docker load
コマンドを使うと良い。
使った環境は次の通り。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29 $ docker version Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.9 Git commit: afdb6d4 Built: unknown-buildtime OS/Arch: darwin/amd64 Server: Version: 17.09.0-ce API version: 1.32 (minimum version 1.12) Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:45:38 2017 OS/Arch: linux/amd64 Experimental: false
ひとまず、サンプルとして busybox
イメージを Docker の公式リポジトリから取ってくる。
$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
03b1be98f3f9: Pull complete
Digest: sha256:3e8fa85ddfef1af9ca85a5cfb714148956984e02f00bec3f7f49d3925a91e0e7
Status: Downloaded newer image for busybox:latest
これで、ローカルに busybox
イメージが登録された。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 54511612f1c4 6 weeks ago 1.13MB
イメージをファイルに書き出すには docker save
コマンドを使う。
保存先のファイル名は -o
オプションで指定する。
$ docker save busybox -o busybox.tar
書き出されたファイルは tar
形式になっている。
$ file busybox.tar busybox.tar: POSIX tar archive
あとは、このファイルを好きな方法で保存したり運用環境に持っていけば良い。
イメージを読み込む検証をするために、一旦さきほど取ってきた busybox
イメージを削除する。
$ docker rmi busybox $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE
ファイルとして書き出された Docker イメージは docker load
コマンドで読み込める。
$ docker load -i busybox.tar 6a749002dd6a: Loading layer 1.338MB/1.338MB Loaded image: busybox:latest
次のように busybox
イメージが再び登録された。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 54511612f1c4 6 weeks ago 1.13MB
この通り、ちゃんと使うことができる。
$ docker run -t busybox /bin/echo "Hello World" Hello World
めでたしめでたし。