Docker: счастье для хомячка или гика?
About me:
Ruslan Sharipov
Twitter: @sharipov_ru

Blog: monkeypatch.ru
Результаты опроса
Что такое Docker?
Docker is an open platform for developers and sysadmins

to build, ship, and run distributed applications
Какие проблемы решает?
На настройку окружения вручную каждый раз

уходит много времени
Спустя какое то время, сложно разобраться,

в каком состоянии сервер/набор софта
Различия в dev-окружениях разработчиков 

и боевых серверах
Сервер - помойка, никто не знает, что будет

если удалить пакет XXXXXX
Сложно накатывать обновления софта и 

security-фиксы
Мигрировать на другой хостинг/сервер - боль
Выкатывать релизы - страшно
Хочется Continuos Delivery
Какие проблемы решает?
Многие из этих проблем уже решены в известных системах
управления конфигурациями (chef / puppet / ansible /salt)
так всё же зачем 

нам Docker?
Стоп!!!
Всё ещё остаётся проблема различия версий пакетов
Идея контейнеризации и изоляции
Выделение ресурсов
Docker advantages
Интеграция с CI
Основные принципы Docker
Контейнеризация
Пример контейнеров
rails:latest
sidekiq:latest
postgres:9.4
rethinkdb:latest
redis:latest
logstash:latest
elasticsearch:latest
> docker ps
Linux Containers (LXC)
интерфейс, предоставляющий доступ 

к возможностям ядра Linux, 

который позволяют запускать и управлять

контейнерами
https://linuxcontainers.org/lxc/introduction/
Docker architecture
Docker против виртуальных машин:
где профит, Карл?
Контейнеры запускаются в той же операционной системе,

что и хост
AuFS в качестве файловой системы
Ресурсы между хостом и контейнером расшарены
Быстрый запуск (секунды против минут для полностью
виртуализированной системы)
VM живёт вечно, контейнер - запускается и удаляется
Docker против виртуальных машин:
где профит, Карл?
Docker против виртуальных машин:
где профит, Карл?
Docker: быстрый старт

для новичков
$ docker images
Docker: быстрый старт

для новичков
Docker: быстрый старт

для новичков
$ docker pull redis:3.0.1
Docker: быстрый старт

для новичков
$ docker run -d --name redis redis:3.0.1
Docker: быстрый старт

для новичков
$ docker run -d --name redis redis:3.0.1 -p 6379:6379
Docker: быстрый старт

для новичков
$ docker run -d --name redis redis:3.0.1
Docker: быстрый старт

для новичков
Docker: простой, как git
$ docker pull

$ docker push
Docker: простой, как git
Docker: простой, как git
Образы отнаследованы от родителя
Base Image - начальный образ
Для нового образа мы можем
воспользоваться любой версией уже
существующего образа (image)
Коммиты создают новый образ
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"]
Docker: bad parts
docker != микросервисы
Docker: bad parts
в конце 2013 - в первой половине 2014 

docker был ужасно нестабилен
Docker: bad parts
нет понимания и ответа на вопрос,

а как правильно готовить?
Docker: bad parts
много маркетингового булшита вокруг
Docker: bad parts
не работает на Windows и OSX
OpenVPN
Wordpress
Gitlab
OwnCloud
Errbit

Jenkins
Redmine
Oracle XE
FreeGeoIP

Perdocker code eval
Docker: полезные бонусы
DockerHub: масса полезных контейнеров
на каждый день. Примеры:
Docker: полезные бонусы
Docker Compose (ранее - fig) - простой инструмент для
запуска контейнеров из специального конфига
web:
build: ./Dockerfile
links:
- db

- redis
ports:
- "8000:8000"
db:
image: postgres

redis:

image: redis
$ docker-compose up
Docker: полезные бонусы
нет необходимости в Vagrant и виртуальных машинах
(VirtualBox, Parallels)
$ docker-compose up
Docker Compose (ранее - fig) - простой инструмент для
запуска контейнеров из специального конфига
Docker: полезные бонусы
нет необходимости в Vagrant и виртуальных машинах
(VirtualBox, Parallels)
$ docker-compose up
Docker Compose (ранее - fig) - простой инструмент для
запуска контейнеров из специального конфига
Docker: деплой
Docker Compose хорош для того, чтобы контейнеры 

запускать, но не очень крут тогда, когда

контейнеры надо перезапустить
Docker: деплой
Docker Compose хорош для того, чтобы контейнеры 

запускать, но не очень крут тогда, когда

контейнеры надо перезапустить
Для zero-downtime нужно немного

терпения: nginx + два хоста в upstreams

на новый и старый контейнер
Docker: деплой
upstream docker {
server 127.0.0.1:8080;

server 127.0.0.1:8080;

}

server {

listen 80;

location / {

proxy_pass http://docker;

}

}
Docker: деплой
Docker: деплой
Проблемы со сборкой в облаке:



* лежит хостинг образов - не можем деплоить

* бесплатные тарифные планы ущербны

* сложно спрогнозировать скорость сборки



Docker: деплой
CI, которые поддерживают Docker:



Jenkins (plugin)

CircleCI

Buildkite

dron.io

shippable



…и многие другие



Docker: деплой


Сборка и хостинг образов в облаке:



quay.io

tutum.co

dotcloud.com

stackdock.com



…и многие другие



Docker: деплой
Благодаря Docker, Continous Integration 

сервера способны:
* запускать 1:1 актуальное окружение

* собирать одновременно много сборок

* обеспечивать изоляцию между процессами сборки

* запускать тесты в параллель





Docker: деплой для гиков
Docker + CoreOS + Fleet
Centurion от New Relic: этакая “capistrano” 

для docker контейнеров
Docker: deployment для полугика, полухомячка
Centurion от New Relic: этакая “capistrano” 

для docker контейнеров
bundle exec centurion -e production -a deploy
Docker: deployment для полугика, полухомячка
Docker: deployment для хомячков
cloud66.com
* работает c DigitalOcean и AWS

* метрики

* бэкапы

* нотификации

* firewall

* не нужно беспокоиться о 

heartbleed/shellshock/poodle

* деплой с айфончика
Docker: deployment для хомячков
Docker: deployment
HN: How do you use Docker in production?
Docker: выводы
Если у вас нет проблем с dependecy hell и запуском 

окружения, то ни системы управления конфигурациями,

ни докер вам не нужны
Docker: выводы
Если у вас нет проблем с выкаткой

в продакшн, 

то ни системы управления конфигурациями,

ни докер вам не нужны
Docker: выводы
Если есть какая то боль, и автоматизации

хочется, попробуйте Ansible
https://github.com/ansible/ansible
Docker: выводы
Если у вы расстроились в chef / puppet / ansible /salt,

или хотите получить всю выгоду от абстракций более

высокого уровня - контейнеров - пробуйте docker.
Docker: выводы
Docker может понравиться и хомячкам и гикам,

есть множество инструментов и подходов вокруг
Docker: выводы
Docker сейчас - production ready
Docker: выводы
Вокруг Docker много денег и компаний: 

относитесь к маркетинговым заявлениям

с холодной головой
Docker: выводы
Если у вас нет проблем с dependecy hell и запуском 

окружения, то ни системы управления конфигурациями,

ни докер вам не нужны
Спасибо за внимание!
Вопросы?

Docker - счастье для хомячка или ника?