Докер и Кубернетес не работают таким образом.Никогда не беги docker commit
.Обычно у вас очень мало потребности в ssh-демоне в контейнере / модуле, и вам нужно выполнить специальную работу, чтобы запустить как sshd, так и основной процесс (и дополнительную работу для обеспечения безопасности sshd);ваши контейнеры будут проще и безопаснее, если вы просто удалите их.
Обычный процесс включает технику, известную как неизменная инфраструктура .Вы никогда не меняете код в существующем контейнере;вместо этого вы изменяете рецепт создания контейнера и сообщаете менеджеру кластера, что хотите обновить его, и он будет сносить и перестраивать все с нуля.Чтобы внести изменения в приложение, работающее в модуле Kubernetes, вы обычно:
- Вносите и проверяете изменение кода локально, без участия Docker или Kubernetes.
docker build
новое изображение, включающее изменение вашего кода.У него должен быть уникальный тег, часто отметка даты или идентификатор фиксации управления исходным кодом. - (необязательно, но рекомендуется)
docker run
для локального изображения и запуска интеграционных тестов. docker push
theизображение в реестр. - Измените тег изображения в спецификации развертывания Kubernetes и
kubectl apply
(или helm upgrade
) его.
Часто у вас будет автоматизированный непрерывная интеграция система выполняет шаги 2-4, а система непрерывного развертывания выполняет последний шаг;вам просто нужно зафиксировать и отправить проверенное изменение.
Обратите внимание, что при локальном docker run
образе на шаге 3 вы запускаете точно такой же образ, как и ваша производственная система Kubernetes.Не поддавайтесь искушению смонтировать в него свое локальное исходное дерево и попытайтесь сделать разработку там!Если тест не пройден на этом этапе, сведите его к простейшему неудачному случаю, напишите для него модульный тест и исправьте его в своем локальном дереве.Восстановление изображения не должно быть особенно дорогим.
Ваш вопрос намекает на неизмененное ubuntu
изображение.Помимо каких-то очень ранних экспериментов типа «здравствуй, мир», практически нет причин использовать это где-либо, кроме строки FROM
в Dockerfile.Если вы еще этого не сделали, вам следует пройти официальное руководство по по созданию и запуску пользовательских образов , которое будет применимо к любой кластерной системе.(Пропустите все последующие уроки, которые охватывают Docker Swarm, если вы уже выбрали Kubernetes в качестве оркестратора.)