1. Введение
В экосистеме Docker есть множество инструментов и функций, которые иногда могут сбивать с толку. В этой короткой статье мы рассмотрим разницу между командами сохранения
и экспорта
Docker .
2. Образы Docker против контейнера
Чтобы понять разницу между этими двумя командами, мы должны сначала понять разницу между образами Docker и контейнерами .
Образ Docker — это файл, содержащий все файлы, необходимые для запуска приложения . Сюда входят все файлы операционной системы, а также код приложения и все необходимые вспомогательные библиотеки.
Контейнер Docker — это запущенный образ Docker . Контейнер — это, по сути, работающее приложение. Контейнеры потребляют ресурсы памяти и ЦП, как обычные процессы, а также могут получать доступ к файловым системам и взаимодействовать с другими контейнерами через сетевые протоколы.
Контейнеры и образы Docker аналогичны классам и объектам Java. Класс Java — это план создания объекта, точно так же, как образ Docker — это план создания контейнера . И точно так же, как один класс может быть реализован в нескольких объектах, образ Docker можно использовать для запуска нескольких контейнеров.
Имея это в виду, мы можем более подробно рассмотреть разницу между командами сохранения
и экспорта
Docker .
3. сохранить докер
Команда Docker save
используется для сохранения образа Docker в tar-файл . Эта команда полезна для перемещения образа Docker из одного реестра в другой или просто для проверки содержимого образа с помощью команды Linux tar
.
По умолчанию команда выводит содержимое tar-файла в STDOUT, поэтому типичное использование:
docker save IMAGE > /path/to/file.tar
Обратите внимание, что мы также можем указать файл для печати содержимого, чтобы перенаправление не требовалось:
docker save -o /path/to/file.tar IMAGE
Параметр IMAGE
в любом случае может принимать одно из двух значений:
- Полное имя образа, например «ghcr.io/foreach/my-application:1.2.3».
- Хэш изображения, сгенерированный Docker, например, «c85146bafb83»
4. экспорт докера
Команда экспорта
Docker используется для сохранения контейнера Docker в tar-файл . Сюда входят как файлы изображений, так и любые изменения, внесенные во время работы контейнера.
Синтаксис точно такой же, как у команды сохранения
. Как и save
, команда экспорта
отправляет вывод в STDOUT, поэтому нам нужно перенаправить его в файл:
docker export CONTAINER > /path/to/file.tar
Или мы можем указать имя выходного файла:
docker export -o /path/to/file.tar CONTAINER
В обоих случаях параметр CONTAINER
может принимать одно из следующих значений:
- Имя контейнера, сгенерированное автоматически или указанное при запуске контейнера.
- Уникальный хэш контейнера, назначенный движком Docker.
5. Отличия
Хотя команды похожи по своей природе, есть некоторые различия, о которых следует знать. Обе команды создают tar-файлы, но включаемая информация различается.
Команда сохранения
сохраняет информацию о слое изображения, включая всю историю и метаданные . Это позволяет нам полностью импортировать tar-файл в любой реестр Docker и использовать его для запуска новых контейнеров.
И наоборот, команда экспорта
не сохраняет эту информацию . Он содержит те же файлы, что и образ, запустивший контейнер, но без истории и метаданных.
Кроме того, команда экспорта
включает изменения, сделанные во время работы контейнера, например новый или измененный файл. Это означает , что разные контейнеры из одного и того же образа могут создавать разные файлы tar при их экспорте .
6. Заключение
В этом руководстве мы рассмотрели различия между командами сохранения
и экспорта
Docker . Хотя они оба имеют схожий синтаксис и создают файлы tar, они служат двум различным целям . Команда сохранения
используется для изображений, а команда экспорта
— для контейнеров.