все новое программное обеспечение и пакеты, которые я установил, стираются - так как они не указаны в файле Docker
Это ошибка: исправьте ее.
Как правило, вы не должны устанавливать программное обеспечение в интерактивную оболочку в контейнере.Как вы заметили, вы потеряете всю свою работу при выходе из контейнера, и, поскольку вы не записали что-либо в свой Dockerfile, у вашего коллеги или рабочей среды нет хорошего способа воспроизвести то, что вы сделали.
Я бы предложил рабочий процесс:
Создание работающего приложения без использования Docker вообще.Убедитесь, что все ваших языковых зависимостей записаны в соответствующем файле (package.json
, setup.py
, requirements.txt
).Вы должны иметь возможность запускать ваше приложение в чистой среде с вашим исходным деревом и соответствующей языковой средой выполнения.
Напишите Dockerfile, который устанавливает среду выполнения языка, любые необходимые зависимости хост-библиотеки,и ваше приложение.Полученное изображение должно быть полностью автономным;вам никогда не нужно вводить docker exec
в него, чтобы что-то делать.
При обновлении приложения запускайте его тесты локально, затем docker build
новые изображения, удаляйте старые контейнеры иdocker run
новых.
Если вы просматриваете вопросы SO docker , вы увидите много комментариев в виде "пожалуйста, включите свой Dockerfile в вопрос"».Это простой воспроизводимый способ создания образа, которым вы можете поделиться со своими коллегами сейчас или самим собой через шесть месяцев.Вы никогда не должны использовать docker commit
: это рецепт для настройки самого особенного образа, который вы не можете вспомнить, как вы создали, и поэтому никогда не сможете обновить, что будет проблемой, когда у вас будет критическое обновление безопасности или новое программное обеспечениевам нужно установить.