Continuous deployment с помощью docker cloud

Andrew S.
Mad Devs — блог об IT
3 min readMar 29, 2017
Докер.

Настроим непрерывный деплой статичного стайта на DO с помощью Docker Cloud.

Docker Cloud — единый инструмент, позволяющий автоматически билдить имейджи и публиковать их в registry, запускать тесты, создавать из существующих или вновь созданных имейджей сервисы и их стеки на инфрастуктуре, которой так-же управляет. Сама инфраструктура может быть развернута как на обычных нодах так и в swarm-кластере используя ресурсы популярных провайдеров типа DO, Amazon, Azure или подключать свои имеющиеся.

Мы будет использовать клауд в стандартном режиме. В Cloud Settings привяжем GitHub и Digital Ocean аккаунты

Привязка аккаунтов.

Это в общем-то вся предварительная настройка, в следующий раз за пределы Docker Cloud мы выйдем при настройки ДНС.

В разделе Build -> Repositories создадим новый докеровский репо в регистри, укажем репо гитхаба, который будет билдиться при git push, можно указать конкретную ветку(или regex) и кастомный докерфайл.

Наш имейдж будет билдиться при каждом пуше в гит-репо и публиковаться на https://hub.docker.com/.

Далее в разделе INFRASTRUCTURE -> Nodes создадим ноду, куда будет деплоиться наш имейдж:

После нажатия кнопки Launch запустится поднятие виртуалки на DO с установленным докером и запущенным агентом docker-cloud, по завершении в списке появится наша нода со статусом Deployed.

Итак, у нас все готово для деплоя. Немного отступим назад — у нас очень простой сервис, который является набором статичных файлов: html, css, js, их сервит nginx, и по сути вся настройка контейнера — это паблишинг портов наружу.

В разделе APPLICATIONS -> Services -> Create выберем наш докеровский репо, созданный выше, и перейдем к настройке сервиса:

Deployment Constraints.

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

Deployment Constraints.

И настроили паблишинг портов. Это так-же даст команду клауду создать публичные endpoints по котором мы можем коннектиться к портам сервиса или отдельного контейнера.

Настроим на DO ДНС для нашей ноды. Вроде все работает однако нет SSL. Для этого удалим наш сервис и создадим заново, но уже в стеке с такими полезными проектами, как

Стек-файл, по сути тот-же compose с небольшими дополнениями для деплоя сервисов. Наш стек-файл имеет вид:

nginx-proxy: 
restart: always
image: jwilder/nginx-proxy
ports:
- 80:80
- 443:443
environment:
- DEFAULT_HOST=maddevs.io
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /data/certs/:/etc/nginx/certs:ro

le-companion:
restart: always
image: jrcs/letsencrypt-nginx-proxy-companion
volumes_from:
- nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /data/certs/:/etc/nginx/certs:rw

maddevsio:
restart: always
image: maddevsio/maddevsio
autoredeploy: true
environment:
- VIRTUAL_HOST=maddevs.io
- VIRTUAL_PORT=80
- LETSENCRYPT_HOST=maddevs.io
- LETSENCRYPT_EMAIL=rock@maddevs.io

Его мы добавляем в APPLICATIONS -> Stacks, после чего запускаем Deploy. Виртуальные переменные, заданные в нашем сервисе пнут nginx-proxy и letsencrypt-companion создать вхост и сгенерить ссл сертификаты.

Теперь наш проект доступен по адресу https://maddevs.io/.

Хочешь узнать больше о Mad Devs.

--

--