Доклад - https://www.youtube.com/watch?v=lJsqRwULRVA
Какие проблемы решаем?
быстрый вход нового разработчика в проект
стандартизация настроек разработчиков
переключение между проектами - разные версии ПО и библиотек (mysql 5.6/5.7, node 0.12/7.2)
приучаем разработчиков к сетевому взаимодействию компонентов
Microservice - масштабирование/разделения разработки
Делим ресурсы staging среды между проектами
Report
Share
Report
Share
1 of 30
More Related Content
Процесс разработки и тестирования с Docker + gitlab ci
2. О чем доклад?
● Продолжаем изучать docker и учить других (https://goo.gl/pXlO6U)
● Делимся опытом
● проповедуем докеризацию всего :-)
3. Какие проблемы решаем?
быстрый вход нового разработчика в проект
стандартизация настроек разработчиков
переключение между проектами - разные версии ПО и библиотек (mysql
5.6/5.7, node 0.12/7.2)
приучаем разработчиков к сетевому взаимодействию компонентов
Microservice - масштабирование/разделения разработки
4. Инструменты:
1. docker - Dockerfile - как документация описания зависимостей
2. docker-compose - инструмент связывающий компоненты
3. gitlab - хранилище кода
4. gitlab-ci - Система интеграции
8. База данных - mysql
Фиксируем версию базы в проекте
Единый hostname/login/password для всех разработчиков
начальная настройка конфигурации базы данных
9. Backend
Системная версия ruby/python/nodejs/etc.
Не нужно переключаться между версиями, pyenv/rbenv/etc
Появляется возможность версионирования изменений кода + зависимостей
Результат сборки везде одинаковый
12. Делаем микросервисы - контейнеры
Переиспользование кода в новых проектах. Как интегрировать?
A. db-api - mysql 5.7
B. rest-api - Ruby 2.3 on Rails 5
C. nginx - static files
D. admin - rest-client - javascript nodejs v7
E.push-msg сервис по api
a. nodejs v4.2
b. db-push v5.7
13. Добавляем в проект docker
Добавляем в проект Dockerfile
в docker-compose.yml описываем зависимости и компоненты
добавляем папку docker где храним конфиги сервисов
docker
├── mysql
│ ├── entrypoint.sh
│ └── my.cnf
└── nginx
└── static.conf
14. Объединяем компоненты в development
Добавляем репозиторий отвечающий за совместный запуск компонентов
dockerized-app
./
├── admin
├── dockerized-app
├── informer_api
└── push-msg
15. Объединение компонентов - docker-compose
Краткая документация по работе
Конфигурация - development
Запускать ядра + компоненты
Изолированная сеть
./
├── docker
│ ├── mysql
│ │ ├──
create_db_informer_push.sh
│ │ ├── entrypoint.sh
│ │ └── my.cnf
│ └── nginx
│ └── base_proxy.conf
├── docker-compose-push.yaml
├── docker-compose.yml
└── README.md
17. Доступ к приложению
dns через /etc/hosts - api.informer.dev admin.informer.dev static.informer.dev
client
nginx-proxy
host-ip:80
nginx-js-admin
10.0.9.5:80
rails
10.0.9.4:3000
nginx-static
10.0.9.3:80
images-files
virtual-network
18. Пример докеризации - mysql
1. Официальная страница - https://hub.docker.com/_/mysql/
2. docker-entrypoint.sh - правим для своих нужд инициализации
3. Конфигурация через ENV variables (docker-compose.yml)
MYSQL_ALLOW_EMPTY_PASSWORD: 1
MYSQL_USER: api
MYSQL_PASSWORD: topsecret
MYSQL_DATABASE : api
20. Часть 2
gitlab-ci и Staging в облаках
Доклад по gitlab - https://goo.gl/uohKjI
simplecloud - https://goo.gl/KfytA8
21. gitlab-ci - просто добавь .gitlab-ci.yml
stages:
- test
- deploy
test:
stage: test
script:
- docker-compose -f docker-compose-staging.yml build api-test
- docker-compose -f docker-compose-staging.yml run api-test rake db:migrate test
deploy_staging:
stage: deploy
script:
- docker-compose -f docker-compose-staging.yml down
- docker-compose -f docker-compose-staging.yml up -d
- docker-compose -f docker-compose-staging.yml run api rake db:migrate
only:
- master
22. Gitlab Runner
GitLab Runner is written in Go and can be run as a single
Shell
Docker
Docker Machine and Docker Machine SSH (auto-scaling)
Parallels
VirtualBox
SSH
Kubernetes
26. Staging
Система состоит из компонентов - разрабатываемых не зависимо
Как организовать перезапуск части после коммита?
Как поделить 80 порт между 2, 3, … 5x приложениями?
27. Ответы:
Настраиваем 1 gitlab-runner на репозитарии проекта.
Создаем виртуальную сеть для использования в docker-compose.yml
Для каждого microservice описываем свой docker-compose.yml
Выносим nginx-proxy-balancer в отдельный docker-compose.yml
подключаем в него созданные виртуальные сети.
28. root в контейнере и non root user:
По умолчанию пользователь в контейнере root и созданные файлы получают права
root:root
Можно создать пользователя и выполнять приложение от его имени
sudo/gosu/setuid/Dockerfile USER
Если uid и gid в контейнере и пользователя разработчика не совпадут - проблема с
правами
Проблему решили:
RUN groupadd --gid 1000 app && useradd --uid 1000 --gid 1000 app --shell /bin/bash