Вы можете выполнять набор команд, которые вы показываете изначально в Docker, без использования git
или другого инструмента управления исходным кодом в рамках процесса развертывания.
Всякий раз, когда у вас есть изменения в источнике дерево, создайте новый Docker образ и поместите его в Docker хранилище. Это может быть Docker Hub или, если вы уже используете AWS, Amazon ECR. Каждая сборка должна иметь уникальный тег изображения, такой как идентификатор фиксации исходного кода или отметку времени. Вы можете настроить инструмент непрерывной интеграции, чтобы автоматически выполнять все это за вас.
После того, как вы это получите, ваш файл docker-compose.yml
должен быть обновлен до номера версии для развертывания. Если у вас есть только одно изображение, которое вы развертываете, вы можете просто использовать Compose подстановка переменных , чтобы заполнить его
image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage:${TAG:-latest}
Если у вас есть несколько изображений, вы можете установить несколько переменных среды или создайте обновленный файл docker-compose.yml
с заполненными значениями, но вам нужно знать все версии образов вместе во время развертывания.
Теперь, когда вы go развернете его, вам нужно только запустить
TAG=20200317.0412 docker-compose up -d
, чтобы установить переменную окружения и вызвать Compose. Compose увидит, что образ, который вы пытаетесь запустить для этого контейнера, отличается от того, который уже запущен, извлечет обновленный образ и заменит для вас контейнер. Вам не нужно вручную удалять старые контейнеры или останавливать весь стек.
Если git
теперь является частью вашего рабочего процесса, это, вероятно, потому, что вы монтируете код приложения в свой контейнер. Вам также необходимо удалить все volumes:
, которые перезаписывают содержимое изображения. Также убедитесь, что вы внесли это изменение в свою систему CI (таким образом, вы тестируете реальный образ, который вы развертываете в производство) и в разработке (аналогично).
Эта конкретная задача становится немного легче с кластером. Система управления, такая как Kubernetes (или Amazon EKS), хотя она приносит много других сложностей в другом месте. В Kubernetes вам нужно отправить обновленную спецификацию Deployment spe c на сервер API Kubernetes, но вы можете сделать это без прямого доступа s sh к целевой системе и только для того, чтобы знать конкретную c версию одного образа. Вы обновляете, и с несколькими репликами вы можете получить обновление без простоев. В этой настройке в основном требуется использование репозитория Docker и использование уникального тега изображения для каждой сборки: изображения являются единственным способом, которым код попадает в кластер, а изменение строки тега изображения - это то, что вызывает код для повторного развертывания.