Nano Hash - криптовалюты, майнинг, программирование

Как сохранить все образы Docker и скопировать их на другую машину

У меня есть приведенный ниже список образов, присутствующих в моей системе, и я хочу скопировать все эти образы на удаленный компьютер.

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
u14_py269           latest              6a1ec0b508b3        4 days ago          885.9 MB
u12_py273           latest              c2a804894851        4 days ago          686 MB
u12_core            latest              0d61eba80df2        4 days ago          629.1 MB
c6_py266            latest              cb1a94742d59        4 days ago          1.32 GB
c6_core             latest              77c2ed19d87f        4 days ago          1.278 GB
c7_py275            latest              bb1d3de68452        4 days ago          1.117 GB
c7_core             latest              ca14a76e9cca        4 days ago          1.081 GB
u14_py35            latest              d110c7e4a1f5        5 days ago          914.5 MB
u14_py34            latest              085a37cb8614        5 days ago          830.7 MB
u14_py276           latest              8927c6167930        5 days ago          834.1 MB
u14_core            latest              93ead5abc25b        5 days ago          776.9 MB
centos              centos6             36877b5acebb        5 days ago          228.9 MB
ubuntu              latest              36248ae4a9ac        5 days ago          188 MB
ubuntu              12.04               94a7cb19a65b        5 days ago          137.8 MB
edgester/gerrit     latest              ce4e3238052a        6 days ago          735.2 MB
u14_as374_py276     latest              fa5fb7189d70        11 days ago         1.497 GB
c721_as373_py275    latest              03ccf6961d0c        11 days ago         844.3 MB
c721_as373_py35     latest              b5fece3dd45b        11 days ago         1.127 GB
c171_con_core       latest              8af0d24a38a0        2 weeks ago         377.2 MB
u14_as374_php55     latest              29df638e363a        3 weeks ago         1.073 GB
j_u14_as374_php55   latest              29df638e363a        3 weeks ago         1.073 GB
centos              centos7             c8a648134623        8 weeks ago         196.6 MB
centos              latest              c8a648134623        8 weeks ago         196.6 MB
j_u14_as374_py276   latest              28f379d60882        10 weeks ago        871.5 MB
ubuntu              14.04               89d5d8e8bafb        10 weeks ago        187.9 MB

В настоящее время я использую метод, предложенный в сохранять и загружать образы Docker, но я считаю, что должен быть лучший способ работать со всеми образами.

23.02.2016

  • В чем проблема с docker save/load ? 23.02.2016
  • @Auzias в методе сохранения/загрузки мне придется делать это для одного изображения за раз, ища оптимальный способ обработки всех изображений за один раз. 24.02.2016
  • Вот почему bash является мощным. Он может повторять и выполнять циклы. Смотрите ответ @kpie. И достаточно одной командной строки: docker save $(docker images -q) 24.02.2016
  • @PavanGupta Вы нашли лучший способ автоматизировать этот процесс? 21.04.2017
  • @AsmeJust не совсем так, мне это нужно было только один раз, однако ответ Франклина Пиата выглядит многообещающе. 21.04.2017
  • Да, я видел это, но это решение недостаточно подробно ... В настоящее время я делаю резервные копии один за другим 21.04.2017

Ответы:


1

Если вы хотите экспортировать все изображения сразу, создайте один большой tar-файл:

docker save $(docker images -q) -o /path/to/save/mydockersimages.tar

Если вы хотите сохранить несколько изображений в один файл .tar:

IDS=$(docker images | awk '{if ($1 ~ /^(debian|centos)/) print $3}')
docker save $IDS -o /path/to/save/somedockersimages.tar

Наконец, если вы хотите экспортировать несколько изображений, по одному файлу .tar на каждое изображение (неэффективно с диском: общий слой сохраняется в каждом файле .tar):

docker images | awk '{if ($1 ~ /^(openshift|centos)/) print $1 " " $2 " " $3 }' | tr -c "a-z A-Z0-9_.\n-" "%" | while read REPOSITORY TAG IMAGE_ID
do
  echo "== Saving $REPOSITORY $TAG $IMAGE_ID =="
  docker  save   -o /path/to/save/$REPOSITORY-$TAG-$IMAGE_ID.tar $IMAGE_ID
done

Вы также можете сохранить список изображений, чтобы можно было пометить восстановленные изображения:

docker images | sed '1d' | awk '{print $1 " " $2 " " $3}' > mydockersimages.list

На удаленном компьютере вы можете load (импортировать) изображения:

docker load -i /path/to/save/mydockersimages.tar

и пометьте импортированные изображения:

while read REPOSITORY TAG IMAGE_ID
do
        echo "== Tagging $REPOSITORY $TAG $IMAGE_ID =="
        docker tag "$IMAGE_ID" "$REPOSITORY:$TAG"
done < mydockersimages.list

Для получения дополнительной информации о сохранении/загрузке прочитайте: Как копировать образы Docker с одного хоста на другой без использования репозитория

06.06.2016
  • Я сделал единственный огромный tar и загрузил его. получил все изображения, но ни один из них не имеет репозитория или заголовка/тегов. Теперь, как, черт возьми, я должен знать, какие изображения у меня есть? 01.01.2018
  • @Bsienn, это заняло так много времени? 11.03.2018
  • @suhayab нет, в моей системе это заняло около 20 минут. 11.03.2018
  • Обратите внимание, что у вас могут возникнуть проблемы с использованием скрипта сохранения тегов, упомянутого выше, если у вас есть изображения, у которых нет тегов <none>. Возможно, здесь уже поможет дополнительный | grep -v '<none>'. 02.06.2019
  • Я хочу переместить набор из 6 контейнеров, созданных с помощью docker-compose.yml, на другой компьютер. Будет ли этот метод работать? Он тоже захватит все тома? Это нужно? 07.12.2019

  • 2

    При размещении на сервере Windows команда немного отличается. Используя ответ #EthanSN, я обнаружил, что сработало следующее - с использованием форматирования go:

        docker save $(docker images --format '{{.Repository}}:{{.Tag}}') -o allinone.tar
    

    И команда загрузки:

        docker load -i allinone.tar
    

    Работал отлично, и импортирующей машине не нужно было загружать какие-либо изображения.

    13.02.2019
  • Этот ответ предпочтительнее по нескольким причинам. Первый: он не использует sed и awk для анализа вывода команд Docker, а вместо этого создает правильный формат от одной команды к другой. Второе: он сохраняет теги при загрузке, без необходимости сохранять их в отдельный файл и повторно тегировать изображения после загрузки. 01.10.2019
  • Это хорошее решение для ОС Windows, но оно работает только с оболочкой питания, а не с cmd. 22.06.2021

  • 3

    Сохраните все изображения с name:tag в один файл tar:

    docker save $(docker images | sed '1d' | awk '{print $1 ":" $2 }') -o allinone.tar
    

    Затем загрузите все изображения:

    docker load -i allinone.tar
    
    11.12.2018
  • простое и чистое решение! 14.12.2018
  • @rfay я не думаю, что это лучший подход, так как вы потеряете все заголовки и теги 09.04.2019
  • @MarkMcDonagh Я проверил это, и вы правы, я удалю команду об использовании docker images -q как вводящую в заблуждение. 09.04.2019
  • Получение Error response from daemon: invalid reference format 28.07.2020
  • @Zoinks, на каком этапе? Попробуйте разделить команду. 1. docker images | sed '1d' | awk '{print $1 ":" $2 }' 2 docker save some_img:some_tag -o test.tar 3 docker load -i test.tar 29.07.2020
  • использовал grep -v для исключения изображений без тегов, исправлена ​​​​ошибка недопустимого эталонного формата для меня. Вот у меня работало: docker save $(docker images | grep -v \<none\> | sed '1d' | awk '{print $1 ":" $2 }') -o allinone.tar 04.08.2020

  • 4

    Большое спасибо всем вашим авторам, но я нашел простое и безопасное решение для сохранения:

    docker save -o ubuntu.tar myjenk:latest jenkins/jenkins:lts
    
    REPOSITORY          TAG                    
    myjenk              latest    
    jenkins/jenkins     lts    
    

    после восстановления изображений:

    docker load < ubuntu.tar
    
    24.04.2019

    5

    Скрипт для выполнения функции сохранения и загрузки Docker (проверено):

    Докер Сохранение:

    #!/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"
    

    Загрузка докера:

    #!/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"
    
    06.09.2019

    6

    Используя реестр, вы можете иметь рабочий процесс, аналогичный Git. Измените свой контейнер локально, зафиксируйте изменения в локальном образе, а затем загрузите свой образ в реестр. Затем вы можете извлечь образ с удаленного компьютера.

    Вы можете использовать общедоступный Docker Hub или настроить свой собственный сервер реестра.

    https://docs.docker.com/registry/

    23.02.2016
  • если удаленный сервер не имеет общедоступного доступа в Интернет, это решение не будет работать, но в любом случае оно полезно. 04.08.2018
  • В идеале это должен быть принятый ответ, учитывая утилиту, уже предоставленную докером. 04.11.2019

  • 7

    Вы можете использовать Bash для повторения ответа на docker images выполнение docker save -o <save image to path> <image name> для каждого изображения, а затем (при условии, что вы сохранили их все в одну папку) вы можете заархивировать его и отправить на удаленный хост.

    23.02.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..