プライベートでもパブリックでも、リポジトリを使用せずにDockerイメージをあるマシンから別のマシンに転送する方法を教えてください。
私はVirtualBoxで自分のイメージを再生したり作成したりすることに慣れています。そしてそれが完了したら、他のマシンにデプロイして実際の使用を試みます。
Red Hat Linuxなどの独自のイメージに基づいているため、Dockerfileから再作成することはできません。
使用できる簡単なコマンドはありますか?それとも別の解決策?
Save/exportも同様の目的を達成できるようです。Dockerのsaveとexportの違いは何ですか?、私は私の場合はsave
コマンドを好みます。
Dockerイメージをtarファイルとして保存する必要があります。
docker save -o <path for generated tar file> <image name>
次に、cp
やscp
などの通常のファイル転送ツールを使って、イメージを新しいシステムにコピーします。その後、Dockerに画像を読み込む必要があります。
docker load -i <path to image tar file>
シモンズ:あなたはすべてのコマンドをSudo
する必要があるかもしれません。
編集: -oを使ってファイル名(ディレクトリではなく)を追加する必要があります。例えば:
docker save -o c:/myfile.tar centos:16
イメージを任意のファイルパスまたは共有の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>
最初にDockerイメージをZipファイルに保存します。
docker save <docker image name> | gzip > <docker image name>.tar.gz
次に、下記のコマンドを使ってエクスポートした画像をDockerにロードします。
zcat <docker image name>.tar.gz | docker load
実行する
docker images
ホスト上の画像のリストを表示します。 awesomesauce という画像があるとしましょう。あなたの端末で、イメージをエクスポートしたいディレクトリへのcd
。今すぐ実行します。
docker save awesomesauce:latest > awesomesauce.tar
Tarファイルをサムドライブなどにコピーしてから、新しいホストコンピュータにコピーします。
今すぐ新しいホストから行います。
docker load < awesomesauce.tar
今すぐコーヒーを飲みに行き、 ハッカーニュース ...
Docker-machineを使うとき、mach1
とmach2
の間でイメージをコピーするために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
。
コンテナのファイルシステムをフラットエクスポートするには、;を使います。
docker export CONTAINER_ID > my_container.tar
その画像をインポートするにはcat my_container.tar | docker import -
を使用してください。
7ebc8510bc2cのイメージIDを持つcouchdb-cartridge
を保存する必要があると思います。
stratos@Dev-PC:~$ 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/
を使います。
stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar
FTP
、SCP
など、環境内で機能する任意の方法を使用して、archiveName.tarファイルを新しいDockerインスタンスにコピーします。
新しいDockerインスタンスでdocker load
コマンドを実行して、イメージのtarファイルの場所を指定します。
stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar
最後に、docker images
コマンドを実行して、イメージが利用可能になったことを確認します。
stratos@Dev-PC:~$ 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
この 詳細な投稿 を見つけてください。
ローカルのDockerインストールからミニキューブVMにイメージを転送するには、以下の手順を実行します。
docker save <image> | (eval $(minikube docker-env) && docker load)
他のすべての答えはとても役に立ちます。私はちょうど同じ問題を経験し、docker machine scp
で簡単な方法を見つけました。
Docker Machine v0.3.0以降、scpはあるDockerマシンから別のDockerマシンにファイルをコピーするために導入されました。 Docker MachineがSSH認証情報を管理しているため、ローカルコンピューターからAWS EC2やDigital OceanなどのリモートDockerマシンにファイルをコピーする場合は非常に便利です。
次のようにdocker save
を使用して画像を保存します。
docker save -o docker-images.tar app-web
docker-machine scp を使用して画像をコピーする
docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
リモートのDockerマシンがremote-machine
であり、tarファイルにしたいディレクトリが/home/ubuntu
であるとします。
Dockerイメージを読み込む
docker-machine ssh remote-machine Sudo docker load -i docker-images.tar
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
sshfs
を使うことができます:
$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
すべての画像をタグ付きで移動したい。
```
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
によって取得することができます。