docker saveコマンドの使い方(実例で解説)

docker saveコマンド解説

 本記事はDocker ver27.5.1の環境で確認しています。

 このコマンドは、Dockerホスト上に格納されているDockerイメージをtarファイルに出力することができます。

 docker saveコマンドにて出力したtarファイルは、docker loadコマンドにてDockerイメージに戻すことが可能です。

 よって、Dockerイメージのバックアップとしても利用可能です。

 tarファイルに出力するDockerイメージは複数個指定することが可能でして、複数個のDockerイメージを1つのtarファイルに格納することができます。

 複数個のDockerイメージが格納されたtarファイルをdocker loadコマンドで戻した場合は、一度に複数のDockerイメージがDockerホスト上に格納されます。

docker saveコマンドのフォーマットとオプション

フォーマット

docker save [オプション] [イメージ] [イメージ...]

主なオプション一覧

オプション概説
-o出力先のtarファイルを指定します。
「-o」オプションを指定しない場合は、標準
出力に出力されますので、tarファイルにリダ
イレクトさせることも可能です。

コマンド例

$ docker save local/centos7-base > testimage.tar
$ docker save -o testimage-o.tar local/centos7-base

docker saveコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

実例では、Ubuntuの公式イメージにより起動したコンテナ(testvm)を使用します。

コンテナは「docker run -dit --init --name testvm ubuntu」で起動します。

※「--rm」オプションを付けておりませんので、ご利用後はコンテナ削除をお忘れなく。

基本事項の解説

 docker saveコマンドは、Dockerホスト内に格納されているDockerイメージをtarファイルに出力することができます。

 「-o」オプションは、出力先ファイルを指定します。

 オプションを付けない場合は、Dockerイメージの内容が標準出力に出力されますので、ファイルにリダイレクトさせることになります。

Dockerイメージをtarファイルに出力する

 Dockerホスト上にありますDockerイメージを、tarファイルに出力します。

 まずは、docker imagesコマンドで、格納するDockerイメージの名前を確認します。

$ docker images
REPOSITORY                 TAG     IMAGE ID        CREATED        SIZE
local/centos7-base         latest  84ebebe0d954    4 months ago   196.7 MB

 このDockerイメージをtarファイル(testimage.tar)に出力してみます。

$ docker save local/centos7-base > testimage.tar

 tarファイルが作成されているか確認します。

$ ls -l
合計 199604
-rw-rw-r-- 1 test01 users 204382720 10月 6 10:21 testimage.tar

 作成されていることが確認できました。

 このように、docker saveコマンドは、オプションを付けずに実行しますと標準出力にtar形式のバイナリ情報が出力されます。

 ちなみに、docker saveコマンドで出力したファイルは、docker loadコマンドを使用してDockerホストにdockerイメージとして格納することが可能です。

 また、「-o」オプションを使用して、出力先のtarファイルを指定することも可能です。

 次の項でご紹介します。

オプション「-o」で出力先のtarファイルを指定する

 先ほど出力しましたDockerイメージを、今度は「-o」オプションでtarファイルを指定して出力してみます。

$ docker save -o testimage-o.tar local/centos7-base

 tarファイルが作成されているか確認します。

$ ls -l
合計 199604
-rw------- 1 test01 users 204382720 10月 6 11:01 testimage-o.tar

 作成されていることが確認できました。

複数のDockerイメージを1個のtarファイルに格納する

 以下のコマンドで、2個のDockerイメージ(local/centos7-baseとcentos)を1個のtarファイルに格納してみます。

$ docker save -o testimage-2.tar local/centos7-base centos

 tarファイルが作成されているか確認します。

$ ls -l
合計 598784
-rw------- 1 test01 users 408748032 10月 6 11:05 testimage-2.tar

 複数個のDockerイメージを格納したtarファイルを、docker loadコマンドでDockerイメージに戻した場合は、複数のDockerイメージとして展開されます。

リポジトリ名を指定してDockerイメージをtarファイルに出力する

 出力対象の指定は、イメージ名(リポジトリ名:[タグ名])で行います。

 もし、同じリポジトリ名でタグ名が異なるDockerイメージが存在する場合は、リポジトリ名が同じであるDockerイメージが、全て1つのtarファイルに格納されます。

 例えば、以下のようにタグ名が異なるmariadbの公式イメージがあったとします。

$ docker images mariadb
REPOSITORY    TAG       IMAGE ID      CREATED       SIZE
mariadb       latest    0112f2662974  3 months ago  387.6 MB
mariadb       10.0.24   c0a47bb982c0  5 months ago  338.8 MB

 この状態で、以下のコマンドでDockerイメージをtarファイルに出力した場合は、2つのDockerイメージ両方とも1つのtarファイルに出力されます。 

$ docker save -o mariadb-2.tar mariadb

 よって、1つだけ指定してDockerイメージを出力対象にしたい場合は、リポジトリ名とタグ名の両方とも指定してください。

 例えば、上の2つmariadbのDockerイメージのうち、タグ名が「10.0.24」のイメージのみtarファイルに出力したい場合は、以下のように対象のDockerイメージを指定します。

$ docker save -o mariadb-l.tar mariadb:10.0.24

イメージIDを指定して実行した場合

 docker saveコマンドで、出力するDockerイメージの指定にイメージIDを指定することも可能です。

 しかしその場合は、出力したtarファイルに出力対象のDockerイメージの名前が格納されないため、docker loadコマンドでDockerイメージに戻した場合、名前が無いDockerイメージとして格納されますのでご注意ください。

おわりに

 以上でdocker saveコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました!

コメント