web-dev-qa-db-ja.com

Dockerのインポートとロードの違いは何ですか?

export(コンテナ用)とsave(イメージ用)の違いを理解しています。ただし、1日の終わりには、保存またはエクスポートによって生成されたtarballをイメージとして使用する必要があります。

では、なぜtarballからイメージを作成する2つのコマンドがあるのでしょうか?

50
rdupz

docker save は実際にtarballを生成します。butはすべての親レイヤー、およびすべてのタグ+バージョンを含みます。

docker export もtarballを生成しますが、レイヤー/履歴はありません。

Dockerコンテナまたはイメージのフラット化 from Thomas Uhrig :」に示すように、 "イメージをフラット化" する場合によく使用されます。

docker export <CONTAINER ID> | docker import - some-image-name:latest

ただし、これらのtarballが生成されると、次の目的でロード/インポートが行われます。

  • docker import 作成oneからのイメージoneであるtarball not evenイメージ(インポートしたいファイルシステムのみ)画像)

空のファイルシステムイメージを作成し、tarballの内容をインポートします

  • docker load は潜在的に作成します複数 tarredリポジトリから画像を作成します(docker saveはtarballに複数画像を保存できるため)。

ファイルまたは標準入力ストリームからtarリポジトリをロードします

68
VonC

Docker初心者として、この違いハードウェイを学びました。

  • 1つのシステムで:

    docker run -it myImage /bin/bash
    

    ->正常に動作します

  • 同じシステムで:

    docker **save** myImage -o myImage.tar
    
  • 2番目のシステム:

    docker **import** myImage.tar
    

    ->問題なく動作します。タグが必要です:

    docker tag _the_assigned_tag myImage
    
  • その2番目のシステム:

    docker run -it myImage /bin/bash
    

    docker:デーモンからのエラー応答:OCIランタイムの作成に失敗しました:container_linux.go:345:コンテナープロセスを開始すると「exec:\ "/ bin/bash \":stat/bin/bash:no such file or directory」 :不明

そのエラーを探してMountFlags="slave"などのあらゆる種類の理由が見つかりましたが、本当の理由はこの投稿で説明されているものであることが判明しました。インポートの代わりにロードを使用する必要がありました。何が起こっているのかわからないので、Dockerのエラーメッセージは、私がこの投稿に出くわすまで、「インポート」の原因に向かう道を私に何ら意味を与えませんでした。

2
qootec

docker importは、実行中のコンテナから作成されたtarballで主に使用されます。例えばdocker export containerID> /home/cntr.tar次に、このtarballをイメージにインポートします。 docker import /home/cntr.tar mynewimage:tag

一方、docker loadは、別のイメージから作成されたtarballからイメージをロードするために使用されます。例えばdocker save> /home/fromimg.tarその後、それをdocker load </home/fromimg.tarでロードし直します

docker save/load with imageの主な違いは、画像の履歴を保持することです。一方、ドッカーはコンテナーを使用してエクスポート/インポートを行うと、コンテナーのすべての履歴を削除して画像を平坦化します。

1
Shreedhar