docker

23
История одного деплоя Stanislav Mekhonoshin

Upload: ivan-grishaev

Post on 08-Feb-2017

38 views

Category:

Engineering


0 download

TRANSCRIPT

История одного деплояStanislav Mekhonoshin

ДеплойDocker

Ansible

Vagrant

Stage 1Dockerfile per app

Кастомные скрипты для сборки Docker-image

Ansible плейбук для развертывания инфраструктуры

Ansible docker module

Пример - name: vk container docker: name: vk image: dockerhub_user/collector-vk:latest pull: always state: reloaded links: rabbitmq:rabbitmq,postgres:postgres detach: true publish_all_ports: true volumes: - "{{ ansible_env.HOME }}/config.yaml.template:/app/config.yaml.template" command: /bin/bash -c "envsubst < /app/config.yaml.template > /app/config.yaml && make run"

~ cd collector

~ vagrant up

~ bin/deploy web vk scheduler

Вот тут происходит:docker build -t user/appname .docker push user/appnameansible-playbook -i production playbooks/myapp.yml

Пример

Выигрыш от Stage 1Модно

Сервисы изолированы

Деплой гетерогенного приложения в одну команду

Проблемы Stage 1Нужен вагрант для деплоя

Слишком много conventions

Конфигурация в ansible и vagrant

Сложно линковать контейнеры(Docker legacy links)

При апдейте контейнера - надо перезапускать все зависимости

Stage 2Docker Compose

Docker for Mac

Ansible 2.2

docker_service module

Примерversion: '2'services:

postgres: container_name: postgres image: postgres:9.5 volumes: - ${DATA_MOUNTPOINT}/pg_data:/pg_data ports: - "127.0.0.1:5432:5432" environment: - PGDATA=/pg_data

redis: container_name: redis image: redis:latest command: redis-server --appendonly yes ports: - "127.0.0.1:6379:6379"

Пример - name: run all containers docker_service: project_name: "{{ project_name }}" project_src: "/{{ project_name }}" files: - docker-compose.yml - docker-compose.apps.yml environment: DATA_MOUNTPOINT: "{{ data_mountpoint }}"

Выигрыш от Stage 2Упрощение и унификация локального и production запуска

Простая связь между контейнерами

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

Vagrant больше не нужен(ну почти)

Проблемы Stage 2Хочется кластер

Говорят, что compose не для продакшена

Почему-то на python

https://github.com/docker/for-mac/issues/881

Stage 3Docker Swarm

AWS EC2

3 плейбука:

- AWS- Swarm- Apps

Swarm VS Swarm Mode

Выигрыш от Stage 3Изи масштабирование

Балансировка нагрузки

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

Docker Compose и Docker Swarm Mode не работают вместе

https://github.com/ddrozdov/docker-compose-swarm-mode

https://github.com/docker/docker/tree/master/experimental

Ansible не умеет Docker Swarm Mode => много ручной работы

https://github.com/ansible/ansible-modules-core/pull/5547

Проблемы Stage 3

Выводы

Stage 4Kubernetes

Core OS

CI