export
(コンテナ用)とsave
(イメージ用)の違いを理解しています。ただし、1日の終わりには、保存またはエクスポートによって生成されたtarballをイメージとして使用する必要があります。
では、なぜtarballからイメージを作成する2つのコマンドがあるのでしょうか?
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リポジトリをロードします
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のエラーメッセージは、私がこの投稿に出くわすまで、「インポート」の原因に向かう道を私に何ら意味を与えませんでした。
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の主な違いは、画像の履歴を保持することです。一方、ドッカーはコンテナーを使用してエクスポート/インポートを行うと、コンテナーのすべての履歴を削除して画像を平坦化します。