Является ли хорошей практикой использование сценария оболочки для выполнения git pull для нескольких контейнеров Docker? - PullRequest
1 голос
/ 07 октября 2019

У меня есть устаревший проект, в котором есть несколько контейнеров Docker на сервере, которые используют код из одного и того же git-репозитория.

В настоящее время, если в коде есть обновление, мне нужно подключиться к каждому контейнеру док-станции, а затем вытянуть код один за другим.

Например, мне нужно запустить

docker exec -it {container_id} bash

, а затем выполнить команду git pull несколько раз.

Итак, я подумал о создании сценария оболочки для автоматического обновления всех контейнеров Docker 1 раз. Но я не уверен, что это хорошая практика.

Ответы [ 2 ]

3 голосов
/ 07 октября 2019

Автоматический скрипт для запуска 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 очевидно, какие версии кода вы на самом деле используете. Если развертывание идет плохо, вы можете очень легко вернуться к предыдущей сборке. Настроить предварительную среду с точным набором возможных сборок очень просто;создание тестов против него - это некоторая работа, но вы можете решить просто не развертывать данное изображение, если оно не работает.

В качестве дополнительного бонуса ваши изображения могут быть меньше (поскольку не требуетсяинструмент управления), и вам не нужно вводить учетные данные для доступа к управлению исходным кодом в производственной среде.

0 голосов
/ 07 октября 2019

простой сценарий оболочки для выполнения команды во всем Docker-контейнере будет

#!/bin/bash

CON=$(docker ps -aq)

for i in $CON
do
        echo $i
        docker exec -it $i bash -c 'echo \"Hello\"'
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...