Как обновить мое приложение при его развертывании с помощью Docker - PullRequest
1 голос
/ 24 апреля 2019

Я развернул приложение nodejs с помощью docker, я не знаю, как обновить развертывание после обновления моего приложения nodejs.

В настоящее время мне приходится каждый раз при обновлении приложения nodejs удалять старый контейнер докера и образ.

Я ожидаю, что при обновлении приложения nodejs не нужно удалять старое изображение и контейнер.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Вы отметили это "производство".Стандартный способ, которым я это сделал, выглядит следующим образом:

  1. Разработка локально без Docker.Пройдите все свои юнит-тесты.Соберите и запустите контейнер локально и запустите интеграционные тесты.

  2. Создайте «официальную» версию контейнера.Пометьте его отметкой времени, номером версии или тегом контроля версий;но не пометьте его :latest или именем ветви или чем-либо еще, что со временем изменится.

  3. docker push встроенный образ в реестр.

  4. В производственной системе измените конфигурацию развертывания, указав только что созданный тег версии.В некотором порядке docker run контейнер (или более) с новым изображением и docker stop контейнер (ы) со старым изображением.

  5. Когда все идет не так,измените конфигурацию развертывания обратно на предыдущую версию и повторно разверните ее.(... упс.) Если старые версии образов еще не находятся в локальной системе, их можно извлечь из реестра.

  6. При необходимости docker rm старые контейнерыи docker rmi старых изображений.

Как правило, многое из этого может быть автоматизировано.Система непрерывной интеграции может создавать программное обеспечение, запускать тесты и передавать встроенные артефакты в реестр;Менеджеры кластеров, такие как Kubernetes или Docker Swarm, способны хранить некоторое количество копий какой-либо версии контейнера, работающей где-то, и управлять процессом обновления версии для вас.(В частности, Kubernetes Deployments запустит копию нового образа перед тем, как начать закрывать старые; службы Kubernetes предоставляют балансировщики нагрузки для этой работы.)

Ничто из этого не относится к Node.Что касается системы развертывания, то нигде нет файлов .js, только образы Docker.(Вы не копируете свои исходные файлы отдельно от изображений или не привязываете к исходному дереву исходное дерево поверх содержимого изображения, и вы определенно не пытаетесь в реальном времени исправить патч работающего контейнера.) После неудачного возврата на шаге 5, вы можете запустить именно неудачную конфигурацию в непроизводственной среде, чтобы увидеть, что пошло не так.

Но да, по сути, вам нужно удалить старый контейнер со старым образом и запустить новый контейнер с новымизображение.

1 голос
/ 24 апреля 2019

Скопируйте новую версию в свой контейнер с помощью docker cp, а затем перезапустите ее с помощью docker restart <name>

...