Автоматический скрипт для запуска docker exec
почти никогда не является хорошей практикой.
В этом случае стандартная практика Docker довольно ясна. Весь код вашего приложения принадлежит образу Docker. Вы никогда не пытаетесь обновить код или зависимости в работающем контейнере;вместо этого вы создаете новый образ с новым кодом, а затем заменяете старый контейнер новым.
Таким образом, для каждого хранилища исходного кода поместите Dockerfile
в его корневой каталог (если нетне там уже). Всякий раз, когда у вас есть изменения, запустите что-то вроде
docker build -t myorg/myapp:$(git rev-parse HEAD)
docker push myorg/myapp:$(git rev-parse HEAD)
В системе, где вы на самом деле их внедряете, вы можете
TAG=0123456789abcdef0123456789abcdef01234567
docker pull myorg/myapp:$TAG
docker stop myapp
docker rm myapp
docker run --name myapp ... myorg/myapp:$TAG
Существует множество вспомогательных программ, которые могут упроститьэто. Инструмент оркестровки контейнера *1013* может обработать последовательность остановок и перезапусков;Docker Compose немного легок для многих рабочих нагрузок производственного уровня, но вы можете просто изменить тег изображения в его docker-compose.yml
и повторно запустить docker-compose up -d
, и он справится с этим для вас. Возможно, вы захотите, чтобы частный реестр Docker содержал изображения, и сервер непрерывной интеграции , который будет выполнять эти шаги для вас при каждой регистрации.
пара преимуществ этой настройки. Из вывода docker ps
очевидно, какие версии кода вы на самом деле используете. Если развертывание идет плохо, вы можете очень легко вернуться к предыдущей сборке. Настроить предварительную среду с точным набором возможных сборок очень просто;создание тестов против него - это некоторая работа, но вы можете решить просто не развертывать данное изображение, если оно не работает.
В качестве дополнительного бонуса ваши изображения могут быть меньше (поскольку не требуетсяинструмент управления), и вам не нужно вводить учетные данные для доступа к управлению исходным кодом в производственной среде.