1. Обзор
Предположим, нам нужно поделиться образом Docker , который присутствует локально на нашей машине. Для решения этой проблемы на помощь приходит Docker Hub .
Docker Hub — это облачный центральный репозиторий, в котором можно хранить образы Docker. Итак, все, что нам нужно сделать, это отправить наш образ Docker в Docker Hub, а позже любой может получить тот же образ Docker.
Будучи облачным репозиторием, Docker Hub требует дополнительной пропускной способности сети для загрузки и скачивания образов Docker. Кроме того, по мере увеличения размера изображения увеличивается время, необходимое для загрузки/выгрузки изображения. Следовательно, этот метод обмена образами Docker не всегда полезен.
В этом руководстве мы обсудим способ обмена образами Docker без использования Docker Hub. Этот подход оказывается удобным, когда отправитель и получатель подключены к одной и той же частной сети.
2. Сохраните образ Docker в виде tar
- архива .
Предположим, что есть foreach
образа Docker, который нам нужно перенести с машины A на машину B. Для этого сначала мы преобразуем образ Docker в файл .tar
с помощью команды docker save
:
$ docker save --output foreach.tar foreach
Приведенная выше команда создаст tar-архив с именем foreach.tar.
В качестве альтернативы мы также можем использовать перенаправление файлов для достижения аналогичных результатов:
$ docker save foreach > foreach.tar
Команда сохранения docker
может создать один tar-архив, используя несколько образов Docker:
$ docker save -o ubuntu.tar ubuntu:18.04 ubuntu:16.04 ubuntu:latest
3. Перенесите tar
- архив
Созданный нами tar-архив присутствует на машине A. Давайте теперь перенесем файл foreach.tar
на машину B. Мы можем использовать такие протоколы, как scp
или ftp
.
Этот шаг является очень гибким и в значительной степени зависит от среды , в которой присутствуют машины A и B.
4. Загрузите архив tar
в образ Docker.
На данный момент мы создали tar-архив образа Docker и переместили его на нашу целевую машину B.
Теперь мы создадим настоящий образ Docker из tar-архива foreach.tar
с помощью команды загрузки docker
:
$ docker load --input foreach.tar
Loaded image: foreach:latest
Опять же, мы также можем использовать перенаправление из файла для преобразования tar
- архива:
$ docker load < foreach.tar
Loaded image: foreach:latest
Теперь давайте проверим, успешно ли загружен образ, выполнив команду docker images
:
$ docker images
foreach latest 277bcd6563ce About a minute ago 466MB
Обратите внимание, что если образ Docker, foreach
, уже присутствует на целевой машине (в нашем примере это машина B), то команда загрузки docker
переименует тег существующего образа в пустую строку <none>:
$ docker load --input foreach.tar
cfd97936a580: Loading layer [==================================================>] 466MB/466MB
The image foreach:latest already exists, renaming the old one with ID sha256:
277bcd6563ce2b71e43b7b6b7e12b830f5b329d21ab690d59f0fd85b01045574 to empty string
5. Недостатки
При таком подходе мы теряем свободу повторного использования кэшированных слоев образа Docker. Итак, каждый раз, когда мы запускаем команду сохранения docker
, она создает tar
- архив всего образа Docker.
Еще один недостаток заключается в том, что нам нужно поддерживать версии образа Docker вручную, сохраняя все tar
- архивы.
Следовательно, рекомендуется использовать этот подход в среде тестирования или когда у нас есть ограниченный доступ к Docker Hub.
6. Заключение
В этом руководстве мы узнали о командах сохранения
и загрузки
докеров, а также о том, как перенести образ Docker с помощью этих команд.
Мы также рассмотрели связанные с этим недостатки и идеальные ситуации, в которых этот подход может оказаться эффективным.