my talk on docker from moscow django meetup #25

23
Использование Docker На работе и дома Александр Чистяков, главный инженер Git in Sky, 2015

Upload: alex-chistyakov

Post on 15-Jul-2015

999 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: My talk on Docker from Moscow Django Meetup #25

Использование Docker

На работе и дома

Александр Чистяков, главный инженер Git in Sky,

2015

Page 2: My talk on Docker from Moscow Django Meetup #25

Мы

§ Управляем инфраструктурами§ Хотим управлять всеми инфраструктурами§ Постоянно повышаем свою эффективность§ Не боимся использовать новые средства

и технологии, если это оправдано

Использование Docker. 2015

Page 3: My talk on Docker from Moscow Django Meetup #25

Вы

§ Немного пишете на Python?

Использование Docker. 2015

Page 4: My talk on Docker from Moscow Django Meetup #25

Краткий курс истории партии

§ VMWare — 1999 год§ Xen — 2003 год§ KVM — 2007 год§ Linux-VServer — 2001 год§ OpenVZ — 2005 год§ LXC — 2008 год§ Docker — 2013 год

Использование Docker. 2015

Page 5: My talk on Docker from Moscow Django Meetup #25

Docker — это гриб и радиоволна

§ Средство управления системой виртуализации§ Средство создания образов виртуальных

машин по декларативным описаниям§ Средство публикации образов§ Средство сокрытия абстракции сети

Использование Docker. 2015

Page 6: My talk on Docker from Moscow Django Meetup #25

Система виртуализации называется “cgroups”

§ Раньше Docker использовал LXC для управления

cgroups§ Теперь — собственное средство libcontainer§ Может также использовать libvirt, LXC и

systemd-nspawn

Использование Docker. 2015

Page 7: My talk on Docker from Moscow Django Meetup #25

Образы виртуальных машин

§ Описываются декларативно* через Dockerfile§ Наследуются от единственного предка

(множественное наследование невозможно)§ Публикуются на https://hub.docker.com или в частные

репозитории§ Состоят из слоев

Использование Docker. 2015

Page 8: My talk on Docker from Moscow Django Meetup #25

Докеризация это не виртуализация!

§ В чем отличие классического OpenVZ- или LXC-контейнера от Docker-контейнера:

§ Классические контейнеры это виртуальные машины целиком§ Они не иммутабельны§ (Точнее, средства управления ими не

поощряют пользователя создавать

иммутабельные структуры)

Использование Docker. 2015

Page 9: My talk on Docker from Moscow Django Meetup #25

Как выглядит список образов?

Использование Docker. 2015

Page 10: My talk on Docker from Moscow Django Meetup #25

Как выглядит Dockerfile?

Использование Docker. 2015

Page 11: My talk on Docker from Moscow Django Meetup #25

Как выглядит другой Dockerfile?

§ Хорошая практика — писать команды так, чтобы их было невозможно прочесть

§ Это минимизирует количество слоев

Использование Docker. 2015

Page 12: My talk on Docker from Moscow Django Meetup #25

Все варианты storage не без проблем

§ AUFS — число слоев, ошибка stale NFS lock§ BTRFS — сложный уход за файловой системой, нестабильная

работа§ device-mapper — хранилище конечного размера

Использование Docker. 2015

Page 13: My talk on Docker from Moscow Django Meetup #25

device-mapper

Использование Docker. 2015

Page 14: My talk on Docker from Moscow Django Meetup #25

AUFS

Использование Docker. 2015

§ Кстати, в Ubuntu Docker версии 1.0.1, а в CentOS — 1.3.2§

Page 15: My talk on Docker from Moscow Django Meetup #25

Публикация образов

§ docker push gitinsky/mysql§ https://hub.docker.com§ Когда я последний раз смотрел, код репозитория Docker был

написан на Python§ Наверное, самое большое количество негативных отзывов в

интернете о Docker связано со скоростью и стабильностью работы репозитория

§ Поэтому мы его не используем в продакшн

Использование Docker. 2015

Page 16: My talk on Docker from Moscow Django Meetup #25

Мы не используем репозиторий

§ А что вместо?§ Сначала Ansible настраивает параметры хост-машины,

устанавливает Docker и собирает images§ Примеры Ansible roles для этого:§ https://github.com/gitinsky/ansible-role-nginx-proxy-dockerized§ https://github.com/gitinsky/ansible-role-mysql-dockerized§ Потом Ansible запускает контейнеры, если они не запущены

Использование Docker. 2015

Page 17: My talk on Docker from Moscow Django Meetup #25

Как это выглядит в конце?

§ Мы начали с использования baseimage от Phusion§ И мигрируем в сторону подхода «один контейнер — одно

приложение»

Использование Docker. 2015

Page 18: My talk on Docker from Moscow Django Meetup #25

Где хранить состояние?

§ Во внешней по отношению к Docker storage локации§ Каталог монтируется внутрь контейнера через bind mount§ Как докеризовать приложение? Поселить его в контейнер и

вынести все его состояние на внешний том§ https://flocker.io - volume manager для Docker на базе ZoL

Использование Docker. 2015

Page 19: My talk on Docker from Moscow Django Meetup #25

Как контейнеры связаны друг с другом?

§ Сеть полностью абстрагирована — я даже не знаю, какие у контейнеров IP-адреса

§ Опция --link§ Порядок запуска контейнеров становится важен!

Использование Docker. 2015

Page 20: My talk on Docker from Moscow Django Meetup #25

Задача оркестрации

§ Контейнеры должны распределяться по хостам внешними механизмами и обеспечиваться ресурсами

§ Consul — service discovery tool§ Key-value storage§ DNS§ Написан на Go§ Регистрирует сервисы и позволяет их находить

Использование Docker. 2015

Page 21: My talk on Docker from Moscow Django Meetup #25

Project Atomic

§ Я использую продукты Red Hat c 1997-го года§ Эти ребята умеют делать бизнес§ Project Atomiс это:§ rpm-ostree (атомарные апгрейды системы)§ Docker§ Kubernetes — orchestration tool от Google§ Cockpit (панель управления на C и Python, не работает*)

Использование Docker. 2015

Page 22: My talk on Docker from Moscow Django Meetup #25

Выводы

§ Будущее уже наступило§ На этот корабль еще можно успеть!§ Мы используем Docker§ И будем продолжать это делать§ Чего и вам желаем

Использование Docker. 2015

Page 23: My talk on Docker from Moscow Django Meetup #25

С вами был Александр Чистяков,главный инженер Git in Sky

[email protected]://gitinsky.com

http://meetup.com/DevOps-40

Пожалуйста, ваши вопросы.

Спасибо за внимание!