57
контейнерная революция GetDev.Net

Docker контейнерная революция

Embed Size (px)

Citation preview

контейнерная революция

GetDev.Net

План

● Docker как тренд

● Зачем нужен Docker?

● Hypervisor vs. Container

● Контейнеры на Linux: почему Docker выстрелил?

● Демо!

● Docker на Windows и другое

Docker как тренд

*

Docker как тренд

Docker как тренд

Docker как тренд: GitHub

>23K GitHub repos**Сегодня больше vs. >43K “angular”, >61K “jquery”

Docker как тренд: Microsoft Azure

http://azure.microsoft.com/blog/2014/10/15/new-windows-server-containers-and-azure-support-for-docker/

Docker как тренд: “New Java”

http://blogs.gartner.com/david_m_smith/2014/10/21/docker-is-the-new-java/

Проблема

Развёртывание (deploy) приложений сложнее, чем могло бы быть

http://localhost

http://продакшон.ru

http://продакшон.ru

Что хочется

Придумать волшебную кнопку:“Опубликовать приложние где угодно”

“To build the ‘button’ that enables any application to be built and deployed on any server, anywhere.”

Выдержки из http://www.slideshare.net/dotCloud/why-docker

Проблема

Проблема (matrix of doom)

Проблема (аналогия)

Проблема (matrix of doom)

ПроблемаА если вы на него бочку катите, то это уже...

Решение: контейнеризация

Решение: контейнеризация

Почему бы не поступить так же с софтом?

Решение: Docker

Продолжаем аналогиюГрузовой контейнер Software container

Любое наполнение

Содержит любой груз Содержит любые приложения

Любое место Склад, поезд, порт, корабль, самолет, прицеп...

Ноутбук, VM, IaaS,выделенный сервер, VPS, private cloud...

Изоляция Можно ставить наковальни на бананы

Предотвращение конфликтов библиотек и окружения

Эффективность Единые стандарты: известно как хранить и “двигать”

Разделение обязанностей

Отправителю важен груз, перевозчику - доставка

Разработчику важен код, оператору - инфраструктура

Виртуальные машины?

VM: суть

Жир!

App 1 App 1’ App 2

Env 1 Env 1 Env 2

Гостевая ОС Гостевая ОС Гостевая ОС

ОС + гипервизор / аппаратный гипервизор

Железо

Полезная нагрузка

VM: минусы

● Долгий старт

● Потребление ресурсов ⇨ низкая плотность

● Гостевая ОС думает, что она самая главная

● Невозможность каскадирования (nested VM)

● Накладные расходы: 5-15%

VM: суть

“Our cloud-based IT world is founded on hypervisors. It doesn’t have to be that way – and, some say, it shouldn’t be. Containers can deliver more services using the same hardware you’re now using for virtual machines”

http://blog.smartbear.com/web-monitoring/why-containers-instead-of-hypervisors/

Контейнеры: легкая виртуализацияApp 1 App 1’ App 2

Env 1 Env 1 Env 2

Гостевая ОС

Гостевая ОС

Гостевая ОС

ОС + гипервизор

Железо

A1 A1’ A1’A2 A2’

A3 A3’ A3’

Extra libs

Env 1 Env 2

ОС + tools

Железо

Контейнеры — не новость● Применяются уже лет 15

● chroot

● UNIX: Solaris zones, BSD jails, AIX WRAPS

● Windows: iCore Virtual Accounts, Parallels Containers

● Linux: Virtuozzo ⇨ OpenVZ, Linux V-Server, LXC, docker

Контейнеры — не новость● Применяются уже лет 15

● chroot

● UNIX: Solaris zones, BSD jails, AIX WRAPS

● Windows: iCore Virtual Accounts, Parallels Containers

● Linux: Virtuozzo ⇨ OpenVZ, Linux V-Server, LXC, docker

THE FOLLOWING SLIDES CONTAIN COARSE LANGUAGE -- INCLUDING

BUT NOT LIMITED TO “LINUX”, “KERNEL”, “CONSOLE” -- AND DUE TO THEIR CONTENTS SHOULD NOT BE

VIEWED BY ANYONE ■

История контейнеров в Linux

2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014

mount namespaces

Virtuozzo (custom kernel) OpenVZ

cgroups

LXCdocker

kernel 3.8

rocket

(redesign)

namespaces

раннее средневековье возрождение новое время

уменьшение patchset-а

Kernel namespaces & cgroups

namespaces (pid, net, ipc, mnt, uts, user) — изоляция процессов

cgroups — учёт и ограничение потребляемых ресурсов

Являются встроенными низкоуровневыми фишками (примитивами) ядра

+ AppArmor, SELinux, capabilities, GRSEC, PAX,... (security)

Kernel namespaces & cgroups

Ядро (Linux kernel)

Обычные процессы ns1

/, eth0, 2CPU, 1GB

1 Ruby 1.9.32 nginx 1.73 MySQL 5.3

1 init2 cron3 sshd4 ntp...

ns2

/, eth0, 1CPU, 512MB

1 Ruby 1.9.12 nginx 1.43 MySQL 5.0

OpenVZ vs. LXC vs. Docker vs. X

● Мощные production-ready инструменты

● Умеют делать всё что нужно (плюс-минус нюансы)

● Спрашивать, кто лучше = holywar

http://ru-openvz.livejournal.com/1970.html

Но почему Docker так выстрелил?

Docker, кто же ты?

● Сам не является технологией контейнеризации

● Поддерживает разные среды выполнения

● Docker — система упаковки и доставки приложений

“Pack, ship, and run any application as a lightweight, portable, self-sufficient

container that runs virtually anywhere” (James Bottomley, CTO, Parallels)

http://stackoverflow.com/q/17989306

Dockerexecution drivers

до версии 0.9 Docker - обёртка надLXC

начиная с 0.9введена абстракциясреды выполнения

Docker: application-centric

Цель — не создать изолированное окружение (“легковесную виртуалку”), а

запустить приложение

“Докеризация” (dockerizing) — приведение приложения к виду, пригодному для запуска в Docker-контейнере

Docker: versioning, reuse, sharing

Многослойная файловая система (union mount: AUFS и др.) в совокупности с copy-on-write делает контейнеры похожими на git-репозитории: ревизии, тэги, commit,

history, registry, pull, push, base image, DockerHub

Docker: versioning, reuse, sharing

scratch

ubuntu 14.04

mono 3.10

debian 7

mysql 5.5

ubuntu 14.04

apache2

php 5.5

wordpress1

mysql 5.5

mono 3.10 asp-vNext super-app

registry

db1app1

app2

pull

pull

pull

Docker: versioning, reuse, sharingUnion mount, copy-on-write, AUFS, layers, ...

Docker: versioning, reuse, sharingUnion mount, copy-on-write, AUFS, layers, ...

● Образ как VCS

● Экономия места

● Быстрый перенос/deploy

● Экономия памяти (“buffer cache is happy”)

Docker: versioning, reuse, sharing

Docker: automated build# Dockerfile

FROM ubuntu:14.04

ENV opa=123 key=eprst

RUN apt-get install -y mysql-server

ADD start.sh /

CMD [ “/start.sh” ]

Docker: deployment, tools

● Командная строка

● RESTful API

● импорт/экспорт образов, единый формат!

● Управление кластерами: compose, machine, swarm

● Поколение специальных ОС: Boot2Docker, CoreOS,

Ubuntu Snappy, Project Atomic

Демонстрация

Docker на Windows?15 октября 2014 Microsoft и Docker сообщают о стратегическом сотрудничестве

Docker на Windows: обещания

#1 В следующий Windows Server (Q3 2015) будут

добавлены аналоги namespaces/cgroups

Docker PR: “a Microsoft led initiative to add container capabilities (e.g. the

equivalent of namespaces and cgroups) to Windows”

Docker Roadmap: “The next Microsoft Windows Server will ship with

primitives to support container-based process isolation and resource

management”

Docker на Windows: обещания

#2 Docker будет работать нативно под Windows

Docker PR: “a new Docker Windows Daemon, which will be built in open

source under the aegis and governance of the Docker project”

Microsoft PR: “Docker Engine, the open source runtime that builds, runs and

orchestrates containers, will work with the next release of Windows Server”

Docker на Windows: обещания

#2 Docker будет работать нативно под Windows

Docker на Windows: обещания

Клиентская часть docker.exe уже работает

TechEd EU 2014 Keynote, Марк Русси ́нович (CTO, Azure)

http://youtu.be/ktrEh0rA9DY?t=1h19m46s

Docker на Windows: обещания

#3 Мультиконтейнерные приложения: Windows и Linux

Docker PR: “The overall Docker platform, which will also be extended (in the

open) to support both the Docker Windows Daemon and the Docker Linux

Daemon”

Microsoft PR: “Microsoft has also announced its contribution to Docker’s open

orchestration APIs, ensuring portability for multicontainer applications”

Docker на Windows: обещания

#3 Мультиконтейнерные приложения: Windows и Linux

Docker на Windows: сегодня

● Внутри виртуальной машины общего назначения

● Boot2Docker (спец. образ VirtualBox)

Другие важные аспекты

● Один процесс или много процессов?

● Как связывать контейнеры?

● Монтирование томов

● Image trust

● Что делать с логами?

● Как ограничивать ресурсы (CPU, RAM)?