Два способа сохранить состояние Docker: docker commit — сохранить изменения контейнера в новый образ, docker save — экспортировать образ в файл для переноса без Docker Hub.

- docker commit — снимок контейнера
- Когда использовать docker commit
- docker save — экспортировать образ в .tar файл
- docker load — загрузить образ из файла
- docker export/import — файловая система контейнера
- save vs export — в чём разница
- Просмотр истории образа
- Часто задаваемые вопросы
- docker commit или Dockerfile — что лучше?
- Как перенести Docker образ без Docker Hub?
- Как посмотреть историю образа?
- Что читать дальше по Docker
docker commit — снимок контейнера
# Запустить контейнер и что-то изменить внутри
docker run -it ubuntu bash
# Внутри установить пакеты
apt update && apt install -y python3 vim curl
exit
# Сохранить изменения в новый образ
# docker commit КОНТЕЙНЕР НОВЫЙ_ОБРАЗ:ТЕГ
docker commit CONTAINER_ID my-ubuntu:with-tools
# Или по имени (если контейнер запустили с --name)
docker run -it --name my-container ubuntu bash
# ... внести изменения ...
docker commit my-container my-ubuntu:v1
# С сообщением об изменениях
docker commit -m "Added python3, vim, curl" my-container my-ubuntu:v1
# Проверить
docker images | grep my-ubuntu
docker run -it my-ubuntu:v1 python3 --version
Когда использовать docker commit
- ✅ Быстрое прототипирование — зафиксировать рабочее состояние
- ✅ Отладка — сохранить контейнер в момент воспроизведённой проблемы
- ✅ Одноразовые эксперименты — исследовал образ, добавил что нужно
- ❌ Не подходит для продакшена — нет воспроизводимости (неизвестно что внутри)
- ❌ Не для CI/CD — лучше Dockerfile: декларативно, версионируется в git
docker save — экспортировать образ в .tar файл
# Сохранить образ в файл
docker save -o my-ubuntu.tar my-ubuntu:with-tools
# Несколько образов в один файл
docker save -o images.tar nginx:latest ubuntu:22.04 myapp:1.0
# Сжатый архив (меньше размер)
docker save my-ubuntu:with-tools | gzip > my-ubuntu.tar.gz
# Проверить размер
ls -lh my-ubuntu.tar.gz
docker load — загрузить образ из файла
# Загрузить образ на другой машине
docker load -i my-ubuntu.tar
docker load -i my-ubuntu.tar.gz
# Проверить что загрузился
docker images | grep my-ubuntu
# Запустить
docker run -it my-ubuntu:with-tools bash
Типичный сценарий: перенести образ на машину без интернета, в закрытый контур, на сервер без доступа к Docker Hub.
docker export/import — файловая система контейнера
# export — сохранить файловую систему контейнера (без истории слоёв)
docker export my-container -o container.tar
# import — создать образ из tar-архива
docker import container.tar my-image:imported
# Запустить
docker run -it my-image:imported bash
save vs export — в чём разница
| docker save | docker export | |
|---|---|---|
| Что сохраняет | Образ: все слои, история, метаданные | Файловую систему контейнера |
| Восстанавливается через | docker load | docker import |
| Сохраняет историю слоёв | ✅ Да | ❌ Нет (один плоский слой) |
| Размер файла | Больше | Меньше |
| CMD/ENTRYPOINT | Сохраняются | Теряются — нужно задать при import |
| Когда использовать | Перенести образ между серверами | Одноразовый снимок файловой системы |
Просмотр истории образа
# Посмотреть слои и команды из которых собран образ
docker history myapp:1.0
# IMAGE CREATED CREATED BY SIZE
# abc123 2 hours ago CMD ["python", "app.py"] 0B
# def456 2 hours ago COPY . . 45.2kB
# ghi789 2 hours ago RUN pip install -r requirements.txt 89.5MB
# ...
# Полные команды (не обрезанные)
docker history --no-trunc myapp:1.0
Часто задаваемые вопросы
docker commit или Dockerfile — что лучше?
Для серьёзных проектов — всегда Dockerfile. Он декларативный (понятно что внутри), версионируется в git вместе с кодом, воспроизводимый (одинаковый образ при каждой сборке), подходит для CI/CD. docker commit — для быстрых экспериментов и отладки. Аналогия: Dockerfile = рецепт, docker commit = сфотографировать готовое блюдо.
Как перенести Docker образ без Docker Hub?
Используй docker save/docker load: 1) На исходной машине: docker save myapp:1.0 | gzip > myapp.tar.gz. 2) Скопировать файл: scp myapp.tar.gz user@server:/tmp/. 3) На целевой машине: docker load -i /tmp/myapp.tar.gz. Этот подход работает в закрытых сетях, air-gapped средах, и при переносе на флешке.
Как посмотреть историю образа?
docker history имя:тег — показывает все слои образа с командами и размерами. По этой команде можно восстановить Dockerfile если он потерян. Флаг --no-trunc показывает полные команды. docker inspect имя:тег — детальная JSON информация об образе: метаданные, переменные окружения, CMD, точки монтирования.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- Dockerfile — перейти к воспроизводимой сборке через Dockerfile.
- docker build — собрать образ командой docker build.
- Docker backup — посмотреть резервное копирование данных Docker.



