webdevqa.jp.net

リポジトリを使わずにDockerイメージをあるホストから別のホストにコピーする方法

プライベートでもパブリックでも、リポジトリを使用せずにDockerイメージをあるマシンから別のマシンに転送する方法を教えてください。

私はVirtualBoxで自分のイメージを再生したり作成したりすることに慣れています。そしてそれが完了したら、他のマシンにデプロイして実際の使用を試みます。

Red Hat Linuxなどの独自のイメージに基づいているため、Dockerfileから再作成することはできません。

使用できる簡単なコマンドはありますか?それとも別の解決策?

Save/exportも同様の目的を達成できるようです。Dockerのsaveとexportの違いは何ですか?、私は私の場合はsaveコマンドを好みます。

898
Larry Cai

Dockerイメージをtarファイルとして保存する必要があります。

docker save -o <path for generated tar file> <image name>

次に、cpscpなどの通常のファイル転送ツールを使って、イメージを新しいシステムにコピーします。その後、Dockerに画像を読み込む必要があります。

docker load -i <path to image tar file>

シモンズ:あなたはすべてのコマンドをSudoする必要があるかもしれません。

編集: -oを使ってファイル名(ディレクトリではなく)を追加する必要があります。例えば:

docker save -o c:/myfile.tar centos:16
1598
Daiwei

SSHでDockerイメージを転送し、その場でコンテンツをbzipします。

docker save <image> | bzip2 | \
     ssh [email protected] 'bunzip2 | docker load'

転送がどのように行われているかを確認するために、pvをパイプの中央に配置することもお勧めです。

docker save <image> | bzip2 | pv | \
     ssh [email protected] 'bunzip2 | docker load'

pvホームページmanページ についての詳細情報)。

446
kolypto

イメージを任意のファイルパスまたは共有のNFSの場所に保存するには、次の例を参照してください。

次のようにして画像IDを取得します。

Sudo docker images

Idが "matrix-data"の画像があるとします。

画像をidで保存します。

Sudo docker save -o /home/matrix/matrix-data.tar matrix-data

パスから任意のホストにイメージをコピーします。次のようにして、あなたのローカルDockerインストールにインポートしましょう。

Sudo docker load -i <path to copied image file>
78
Sohan

最初にDockerイメージをZipファイルに保存します。

docker save <docker image name> | gzip > <docker image name>.tar.gz

次に、下記のコマンドを使ってエクスポートした画像をDockerにロードします。

zcat <docker image name>.tar.gz | docker load
21
Damodaran

実行する

docker images

ホスト上の画像のリストを表示します。 awesomesauce という画像があるとしましょう。あなたの端末で、イメージをエクスポートしたいディレクトリへのcd。今すぐ実行します。

docker save awesomesauce:latest > awesomesauce.tar

Tarファイルをサムドライブなどにコピーしてから、新しいホストコンピュータにコピーします。

今すぐ新しいホストから行います。

docker load < awesomesauce.tar

今すぐコーヒーを飲みに行き、 ハッカーニュース ...

20
Neil Girardi

Docker-machineを使うとき、mach1mach2の間でイメージをコピーするためにdocker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) loadを実行できます。

そしてもちろん、pvを中央に固定して進捗インジケータを取得することもできます。

docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load

現在のデフォルトのdocker-Hostを使用するために、docker-machine configサブシェルの1つを省略することもできます。

現在のdocker-Hostからmachに画像をコピーするためのdocker save <image> | docker $(docker-machine config <mach>) load

または 

machから現在のdocker-Hostにコピーするdocker $(docker-machine config <mach>) save <image> | docker load

13
matlehmann

コンテナのファイルシステムをフラットエクスポートするには、;を使います。 

docker export CONTAINER_ID > my_container.tar

その画像をインポートするにはcat my_container.tar | docker import -を使用してください。

7ebc8510bc2cのイメージIDを持つcouchdb-cartridgeを保存する必要があると思います。

[email protected]:~$ docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
couchdb-cartridge                      latest              7ebc8510bc2c        17 hours ago        1.102 GB
192.168.57.30:5042/couchdb-cartridge   latest              7ebc8510bc2c        17 hours ago        1.102 GB
ubuntu                                 14.04               53bf7a53e890        3 days ago          221.3 MB

ArchiveNameイメージをtarファイルに保存します。画像を保存するために/media/sf_docker_vm/を使います。

[email protected]:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar

FTPSCPなど、環境内で機能する任意の方法を使用して、archiveName.tarファイルを新しいDockerインスタンスにコピーします。

新しいDockerインスタンスでdocker loadコマンドを実行して、イメージのtarファイルの場所を指定します。

[email protected]:~$ docker load < /media/sf_docker_vm/archiveName.tar

最後に、docker imagesコマンドを実行して、イメージが利用可能になったことを確認します。

[email protected]:~$ docker images
REPOSITORY                             TAG        IMAGE ID         CREATED             VIRTUAL SIZE
couchdb-cartridge                      latest     7ebc8510bc2c     17 hours ago        1.102 GB
192.168.57.30:5042/couchdb-cartridge   latest     bc8510bc2c       17 hours ago        1.102 GB
ubuntu                                 14.04      4d2eab1c0b9a     3 days ago          221.3 MB

この 詳細な投稿 を見つけてください。

9
tk_

ローカルのDockerインストールからミニキューブVMにイメージを転送するには、以下の手順を実行します。

docker save <image> | (eval $(minikube docker-env) && docker load)
7
Bryan Larsen

他のすべての答えはとても役に立ちます。私はちょうど同じ問題を経験し、docker machine scpで簡単な方法を見つけました。

Docker Machine v0.3.0以降、scpはあるDockerマシンから別のDockerマシンにファイルをコピーするために導入されました。 Docker MachineがSSH認証情報を管理しているため、ローカルコンピューターからAWS EC2やDigital OceanなどのリモートDockerマシンにファイルをコピーする場合は非常に便利です。

  1. 次のようにdocker saveを使用して画像を保存します。

    docker save -o docker-images.tar app-web
    
  2. docker-machine scp を使用して画像をコピーする

    docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
    

リモートのDockerマシンがremote-machineであり、tarファイルにしたいディレクトリが/home/ubuntuであるとします。

  1. Dockerイメージを読み込む

    docker-machine ssh remote-machine Sudo docker load -i docker-images.tar
    
7
Peng

docker-Push-sshは、このシナリオ専用のコマンドラインユーティリティです。

それはサーバ上に一時的なプライベートDockerレジストリをセットアップし、あなたのローカルホストからSSHトンネルを確立し、あなたのイメージをプッシュし、そしてそれ自身の後に片付けます。

docker save(この記事の執筆時点ではこのメソッドを使用しています)に対するこのアプローチの利点は、新しいレイヤーのみがサーバーにプッシュされるため、アップロードが非常に速くなることです。

Dockerhubのような中間レジストリを使用するのは、望ましくないことが多く、面倒です。

https://github.com/coherenceapi/docker-Push-ssh

インストール:

pip install docker-Push-ssh

例:

docker-Push-ssh -i ~/my_ssh_key [email protected] my-docker-image

最大の注意点はDockerのinsecure_registries設定に手動であなたのローカルホストを追加しなければならないということです。一度ツールを実行すると、それはあなたに有益なエラーを与えるでしょう:

Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): https://stackoverflow.com/questions/32808215/where-to-set-the-insecure-registry-flag-on-mac-os

Mac OSでは '--insecure-registry'フラグをどこに設定すればいいですか?

3
brthornbury

sshfsを使うことができます:

$ sshfs [email protected]:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
0
Chu

すべての画像をタグ付きで移動したい。

```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
``` 

説明:

最初のOUTはすべてのタグを取得しますが、改行で区切ります。 2番目のOUTPUTは、配列内のすべてのタグを取得します。 3番目の$(echo "${OUTPUT[*]}")は、1つのdocker saveコマンドにすべてのタグを付けて、すべてのイメージが1つのtarに含まれるようにします。

さらに、これはgzipを使って圧縮することができます。ターゲット上で、実行します。

tar xvf images.tar.gz -O | docker load

tarへの-Oオプションはstdinに内容を置きます。これはdocker loadによって取得することができます。

0
Vikram