回答:
Dockerイメージをtarファイルとして保存する必要があります。
docker save -o <path for generated tar file> <image name>
次にcp
、scp
やなどの通常のファイル転送ツールを使用して、イメージを新しいシステムにコピーしますrsync
(大きなファイルに推奨)。その後、イメージをDockerにロードする必要があります。
docker load -i <path to image tar file>
PS:sudo
すべてのコマンドが必要になる場合があります。
編集:-oでファイル名(ディレクトリだけでなく)を追加する必要があります。次に例を示します。
docker save -o c:/myfile.tar centos:16
repo:tag
ではなく画像参照として使用することをお勧めしますimage id
。を使用するimage id
場合、ロードされた画像はタグを保持しません(そして、画像にタグを付けるために別の手順を実行する必要があります)。
docker images
にを使用して画像IDを識別し、次にを使用しますdocker tag DESIREDIMAGEID mycompany/myreponame
。あなたの画像IDが591de551d6e4ある場合は、画像IDを省略することができますdocker tag 59 mycompany/myreponame
SSH経由でDockerイメージを転送し、その場でコンテンツをbzipします。
docker save <image> | bzip2 | \
ssh user@host 'bunzip2 | docker load'
pv
パイプの中央に置いて、転送の様子を確認することもお勧めします。
docker save <image> | bzip2 | pv | \
ssh user@host 'bunzip2 | docker load'
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
、マシンmach1とmach2の間でイメージをコピーできます。
eval $(docker-machine env dev)
は単一のDocker ホストとの一般的な通信に適していますが、2つの異なるDockerホスト/ Dockerマシンが関係するため、2つのマシン間でコピーすることはできません。
ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load
。「-t」スイッチがないと、sudoはsudoに文句を言います。申し訳ありませんが、sudoを実行するにはttyが必要です。「-t」を1つ指定すると、sdinはstdinが端末ではないため、疑似端末は割り当てられないと言うので、同じメッセージです。最後に、2つの「-t」を使用して、tarファイルのコンテンツ(つまり、イメージ)を端末に取得します。何か案は?
イメージを任意のファイルパスまたは共有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 images
ホスト上のイメージのリストを表示します。awesomesauceというイメージがあるとします。端末でcd
、イメージをエクスポートするディレクトリに移動します。今実行します:
docker save awesomesauce:latest > awesomesauce.tar
tarファイルをサムドライブなどにコピーしてから、新しいホストコンピュータにコピーします。
今度は新しいホストから:
docker load < awesomesauce.tar
今コーヒーを飲みに行き、ハッカーニュースを読んでください...
docker save [image] -o file.tar
しdocker load -i file.tar
て、これを回避してください!
docker save [image] -o file.tar
また、非常に速いようです
コンテナのファイルシステムのフラット化されたエクスポートには、以下を使用します。
docker export CONTAINER_ID > my_container.tar
cat my_container.tar | docker import -
上記の画像をインポートするために使用します。
cat my_container.tar | docker import - my_container:new
コマンドヘルプに従ってローカルにインポートする場合
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-machine config
現在のデフォルトのdocker-hostを使用するために、サブシェルの1つを省略することもできます。
docker save <image> | docker $(docker-machine config <mach>) load
現在のdocker-hostからイメージをコピーするには mach
または
docker $(docker-machine config <mach>) save <image> | docker load
からmach
現在のdocker-host にコピーします。
couchdb-cartridge
7ebc8510bc2cのイメージIDを持つものを保存する必要があると思います。
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
、環境で機能する方法を使用して、archiveName.tarファイルを新しいDockerインスタンスにコピーしますSCP
。
docker load
新しいDockerインスタンスでコマンドを実行し、イメージ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-push-ssh
このシナリオのために作成したコマンドラインユーティリティです。
サーバー上に一時的なプライベートDockerレジストリーをセットアップし、ローカルホストからSSHトンネルを確立し、イメージをプッシュし、それ自体をクリーンアップします。
このアプローチの利点docker save
(執筆時点ではほとんどの回答はこの方法を使用しています)の利点は、新しいレイヤーのみがサーバーにプッシュされるため、はるかに高速にアップロードできることです。
多くの場合、dockerhubなどの中間レジストリを使用することは望ましくなく、面倒です。
https://github.com/brthor/docker-push-ssh
インストール:
pip install docker-push-ssh
例:
docker-push-ssh -i ~/my_ssh_key username@myserver.com my-docker-image
最大の注意点は、ローカルホストをDockerのinsecure_registries
構成に手動で追加する必要があることです。ツールを1回実行すると、有益なエラーが表示されます。
Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): /programming/32808215/where-to-set-the-insecure-registry-flag-on-mac-os
他のすべての答えは非常に役に立ちます。私は同じ問題を経験し、で簡単な方法を見つけましたdocker machine scp
。
Docker Machine v0.3.0以降、1つのDockerマシンから別のマシンにファイルをコピーするためにscpが導入されました。これは、ローカルコンピューターからAWS EC2やDigital OceanなどのリモートDockerマシンにファイルをコピーする場合に非常に便利です。DockerMachineがSSH認証情報を処理するためです。
docker save
like を使用して画像を保存します。
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
タグ付きの画像をすべて移動したい。
```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
```
説明:
最初OUT
にすべてのタグを取得しますが、改行で区切ります。2番目OUTPUT
は、配列内のすべてのタグを取得します。3番目$(echo "${OUTPUT[*]}")
はdocker save
、すべての画像が1つのtarに含まれるように、1つのコマンドにすべてのタグを配置します。
さらに、これはgzipを使用して圧縮できます。ターゲットで、実行します:
tar xvf images.tar.gz -O | docker load
-O
tar
stdinにコンテンツを配置するオプションdocker load
。
Dockerの保存と読み込み機能を実行するスクリプト(試してテスト済み):
Docker Save:
#!/bin/bash
#files will be saved in the dir 'Docker_images'
mkdir Docker_images
cd Docker_images
directory=`pwd`
c=0
#save the image names in 'list.txt'
doc= docker images | awk '{print $1}' > list.txt
printf "START \n"
input="$directory/list.txt"
#Check and create the image tar for the docker images
while IFS= read -r line
do
one=`echo $line | awk '{print $1}'`
two=`echo $line | awk '{print $1}' | cut -c 1-3`
if [ "$one" != "<none>" ]; then
c=$((c+1))
printf "\n $one \n $two \n"
docker save -o $two$c'.tar' $one
printf "Docker image number $c successfully converted: $two$c \n \n"
fi
done < "$input"
Dockerロード:
#!/bin/bash
cd Docker_images/
directory=`pwd`
ls | grep tar > files.txt
c=0
printf "START \n"
input="$directory/files.txt"
while IFS= read -r line
do
c=$((c+1))
printf "$c) $line \n"
docker load -i $line
printf "$c) Successfully created the Docker image $line \n \n"
done < "$input"