本ブログはpodmanのコンテナをアーカイブとして保存するimport、saveコマンド、保存されたアーカイブを読み込む
export、loadコマンドについて説明します。
コンテナの保存方法
コンテナは下記2つのコマンドどちらでもtarアーカイブとして保存する事が出来ます。
Armadillo-IoT G4はOS領域にファイル保存する事を推奨しておりませんので、USBメモリに直接保存する例として、
以下に例を示します。
注意点として、SWUpdateに使用するアーカイブファイルはsaveコマンドで作成したものをご使用下さい
保存するコンテナ名:container_test
保存するイメージ名:container_test:v1.0
保存するファイル名:container_test_v1.0.tar
※/mntにusbメモリをマウント
コンテナから直接アーカイブとして保存する場合(<b>※SWUpdateには使えません</b>) # podman export -o /mnt/container_test_v1.0.tar container_test コンテナイメージを作成してからアーカイブとして保存する場合 # podman commit container_test container_test:v1.0 # podman save -o /mnt/container_test_v1.0.tar container_test:v1.0
《注意》
上記の主な違いはexportコマンドはコンテナから直接アーカイブとして保存できますが、commit⇒saveコマンドは
コンテナイメージとして保存した後にアーカイブとして保存します。もう一つ大きな違いとして前者はレイヤー構造
の情報が破棄されます(動作に違いは無し)。レイヤー情報については最後に説明します。
コンテナイメージの読み込み方法
コンテナイメージを読み込む方法は2種類あり、上記で説明したexportで保存した場合とsaveで保存した場合で
コマンドが異なります。以下に例を示します。
読み込むファイル名:container_test_v1.0.tar
読み込んだイメージ名:container_test:v1.0
※/mntにusbメモリをマウント
exportコマンドで保存したイメージを読み込む場合 # podman import /mnt/container_test_v1.0.tar container_test:v1.0 saveコマンドで保存したイメージを読み込む場合(元の名前とタグを維持) # podman load -i /mnt/container_test_v1.0.tar
上記コマンドでどちらもイメージとして読み込む事が出来ます。
コンテナイメージのレイヤー情報について
ここでexportとsaveの違いとして挙げましたレイヤー構造の情報について説明します。
podman inspectコマンドでコンテナイメージのレイヤー情報を見る事が出来ますので比較してみます。
比較用に同じコンテナからexportしたcontainer_test:exportとcommit⇒saveしたconteiner_test:saveを
準備しました。(exportを行った場合、少しサイズが小さくなります)
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE R/O localhost/container_test export af4145fcc0ab 48 seconds ago 35.2 MB false localhost/container_test save 525280fc7bb0 About a minute ago 35.3 MB false
最初に、container_test:saveのレイヤー情報をinspectコマンドで表示します。
container_test:saveのレイヤー情報(抜粋) # podman inspect container_test:save [ { "Id": "525280fc7bb0d87a4c0ff9d56bb808b392496804900ca4e42af50c20f62ed6ab", "Digest": "sha256:e2e8dd9b12c90a70dbdbf12c7578b36734fa0e90c57e1ae8cd108c5a25f07e5e", "RepoTags": [ "localhost/container_test:save" ], "RepoDigests": [ "localhost/container_test@sha256:e2e8dd9b12c90a70dbdbf12c7578b36734fa0e90c57e1ae8cd108c5a25f07e5e" (中略) "History": [ { "created": "2021-11-24T20:39:20.356035534Z", "created_by": "/bin/sh -c #(nop) ADD file:df53811312284306901fdaaff0a357a4bf40d631e662fe9ce6d342442e494b6c in / " }, { "created": "2021-11-24T20:39:20.472395573Z", "created_by": "/bin/sh -c #(nop) CMD [\"/bin/sh\"]", "empty_layer": true }, { "created": "2022-03-04T04:08:14.901964569Z", "created_by": "/bin/sh", "comment": "FROM docker.io/library/alpine:latest" } ], "NamesHistory": [ "localhost/container_test:save" ] } ]
container:latest:saveはHistoryからコンテナイメージ”alpine:latest”を元に作った事が分かります。
commit(save)してアーカイブファイルを作っていくことで、今後このイメージに手を加えた時に
レイヤー情報がHistoryに追加されていきます。
次にcontainer_test:exportのレイヤー情報を表示します。
container_test:exportのレイヤー情報(抜粋) # podman inspect container_test:export { "Id": "af4145fcc0ab798f7d7ee450a095718465d81f7138e99124bc800509483ed6eb", "Digest": "sha256:8826ec893fb3c69d4302b7a69436e3979be7ef7733b11728044f585cf40d9515", "RepoTags": [ "localhost/container_test:export" ], "RepoDigests": [ "localhost/container_test@sha256:8826ec893fb3c69d4302b7a69436e3979be7ef7733b11728044f585cf40d9515" (中略) "History": [ { "created": "2022-03-04T13:09:15.450291373+09:00", "created_by": "/bin/sh -c #(nop) ADD file:90db7e4d6834c6fe3432fbf43829cd9cbc034e5aa00ccfbee228629659049994 in /", "comment": "imported from tarball" } ], "NamesHistory": [ "localhost/container_test:export" ] } ]
container:latest:exportはイメージ元の情報が残っていません。
そのレイヤー情報が不要という場合はexportコマンドでも問題ありません。