ちょっとしたイメージを自作することになったが、手元の環境からどうやって取り出すか。docker hubにアップロードして渡してもいいが、それほどのものでは無いし。。。自分のプライベートレジストリを公開してもいいが、常に立てているとは限らない。どうにかしてVMイメージのようにオフラインにしたいという話。
閑話休題
自作のイメージをプライベートレジストリに保存したが、そのイメージを他の環境にオフラインで渡したい。Dockerfileを渡してそっちでBuildしてくれでいいのだが、
- Buildするためのリソースが無い
- 中身を教えたくない
そんなケースでイメージだけを渡したいことがある。
エクスポート
docker saveを使う。(プルして、saveする。いらないイメージを削除)
docker pull 192.168.16.2:5000/bitnami/wordpress:6.0.2-debian-11-r9
docker save 192.168.16.2:5000/bitnami/wordpress:6.0.2-debian-11-r9 > example_save.tar
docker rmi 192.168.16.2:5000/bitnami/wordpress:6.0.2-debian-11-r9
ダウンロードされたファイル
ls -lh example_save.tar
-rw-r–r– 1 root root 577M Oct 11 07:51 example_save.tar
tar tvf example_save.tar
drwxr-xr-x 0/0 0 2022-09-23 13:03 08dbe632267bf93515868351c84cd901a132fef221e1741a2b03e54cb121cc3a/
-rw-r–r– 0/0 3 2022-09-23 13:03 08dbe632267bf93515868351c84cd901a132fef221e1741a2b03e54cb121cc3a/VERSION
-rw-r–r– 0/0 3039 2022-09-23 13:03 08dbe632267bf93515868351c84cd901a132fef221e1741a2b03e54cb121cc3a/json
-rw-r–r– 0/0 522860032 2022-09-23 13:03 08dbe632267bf93515868351c84cd901a132fef221e1741a2b03e54cb121cc3a/layer.tar
drwxr-xr-x 0/0 0 2022-09-23 13:03 30caaaa50f929abfc70424a9d130874cbcb363fe0885c897a11e265f305b3319/
-rw-r–r– 0/0 3 2022-09-23 13:03 30caaaa50f929abfc70424a9d130874cbcb363fe0885c897a11e265f305b3319/VERSION
-rw-r–r– 0/0 401 2022-09-23 13:03 30caaaa50f929abfc70424a9d130874cbcb363fe0885c897a11e265f305b3319/json
-rw-r–r– 0/0 81960960 2022-09-23 13:03 30caaaa50f929abfc70424a9d130874cbcb363fe0885c897a11e265f305b3319/layer.tar
-rw-r–r– 0/0 15195 2022-09-23 13:03 cf3d1c7c62fad098565376de884b2fd08a97a3c2c308662ffe5b2a033385c592.json
-rw-r–r– 0/0 320 1970-01-01 00:00 manifest.json
-rw-r–r– 0/0 130 1970-01-01 00:00 repositories
だった。docker exportで取り出すとメタデータがなく、tarのファイルには、ファイルシステムそのままが入っている。
インポート
以下のコマンドを使う。
docker load < example_save.tar
あとは、タグを付け替えて使うなり、自身のプライベートレポジトリにプッシュすればOK。
何気に、コンテナを使うコマンドの種類が多くて困るなぁ、結局dockerコマンドを使ってしまったが。ctrコマンドも結構使うんですよね。まだまだ精進が必要。