Перейти к основному содержимому

Делитесь образами Docker без использования Docker Hub

· 3 мин. чтения

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 с помощью этих команд.

Мы также рассмотрели связанные с этим недостатки и идеальные ситуации, в которых этот подход может оказаться эффективным.