SlideShare a Scribd company logo
1 of 53
Docker
DEEP INTERNALS
Кто я
Меня зовут Кузьмицкий Александр. Окончил
МГВРК+БГУИР ИИТ по специальности
Информационные технологии и управление в
технических системах.
Работаю в Wargaming с 2012 года над
созданием инструментов автоматизации и
доставки ПО.
Видел Пик Ермаловича, Провал Кирейчука и прочий кровавый ентерпрайз.
Немного мемов
Тупых анекдотов
Тупой анекдот:
— Давай, убеждай меня в обратном.
— Дорогой, убедись, это обратное.
Смайлов
Что такое контейнер?
Что такое контейнер?
Что такое контейнер?
Контейнер – это процесс
Что такое контейнер?
Контейнер – это процесс
и стандартизированный юнит приложения
Что такое контейнер?
Другими словами, контейнер – это какое-то
изолированное приложение, которое что-то
делает.
Docker container
$ sudo docker run –-name test-nginx nginx
$ pid="$(docker inspect -f '{{.State.Pid}}’ test-nginx)"
$ sudo ln -sf /proc/$pid/ns/net "/var/run/netns/test-nginx "
$ sudo ip netns exec test-nginx ip a
$ sudo docker rm test-nginx
Проблемы
 Воспроизводимые легковесные окружения
 Эффективная доставка кода
 Унификация интерфейсов
 Развёртывание сервисов в условиях гетерогенного облака
 Уменьшение костов
 Виртуальные машины - дорого, долго и не всегда
эффективно
История разработки контейнеров
 2003 год создания Zones в Solaris
 2008 год создания LXC
 Docker был создан как продвинутый Chroot
 В 2013 docker стал OpenSource
 2.75 миллиона прямых загрузок за 1 год
Изоляция vs Виртуализация
Технологии ядра
 Namespaces – области видимости
 Cgroups – лимиты на использование ресурсов
 Networking – виртуализация сетевой подсистемы
 Layers – формат представления данных на диске с
помощью специально разработанных файловых систем
 Capabilities – разрешения на выполнение действий от
root
Namespaces(области видимости)
 pid: Изоляция процессов
 user: изоляция uid/gid
 net: Управление сетевыми интерфейсами
 ipc: управление доступоп к IPC ресурсам
 mnt: управление точками монтирования файловой
системы
 uts: изоляция ядра и идентификаторов
версий(hostname/domainname/architecture)
unshare – почувствуй себя хакером
# man unshare
http://man7.org/linux/man-pages/man1/unshare.1.html
 sudo unshare -pf bash; kill <pid>
 sudo unshare –u; hostname test123
 Sudo unshare –n; ip a
Cgroups
Cgroup – это коллекция процессов, которые связаны с
набором ограничений, определённых через файловую
систему cgroups.
# mount -t cgroup -o all cgroup /sys/fs/cgroup
# ls /sys/fs/cgroup
cpu, cpuacct, cpuset, memory, devices, freezer, net_cls, blkio,
perf_event, net_prio, hugetlb, pids, rdma
Networking
 Bridging
 Routing – маршрутизация трафика межу узлами
 Tunneling – работа с P2P тунелями
 Iptables
 NAT – port mapping, masquerading
 Filter - фильтрация трафика
 Network namespaces – сетевая виртуализация
Layers(Copy On Write)
Layers — формат представления данных на
диске с помощью набора слоёв с данными,
каждый из которых несёт в себе набор
файлов/директорий, которые мержатся на
верхнем уровне. Слои реализуют git-подобный
подход и существенно снижают размер
передаваемых данных по сети при копировании
и запуске контенеров.
Layers (Copy On Write)
 Overlayfs(2)
 AUFS
 Btrs
 Zfs
 …
Capabilities
Capabilities - это средства для управления привилегиями, которые в
традиционных Unix-подобных системах были доступны только
процессам, запущенным с правами root (uid==0). Этот механизм
позволяет дать процессу права на выполнениекаких-либо действий,
недоступных обычному пользователю (например, изменение системного
времени, прямой доступ к аппаратуре, использование зарезервированных
портов TCP/UDP (< 1024), блокировка страниц в физической памяти), но
в то же время не предоставлять этому процессу полный набор прав root.
“
”
Архитектура Docker
Как Docker устроен внутри
Архитектура Docker
Что такое docker
Топология инфраструктуры docker
Runc
Containerd
runc
Образы и слои
Дисковые бэкэнды Docker
Название
Утилизация
диска
Изоляция Надёжность Скорость
aufs низкая низкая низкая низкая
overlay2 низкая низкая высокая средняя
overlay низкая низкая низкая низкая
btrfs очень низкая очень высокая низкая средняя
devicemapper высокая очень высокая высокая высокая
zfs очень низкая очень высокая высокая высокая
vfs очень высокая очень высокая очень высокая очень высокая
Способы создания образов
 Проблема курицы и яйца
 docker commit
 docker build
 docker push
 docker pull
 Dockerfile
 https://hub.docker.com/
О Dockerfile подробнее
 .dockerignore – игнорирование файлов и папок при сборке контекста
 Dockerfile
 ADD
 COPY
 ENV
 EXPOSE
 FROM
 LABEL
 STOPSIGNAL
 USER
 VOLUME
 WORKDIR
Docker: устройство сетевой
подсистемы
Docker networking
http://man7.org/linux/man-pages/man4/veth.4.html
Docker: сетевые бэкэнды
 Network drivers:
 Bridge+port mapping
 Host
 Macvlan
 Ipvlan
 None
 Calico
 Weave
 CNI
 IPAM (ipv4/ipv6)
 Ip range
 Static ip
Docker: встроенные сети
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e5ca4257897c bridge bridge local
eaa67fcc08a0 host host local
74b7aedba702 none null local
* container
Docker Service discovery
 IP per container
 Hostname based service discovery
 Service Discovery в кластере
Хранение персистентных данных
Volume – это дисковое пространство между хостом и
контейнером. Другими словами – это папка на локальной
машине примонтированная внутрь контейнера.
Volume служат для хранения изменяющихся данных между
запусками контейнера.
Идеальный контейнер после запуска не вносит изменений в
свой слой. (RO Mode)
Отличия между типами Volumes
Volumes: Bind mounts
Bind mounts (-v, --mount) – способ хранения состояния
контейнера на файловой системе хост-машины.
• Базы данных
• Медиа файлы
• Данные, которые нужно шарить между контейнерами
• Позволяют примонтировать файл/сокет с хост-машины
https://docs.docker.com/storage/bind-mounts/
Volumes: docker volumes
 Волюмы отделены от контейнера и хранятся в файловой структуре
docker
 Волюмы управляются с помощью docker cli
 Волюмы могут находиться на других машинах и иметь самый разный
функционал, который обеспечивается волюм плагинами
 Волюм может иметь контент, предзаданный другим контейнером
Volumes: docker volumes
$ docker volume create my-vol
$ docker run -d --name devtest --mount source=myvol2,target=/app
nginx:latest
$ docker volume inspect my-vol
[ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-
vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ]
$ docker inspect devtest
"Mounts": [ { "Type": "volume", "Name": "myvol2", "Source":
"/var/lib/docker/volumes/myvol2/_data", "Destination": "/app", "Driver":
"local", "Mode": "", "RW": true, "Propagation": "" } ],
Volumes: tmpfs
$ docker run -d -it --name tmptest --mount
type=tmpfs,destination=/app,tmpfs-size=100mb,tmpfs-
mode=0777 nginx:latest
Лимитирование ресурсов: mem
$ --mem 4mb
Oom (https://en.wikipedia.org/wiki/Out_of_memory)
Лимитирование ресурсов: cpu
$ --cpu
cpu-quota/cpu-period
cpuset-cpus
 --cpus 0.1 means 10% of one CPU,
 --cpus 1.0 means 100% of one whole CPU,
 --cpus 10.0 means 10 entire CPUs.
Docker compose
Как работать с docker-compose:
 Описывается набор контейнеров, параметров их запуска,
волюмы, линки и прочие параметры в файле docker-
compose.yml
 Запускается команда docker-compose up
 Compose автоматически собирает, скачивает и запускает
контейнеры.
 Контейнеры могут быть запущены в бэкграунде или в
интерактивном режиме.
 Для остановки используется команда docker-compose
down
Современное облако
Sсhedulers
 K8S (https://kubernetes.io/)
 Mesos+Marathon (https://dcos.io/)
 Nomad (https://www.nomadproject.io/)
 Swarm (https://docs.docker.com/engine/swarm/)
 Rancher (https://rancher.com/)
Sсhedulers
 Поддержание необходимого стейта
 Скейлинг по запросу
 Декларативное описание состояния
 Работа в гетерогенной среде
 Быстрое развёртывание кластера и контейнеров
 API
 Много готовых решений
Свойства контейнеров
 Воспроизводимость – контейнер всегда ведёт себя
одинаково
 Масштабируемость – горизонтальное масштабирование
 Идемпотентность – собирая контейнер из одного и того же
Dockerfile мы получим один и тот же контейнер
 Надёжность – контейнер использует простые технологии
ядра
 Портативность – контейнер ведёт себя одинаково на
разных хостах
Литература
 https://container.training/intro-selfpaced.yml.html
 https://docs.docker.com/
 https://kubernetes.io/
 https://mesosphere.github.io/marathon/
 http://mesos.apache.org/documentation/latest/architectu
re/
 https://github.com/containernetworking/cni
 https://en.wikipedia.org/wiki/Out_of_memory
Q&A
Спасибо за внимание.

More Related Content

What's hot

Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...Ontico
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 
Docker. Зачем он нам?
Docker. Зачем он нам?Docker. Зачем он нам?
Docker. Зачем он нам?Andrey Gerasimov
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годBadoo Development
 
Как не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с DockerКак не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с Dockertrukhinyuri
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используютITCrowd Almaty
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Ruslan Sharipov
 

What's hot (20)

Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Docker. Зачем он нам?
Docker. Зачем он нам?Docker. Зачем он нам?
Docker. Зачем он нам?
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker networking
Docker networkingDocker networking
Docker networking
 
Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Как не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с DockerКак не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с Docker
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 

Similar to Введение в Docker

OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиAndrey Markelov
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStackRussia
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"LogeekNightUkraine
 
Окружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризацииОкружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризацииAlexander Kirillov
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Ontico
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годAnton Turetsky
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Ontico
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationSQALab
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationCOMAQA.BY
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 

Similar to Введение в Docker (20)

OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
Docker&Azure
Docker&AzureDocker&Azure
Docker&Azure
 
Docker
DockerDocker
Docker
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
 
Clouds
CloudsClouds
Clouds
 
Окружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризацииОкружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризации
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Instalarea DSpace
Instalarea DSpaceInstalarea DSpace
Instalarea DSpace
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 

Введение в Docker

  • 2. Кто я Меня зовут Кузьмицкий Александр. Окончил МГВРК+БГУИР ИИТ по специальности Информационные технологии и управление в технических системах. Работаю в Wargaming с 2012 года над созданием инструментов автоматизации и доставки ПО. Видел Пик Ермаловича, Провал Кирейчука и прочий кровавый ентерпрайз.
  • 4. Тупых анекдотов Тупой анекдот: — Давай, убеждай меня в обратном. — Дорогой, убедись, это обратное.
  • 6. Что такое контейнер? Что такое контейнер?
  • 7.
  • 8.
  • 10. Что такое контейнер? Контейнер – это процесс и стандартизированный юнит приложения
  • 11. Что такое контейнер? Другими словами, контейнер – это какое-то изолированное приложение, которое что-то делает.
  • 12. Docker container $ sudo docker run –-name test-nginx nginx $ pid="$(docker inspect -f '{{.State.Pid}}’ test-nginx)" $ sudo ln -sf /proc/$pid/ns/net "/var/run/netns/test-nginx " $ sudo ip netns exec test-nginx ip a $ sudo docker rm test-nginx
  • 13. Проблемы  Воспроизводимые легковесные окружения  Эффективная доставка кода  Унификация интерфейсов  Развёртывание сервисов в условиях гетерогенного облака  Уменьшение костов  Виртуальные машины - дорого, долго и не всегда эффективно
  • 14. История разработки контейнеров  2003 год создания Zones в Solaris  2008 год создания LXC  Docker был создан как продвинутый Chroot  В 2013 docker стал OpenSource  2.75 миллиона прямых загрузок за 1 год
  • 16. Технологии ядра  Namespaces – области видимости  Cgroups – лимиты на использование ресурсов  Networking – виртуализация сетевой подсистемы  Layers – формат представления данных на диске с помощью специально разработанных файловых систем  Capabilities – разрешения на выполнение действий от root
  • 17. Namespaces(области видимости)  pid: Изоляция процессов  user: изоляция uid/gid  net: Управление сетевыми интерфейсами  ipc: управление доступоп к IPC ресурсам  mnt: управление точками монтирования файловой системы  uts: изоляция ядра и идентификаторов версий(hostname/domainname/architecture)
  • 18. unshare – почувствуй себя хакером # man unshare http://man7.org/linux/man-pages/man1/unshare.1.html  sudo unshare -pf bash; kill <pid>  sudo unshare –u; hostname test123  Sudo unshare –n; ip a
  • 19. Cgroups Cgroup – это коллекция процессов, которые связаны с набором ограничений, определённых через файловую систему cgroups. # mount -t cgroup -o all cgroup /sys/fs/cgroup # ls /sys/fs/cgroup cpu, cpuacct, cpuset, memory, devices, freezer, net_cls, blkio, perf_event, net_prio, hugetlb, pids, rdma
  • 20. Networking  Bridging  Routing – маршрутизация трафика межу узлами  Tunneling – работа с P2P тунелями  Iptables  NAT – port mapping, masquerading  Filter - фильтрация трафика  Network namespaces – сетевая виртуализация
  • 21. Layers(Copy On Write) Layers — формат представления данных на диске с помощью набора слоёв с данными, каждый из которых несёт в себе набор файлов/директорий, которые мержатся на верхнем уровне. Слои реализуют git-подобный подход и существенно снижают размер передаваемых данных по сети при копировании и запуске контенеров.
  • 22. Layers (Copy On Write)  Overlayfs(2)  AUFS  Btrs  Zfs  …
  • 23. Capabilities Capabilities - это средства для управления привилегиями, которые в традиционных Unix-подобных системах были доступны только процессам, запущенным с правами root (uid==0). Этот механизм позволяет дать процессу права на выполнениекаких-либо действий, недоступных обычному пользователю (например, изменение системного времени, прямой доступ к аппаратуре, использование зарезервированных портов TCP/UDP (< 1024), блокировка страниц в физической памяти), но в то же время не предоставлять этому процессу полный набор прав root.
  • 29. runc
  • 31. Дисковые бэкэнды Docker Название Утилизация диска Изоляция Надёжность Скорость aufs низкая низкая низкая низкая overlay2 низкая низкая высокая средняя overlay низкая низкая низкая низкая btrfs очень низкая очень высокая низкая средняя devicemapper высокая очень высокая высокая высокая zfs очень низкая очень высокая высокая высокая vfs очень высокая очень высокая очень высокая очень высокая
  • 32. Способы создания образов  Проблема курицы и яйца  docker commit  docker build  docker push  docker pull  Dockerfile  https://hub.docker.com/
  • 33. О Dockerfile подробнее  .dockerignore – игнорирование файлов и папок при сборке контекста  Dockerfile  ADD  COPY  ENV  EXPOSE  FROM  LABEL  STOPSIGNAL  USER  VOLUME  WORKDIR
  • 36. Docker: сетевые бэкэнды  Network drivers:  Bridge+port mapping  Host  Macvlan  Ipvlan  None  Calico  Weave  CNI  IPAM (ipv4/ipv6)  Ip range  Static ip
  • 37. Docker: встроенные сети $ docker network ls NETWORK ID NAME DRIVER SCOPE e5ca4257897c bridge bridge local eaa67fcc08a0 host host local 74b7aedba702 none null local * container
  • 38. Docker Service discovery  IP per container  Hostname based service discovery  Service Discovery в кластере
  • 39. Хранение персистентных данных Volume – это дисковое пространство между хостом и контейнером. Другими словами – это папка на локальной машине примонтированная внутрь контейнера. Volume служат для хранения изменяющихся данных между запусками контейнера. Идеальный контейнер после запуска не вносит изменений в свой слой. (RO Mode)
  • 41. Volumes: Bind mounts Bind mounts (-v, --mount) – способ хранения состояния контейнера на файловой системе хост-машины. • Базы данных • Медиа файлы • Данные, которые нужно шарить между контейнерами • Позволяют примонтировать файл/сокет с хост-машины https://docs.docker.com/storage/bind-mounts/
  • 42. Volumes: docker volumes  Волюмы отделены от контейнера и хранятся в файловой структуре docker  Волюмы управляются с помощью docker cli  Волюмы могут находиться на других машинах и иметь самый разный функционал, который обеспечивается волюм плагинами  Волюм может иметь контент, предзаданный другим контейнером
  • 43. Volumes: docker volumes $ docker volume create my-vol $ docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest $ docker volume inspect my-vol [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my- vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ] $ docker inspect devtest "Mounts": [ { "Type": "volume", "Name": "myvol2", "Source": "/var/lib/docker/volumes/myvol2/_data", "Destination": "/app", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
  • 44. Volumes: tmpfs $ docker run -d -it --name tmptest --mount type=tmpfs,destination=/app,tmpfs-size=100mb,tmpfs- mode=0777 nginx:latest
  • 45. Лимитирование ресурсов: mem $ --mem 4mb Oom (https://en.wikipedia.org/wiki/Out_of_memory)
  • 46. Лимитирование ресурсов: cpu $ --cpu cpu-quota/cpu-period cpuset-cpus  --cpus 0.1 means 10% of one CPU,  --cpus 1.0 means 100% of one whole CPU,  --cpus 10.0 means 10 entire CPUs.
  • 47. Docker compose Как работать с docker-compose:  Описывается набор контейнеров, параметров их запуска, волюмы, линки и прочие параметры в файле docker- compose.yml  Запускается команда docker-compose up  Compose автоматически собирает, скачивает и запускает контейнеры.  Контейнеры могут быть запущены в бэкграунде или в интерактивном режиме.  Для остановки используется команда docker-compose down
  • 49. Sсhedulers  K8S (https://kubernetes.io/)  Mesos+Marathon (https://dcos.io/)  Nomad (https://www.nomadproject.io/)  Swarm (https://docs.docker.com/engine/swarm/)  Rancher (https://rancher.com/)
  • 50. Sсhedulers  Поддержание необходимого стейта  Скейлинг по запросу  Декларативное описание состояния  Работа в гетерогенной среде  Быстрое развёртывание кластера и контейнеров  API  Много готовых решений
  • 51. Свойства контейнеров  Воспроизводимость – контейнер всегда ведёт себя одинаково  Масштабируемость – горизонтальное масштабирование  Идемпотентность – собирая контейнер из одного и того же Dockerfile мы получим один и тот же контейнер  Надёжность – контейнер использует простые технологии ядра  Портативность – контейнер ведёт себя одинаково на разных хостах
  • 52. Литература  https://container.training/intro-selfpaced.yml.html  https://docs.docker.com/  https://kubernetes.io/  https://mesosphere.github.io/marathon/  http://mesos.apache.org/documentation/latest/architectu re/  https://github.com/containernetworking/cni  https://en.wikipedia.org/wiki/Out_of_memory

Editor's Notes

  1. Задать вопросы
  2. В конце дам ссылку
  3. Задать вопрос и подождать ответ.
  4. Задать вопрос и подождать ответ. Аналогии
  5. Задать вопрос и подождать ответ
  6. Какие проблемы можно решить с помощью контейнеризации?
  7. Рост интернета, облаков, нагрузок
  8. Рассказать как мы деплоили контейнерами в 2012 и я придумал докер в конце 2012 года
  9. Context switching Hw utilization Startup speed Hw isolation Direct hardware access price
  10. Что нужно, чтобы изолировать приложение? Fs Net Pid Uts user
  11. Передышка
  12. Executor, реализующий непосредственный запуск контейнера. Supervisor, контролирующий и отражающий статус контейнера. Metadata, хранящий метаданные в графовой базе данных. Content, предоставляющий доступ к адресуемому хранилищу контента (постоянных данных). Snapshot, управляющий снапшотами файловой системы для образов контейнера. Аналог graphdriver в сегодняшнем Docker. Слои распаковываются в снапшоты. Events, реализующий событийное поведение и возможность аудита. Metrics, обеспечивающий доступность (по API) метрик различных компонентов.
  13. Runc - бинарь
  14. Docker image inspect Данные пишутся в верхний слой, уникальный для каждого контейнера
  15. echo hello >index.html Dockerfile FROM nginx COPY index.html /usr/share/nginx/html/ docker build -t custom_nginx .
  16. Docker network inspect
  17. https://github.com/docker/libnetwork/blob/master/docs/remote.md Рассказать, как мы писали бекенд
  18. Docker inspect container Запустить 2 контейнера, попинговать их друг из друга
  19. 12factors.net
  20. Запустить контейнер с обрезанной памятью. Показать что будет.
  21. https://gitlab.srv.core.pw/kuzmitsky/wgforge/blob/master/docker-compose.yaml
  22. Sh run.sh Показать marathon Рассказать как работает