本ブログは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コマンドでも問題ありません。