SlideShare a Scribd company logo
1 of 30
Процесс разработки и
тестирования с
Docker + Gitlab CI
Сигачев А. (Inventos)
О чем доклад?
● Продолжаем изучать docker и учить других (https://goo.gl/pXlO6U)
● Делимся опытом
● проповедуем докеризацию всего :-)
Какие проблемы решаем?
быстрый вход нового разработчика в проект
стандартизация настроек разработчиков
переключение между проектами - разные версии ПО и библиотек (mysql
5.6/5.7, node 0.12/7.2)
приучаем разработчиков к сетевому взаимодействию компонентов
Microservice - масштабирование/разделения разработки
Инструменты:
1. docker - Dockerfile - как документация описания зависимостей
2. docker-compose - инструмент связывающий компоненты
3. gitlab - хранилище кода
4. gitlab-ci - Система интеграции
Часть I
Машина разработчика
Dockerfile
FROM ruby:2.3.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
EXPOSE 3000
CMD ['puma', '-C', 'config/puma.rb']
docker-compose.yml
version: '2'
services:
db:
image: mysql:5.7.14
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- db
База данных - mysql
Фиксируем версию базы в проекте
Единый hostname/login/password для всех разработчиков
начальная настройка конфигурации базы данных
Backend
Системная версия ruby/python/nodejs/etc.
Не нужно переключаться между версиями, pyenv/rbenv/etc
Появляется возможность версионирования изменений кода + зависимостей
Результат сборки везде одинаковый
frontend
Разработка react nodejs
Сборка webpack + nodejs
Отдача статики - nginx
Схема компонентов
API rest
RoR
DB
android
ios
Admin
rest-js
push task
rest
nodejs
DB
redis
android
ios
android
ios
push для устройства
browse
Делаем микросервисы - контейнеры
Переиспользование кода в новых проектах. Как интегрировать?
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
Добавляем в проект docker
Добавляем в проект Dockerfile
в docker-compose.yml описываем зависимости и компоненты
добавляем папку docker где храним конфиги сервисов
docker
├── mysql
│ ├── entrypoint.sh
│ └── my.cnf
└── nginx
└── static.conf
Объединяем компоненты в development
Добавляем репозиторий отвечающий за совместный запуск компонентов
dockerized-app
./
├── admin
├── dockerized-app
├── informer_api
└── push-msg
Объединение компонентов - 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
Описание компонентов
version: '2'
services:
balancer:
image: jwilder/nginx-proxy
....
api.informer.dev:
build: ../informer_api
….
admin.informer.dev:
build: ../admin
….
dbrw:
image: mysql:5.7.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
Пример докеризации - 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
Часть 2
gitlab-ci и Staging в облаках
Доклад по gitlab - https://goo.gl/uohKjI
simplecloud - https://goo.gl/KfytA8
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
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
Тесты пройдены новая версия доставлена
История сборок
Staging
Система состоит из компонентов - разрабатываемых не зависимо
Как организовать перезапуск части после коммита?
Как поделить 80 порт между 2, 3, … 5x приложениями?
Ответы:
Настраиваем 1 gitlab-runner на репозитарии проекта.
Создаем виртуальную сеть для использования в docker-compose.yml
Для каждого microservice описываем свой docker-compose.yml
Выносим nginx-proxy-balancer в отдельный docker-compose.yml
подключаем в него созданные виртуальные сети.
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
Планы:
Перечитать документацию docs.docker.com
Освоить swarm cluster + deploy
Центральное логирование docker-cluster -> elasticsearch
Вопросы?
Вступаем https://vk.com/orelrb
orel-rb.ru
Сигачев Александр (Инвентос)

More Related Content

What's hot

Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Fwdays
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасRuslan Sharipov
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)Ontico
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиOSLL
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into BadooAnton Turetsky
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooBadoo Development
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Ontico
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)Ontico
 

What's hot (20)

Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков"
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into Badoo
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
 

Similar to Процесс разработки и тестирования с Docker + gitlab ci

GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesVictor Login
 
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"LogeekNightUkraine
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019corehard_by
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Ruslan Sharipov
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...DrupalCamp MSK
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Как не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с DockerКак не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с Dockertrukhinyuri
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядноFallenKain
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCOMAQA.BY
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыDrupalSib
 

Similar to Процесс разработки и тестирования с Docker + gitlab ci (20)

GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
Docker в development окружение
Docker в development окружениеDocker в development окружение
Docker в development окружение
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
Как не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с DockerКак не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с Docker
 
Yulia tsuba
Yulia tsubaYulia tsuba
Yulia tsuba
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание среды
 

Процесс разработки и тестирования с Docker + gitlab ci

  • 1. Процесс разработки и тестирования с Docker + Gitlab CI Сигачев А. (Inventos)
  • 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 - Система интеграции
  • 6. Dockerfile FROM ruby:2.3.0 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /app WORKDIR /app ADD Gemfile /app/Gemfile ADD Gemfile.lock /app/Gemfile.lock RUN bundle install ADD . /app EXPOSE 3000 CMD ['puma', '-C', 'config/puma.rb']
  • 7. docker-compose.yml version: '2' services: db: image: mysql:5.7.14 web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - "3000:3000" depends_on: - db
  • 8. База данных - mysql Фиксируем версию базы в проекте Единый hostname/login/password для всех разработчиков начальная настройка конфигурации базы данных
  • 9. Backend Системная версия ruby/python/nodejs/etc. Не нужно переключаться между версиями, pyenv/rbenv/etc Появляется возможность версионирования изменений кода + зависимостей Результат сборки везде одинаковый
  • 10. frontend Разработка react nodejs Сборка webpack + nodejs Отдача статики - nginx
  • 11. Схема компонентов API rest RoR DB android ios Admin rest-js push task rest nodejs DB redis android ios android ios push для устройства browse
  • 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
  • 16. Описание компонентов version: '2' services: balancer: image: jwilder/nginx-proxy .... api.informer.dev: build: ../informer_api …. admin.informer.dev: build: ../admin …. dbrw: image: mysql:5.7.17 ….
  • 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
  • 19.
  • 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
  • 23. Тесты пройдены новая версия доставлена
  • 24.
  • 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
  • 29. Планы: Перечитать документацию docs.docker.com Освоить swarm cluster + deploy Центральное логирование docker-cluster -> elasticsearch