DockerHubを使用せずにDockerイメージを共有する
1. 概要
マシン上にローカルに存在するDockerイメージを共有する必要があるとしましょう。 この問題を解決するために、 DockerHubが役に立ちます。
Docker Hubは、Dockerイメージを保存できるクラウドベースの中央リポジトリです。 したがって、必要なのはDockerイメージをDocker Hubにプッシュすることだけです。後で、誰でも同じDockerイメージをプルできます。
クラウドベースのリポジトリであるDockerHubは、Dockerイメージをアップロードおよびダウンロードするために追加のネットワーク帯域幅を必要とします。 また、画像のサイズが大きくなると、画像のアップロード/ダウンロードに必要な時間も長くなります。 したがって、Dockerイメージを共有するこの方法が常に役立つとは限りません。
このチュートリアルでは、DockerHubを使用せずにDockerイメージを共有する方法について説明します。 このアプローチは、送信者と受信者が同じプライベートネットワークに接続されている場合に便利であることがわかります。
2. Dockerイメージをtarアーカイブとして保存
マシンAからマシンBに転送する必要があるDockerイメージbaeldungがあるとします。 これを実現するには、まず、 dockersaveコマンドを使用してDockerイメージを.tarファイルに変換します。
$ docker save --output baeldung.tar baeldung
上記のコマンドは、という名前のtarアーカイブを作成します
$ docker save baeldung > baeldung.tar
docker save コマンドは、複数のDockerイメージを使用して単一のtarアーカイブを作成できます。
$ docker save -o ubuntu.tar ubuntu:18.04 ubuntu:16.04 ubuntu:latest
3. タールアーカイブを転送します
作成したtarアーカイブはマシンAにあります。 次に、baeldung.tarファイルをマシンBに転送しましょう。 scpやftpなどのプロトコルを使用できます。
このステップは柔軟性が高く、マシンAとマシンBが存在する環境に大きく依存します。
4. tarアーカイブをDockerイメージにロードします
これまで、Dockerイメージのtarアーカイブを作成し、ターゲットマシンBに移動しました。
次に、 docker load コマンドを使用して、tarアーカイブbaeldung.tarから実際のDockerイメージを作成します。
$ docker load --input baeldung.tar
Loaded image: baeldung:latest
ここでも、ファイルからのリダイレクトを使用して、tarアーカイブを変換することもできます。
$ docker load < baeldung.tar
Loaded image: baeldung:latest
docker images コマンドを実行して、イメージが正常にロードされたかどうかを確認しましょう。
$ docker images
baeldung latest 277bcd6563ce About a minute ago 466MB
Dockerイメージの場合、 baeldung 、がターゲットマシン(この例ではマシンB)にすでに存在している場合、 Dockerロードコマンドは、既存の画像のタグの名前を空の文字列に変更します
$ docker load --input baeldung.tar
cfd97936a580: Loading layer [==================================================>] 466MB/466MB
The image baeldung:latest already exists, renaming the old one with ID sha256:
277bcd6563ce2b71e43b7b6b7e12b830f5b329d21ab690d59f0fd85b01045574 to empty string
5. 欠点
このアプローチを使用すると、Dockerイメージのキャッシュされたレイヤーを再利用する自由が失われます。 したがって、 docker saveコマンドを実行するたびに、Dockerイメージ全体のtarアーカイブが作成されます。
もう1つの欠点は、すべての tar アーカイブを保存して、Dockerイメージのバージョンを手動で維持する必要があることです。
したがって、テスト環境で、またはDocker Hubへのアクセスを制限している場合は、このアプローチを使用することをお勧めします。
6. 結論
このチュートリアルでは、 dockersaveおよびdockerload コマンドと、これらのコマンドを使用してDockerイメージを転送する方法について学習しました。
また、関連する欠点と、このアプローチが効率的であることが証明できる理想的な状況についても説明しました。