Upgrade to Pro — share decks privately, control downloads, hide ads and more …

История одного деплоя - Станислав Мехоношин

История одного деплоя - Станислав Мехоношин

Deep Refactoring

December 27, 2016
Tweet

More Decks by Deep Refactoring

Other Decks in Programming

Transcript

  1. Stage 1 Dockerfile per app Кастомные скрипты для сборки Docker-image

    Ansible плейбук для развертывания инфраструктуры Ansible docker module
  2. Пример - 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"
  3. ~ cd collector ~ vagrant up ~ bin/deploy web vk

    scheduler Вот тут происходит: docker build -t user/appname . docker push user/appname ansible-playbook -i production playbooks/myapp.yml Пример
  4. Проблемы Stage 1 Нужен вагрант для деплоя Слишком много conventions

    Конфигурация в ansible и vagrant Сложно линковать контейнеры(Docker legacy links) При апдейте контейнера - надо перезапускать все зависимости
  5. Пример 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"
  6. Пример - 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 }}"
  7. Выигрыш от Stage 2 Упрощение и унификация локального и production

    запуска Простая связь между контейнерами Регламентированный порядок запуска сервисов Vagrant больше не нужен(ну почти)
  8. Проблемы Stage 2 Хочется кластер Говорят, что compose не для

    продакшена Почему-то на python https://github.com/docker/for-mac/issues/881
  9. Были проблемы с созданием кластера 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