Полная разработка | DevOps

Автоматическое развертывание Docker с помощью Watchtower

Сторожевая башня | Докер | Докер Сочинять

За последние пару недель у меня было небольшое требование о том, как мы можем развернуть образ докера, который мы опубликовали в реестре контейнеров докеров. Было несколько способов, включая ручное извлечение и развертывание, и сторожевая башня дала мне лучшее решение на данный момент.

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

На данный момент я объяснил, как мы можем настроить конвейер Gitlab CI для приложения angular, и вы можете скачать все исходники с Gitlab. Итак, с реализацией CI мы уже опубликовали исходники приложений в реестре докеров Gitlab. Начнем оттуда.

Запуск сторожевой башни

Watchtower — это просто еще один док-контейнер, способный прослушивать изменения, происходящие в развернутых док-образах. Итак, сначала нам нужно настроить докер и сторожевую башню поверх докера.

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

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

$ docker run -d --name watchtower   --restart always   -v /var/run/docker.sock:/var/run/docker.sock   v2tec/watchtower   -i 30
  • Здесь сторожевая башня зависит от того, как она может получить доступ к Docker API, поскольку сторожевой башне необходим доступ к экземплярам докеров, чтобы фиксировать изменения из исходного реестра докеров и развертывать опубликованные изменения. Вот почему мы монтируем /var/run/docker.sock как том.
  • В дополнение к сторожевой башне по по умолчанию проверка изменений с 5-минутными интервалами, но с этой настройкой я настраиваю проверку изменений каждые 30 секунд, используя -i 30 при запуске сторожевой башни .

Запуск контейнера докеров с угловым образом приложения

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

Сначала запустите приложение, используя докер с последним образом докера приложения,

$ docker pull javatodev/angular-ci-cd-app
$ docker run -p 80:80 -d javatodev/angular-ci-cd-app:latest

Теперь у нас есть запущенный экземпляр докера с прослушивателем сторожевой башни, который прослушивает реестр Docker,

И вы должны иметь доступ к приложению с помощью общедоступного IP-адреса на сервер с портом 80.

Теперь мы можем опубликовать изменения в исходниках и опубликовать их в реестре Docker Hub.

Все сделано, и это то, что мы можем видеть в журналах сторожевой башни,

и образ докера имеет последнюю версию с новым образом,

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

Все готово, теперь все приложения, развернутые на этом сервере, будут обновлены, когда мы обновим исходники и опубликуем новые образы Docker в соответствующих реестрах Docker.

Настройка аутентификации для частных реестров Docker

Существует дополнительная конфигурация, которую мы должны выполнить в тех случаях, когда мы используем частные реестры докеров, такие как Gitlab, Github, или ваши собственные настройки реестра докеров.

Здесь обычно, если нам нужно получить доступ к любому частному реестру докеров, мы вставляем команду входа в докер, как показано ниже:

$ docker login registry.gitlab.com
Username: xxxxxxxxxxxxxx
Password:
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

Здесь конфигурация учетных данных создана и сохраняется в среде сервера (/home/ubuntu/.docker/config.json). Вот пример файла,

Итак, мы можем перезапустить нашу сторожевую башню, добавив этот файл в качестве конфигурации, используя новый том,

$ docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /home/ubuntu/.docker/config.json:/config.json v2tec/watchtower -i 30

Теперь сторожевая башня может использовать сохраненный файл учетных данных и извлекать новые образы докеров из частного реестра.

Здесь, как я продемонстрировал, все компоненты обновляются, когда в соответствующем реестре докеров публикуется новая версия. Лучше установить стабильные версии для образов докеров, таких как базы данных (MongoDB, PostgreSQL и т. д.), серверы приложений (Tomcat, экземпляры PHP и т. д.), поскольку мы не обновляем контейнеры докеров, подобные тем, которые могут привести к проблемам с несовместимыми версиями в вашем приложении. разработки.

Спасибо за прочтение.