4. Что такое Docker?
Docker is an open platform for developers and sysadmins
to build, ship, and run distributed applications
5. Какие проблемы решает?
На настройку окружения вручную каждый раз
уходит много времени
Спустя какое то время, сложно разобраться,
в каком состоянии сервер/набор софта
Различия в dev-окружениях разработчиков
и боевых серверах
Сервер - помойка, никто не знает, что будет
если удалить пакет XXXXXX
Сложно накатывать обновления софта и
security-фиксы
Мигрировать на другой хостинг/сервер - боль
Выкатывать релизы - страшно
Хочется Continuos Delivery
7. Многие из этих проблем уже решены в известных системах
управления конфигурациями (chef / puppet / ansible /salt)
так всё же зачем
нам Docker?
Стоп!!!
8. Всё ещё остаётся проблема различия версий пакетов
Идея контейнеризации и изоляции
Выделение ресурсов
Docker advantages
Интеграция с CI
12. Linux Containers (LXC)
интерфейс, предоставляющий доступ
к возможностям ядра Linux,
который позволяют запускать и управлять
контейнерами
https://linuxcontainers.org/lxc/introduction/
14. Docker против виртуальных машин:
где профит, Карл?
Контейнеры запускаются в той же операционной системе,
что и хост
AuFS в качестве файловой системы
Ресурсы между хостом и контейнером расшарены
Быстрый запуск (секунды против минут для полностью
виртуализированной системы)
VM живёт вечно, контейнер - запускается и удаляется
25. Docker: простой, как git
Образы отнаследованы от родителя
Base Image - начальный образ
Для нового образа мы можем
воспользоваться любой версией уже
существующего образа (image)
Коммиты создают новый образ
26. Dockerfile
FROM ubuntu:trusty
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -qq && apt-get install -y mysql-server-5.5
ADD my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 664 /etc/mysql/conf.d/my.cnf
ADD run /usr/local/bin/run
RUN chmod +x /usr/local/bin/run
VOLUME ["/var/lib/mysql"]
EXPOSE 3306
CMD ["/usr/local/bin/run"]
33. Docker: полезные бонусы
Docker Compose (ранее - fig) - простой инструмент для
запуска контейнеров из специального конфига
web:
build: ./Dockerfile
links:
- db
- redis
ports:
- "8000:8000"
db:
image: postgres
redis:
image: redis
$ docker-compose up
34. Docker: полезные бонусы
нет необходимости в Vagrant и виртуальных машинах
(VirtualBox, Parallels)
$ docker-compose up
Docker Compose (ранее - fig) - простой инструмент для
запуска контейнеров из специального конфига
35. Docker: полезные бонусы
нет необходимости в Vagrant и виртуальных машинах
(VirtualBox, Parallels)
$ docker-compose up
Docker Compose (ранее - fig) - простой инструмент для
запуска контейнеров из специального конфига
36. Docker: деплой
Docker Compose хорош для того, чтобы контейнеры
запускать, но не очень крут тогда, когда
контейнеры надо перезапустить
37. Docker: деплой
Docker Compose хорош для того, чтобы контейнеры
запускать, но не очень крут тогда, когда
контейнеры надо перезапустить
Для zero-downtime нужно немного
терпения: nginx + два хоста в upstreams
на новый и старый контейнер
38. Docker: деплой
upstream docker {
server 127.0.0.1:8080;
server 127.0.0.1:8080;
}
server {
listen 80;
location / {
proxy_pass http://docker;
}
}
40. Docker: деплой
Проблемы со сборкой в облаке:
* лежит хостинг образов - не можем деплоить
* бесплатные тарифные планы ущербны
* сложно спрогнозировать скорость сборки
41. Docker: деплой
CI, которые поддерживают Docker:
Jenkins (plugin)
CircleCI
Buildkite
dron.io
shippable
…и многие другие
42. Docker: деплой
Сборка и хостинг образов в облаке:
quay.io
tutum.co
dotcloud.com
stackdock.com
…и многие другие
43. Docker: деплой
Благодаря Docker, Continous Integration
сервера способны:
* запускать 1:1 актуальное окружение
* собирать одновременно много сборок
* обеспечивать изоляцию между процессами сборки
* запускать тесты в параллель
45. Centurion от New Relic: этакая “capistrano”
для docker контейнеров
Docker: deployment для полугика, полухомячка
46. Centurion от New Relic: этакая “capistrano”
для docker контейнеров
bundle exec centurion -e production -a deploy
Docker: deployment для полугика, полухомячка
47. Docker: deployment для хомячков
cloud66.com
* работает c DigitalOcean и AWS
* метрики
* бэкапы
* нотификации
* firewall
* не нужно беспокоиться о
heartbleed/shellshock/poodle
* деплой с айфончика
50. Docker: выводы
Если у вас нет проблем с dependecy hell и запуском
окружения, то ни системы управления конфигурациями,
ни докер вам не нужны
51. Docker: выводы
Если у вас нет проблем с выкаткой
в продакшн,
то ни системы управления конфигурациями,
ни докер вам не нужны
52. Docker: выводы
Если есть какая то боль, и автоматизации
хочется, попробуйте Ansible
https://github.com/ansible/ansible
53. Docker: выводы
Если у вы расстроились в chef / puppet / ansible /salt,
или хотите получить всю выгоду от абстракций более
высокого уровня - контейнеров - пробуйте docker.