SlideShare a Scribd company logo
1
Локальное окружение
на Docker
2
• ОС разработчика
• Стенды для разработки
• Образы виртуальных машин
• Контейнеры
Гибкость
Простота
Выбор пути
3
#1 Каждый разрабочик
всё устанавливает себе сам
• Комфортно
• Везде localhost
• Можно копипастить из мануала по установке
• Как правило ручная настройка
• Разные ОС, дистрибутивы
• Разные проекты или разные части поекта требуют разные версии ПО
• Версии, конфиги ПО нигде не закреплены, не хранятся в репозитории
• Поддержка legacy- проектов
"- Баг?? А у меня работает!"
4
#2 Стенды-песочницы для
разработчика
• Можно поднять до прихода нового сотрудника
• Возможность использовать систему управления конфигурацией(Ansible, Chef,
Puppet...) для настройки нескольких машин
• Полная изоляция
• Всё делает админ, а не разработчик
• Дорого
• Разработчики с root-правами: бардак, только админ с root: админ постоянно
отвлекается
• В идеале это один стенд одного проектам для одного разработчика (т.е. в
сумме n x m стендов)
Dev: "- А можешь ещё поставить Redis?" Ops: "- Нет! Занят!!"
5
#3 Локальные VM (Vagrant)
• Изоляция разных проектов в локальном окружении
• Возможность использовать систему управления конфигурацией для
настройки и хранить её в общем репозитории т.е. у всех один и тот же конфиг
• Настройка окружения с Symfony есть в официальной документации
• Долгая установка и конфигурация
• Это ОС: требует много памяти на диске, много оперативной памяти, много
процессорных ресурсов
• Очень сложно воссоздать распределённую систему
-“О! А этот конфиг, это также как на продакшне?" -“Нет... :("
6
Docker vs Vagrant: отличия
Docker использует виртуализацию на уровне процессов ОС
7
Docker: инструменты
• docker-engine: центральная часть докера, демон работающий на хост-машине
и умеющий скачивать и заливать образы, запускать из них контейнеры,
следить за запущенными контейнерами, собирать логи и настраивать сеть
между контейнерами (а с версии 0.8 и между машинами).
• docker: консольная утилита для управления docker-демоном по HTTP
• docker-compose: инструмент для создания и запуска мульти- контейнерных
докер- приложений
• docker-swarm: нативное решение докера для создания кластеров
• docker-machine: набор инструментов для запуска контейнеров на различных
инфраструктура-как-сервис платформах, а также VMWare, Virtualbox итд
• Docker Hub, Docker Store: репозиторий для хранения образов контейнеров
(неофициальные и официальные)
8
Docker: основные понятия
• Image: упакованная версия приложения вместе с зависимостями
и необходимым окружением необходимым для запуска
(как класс в ООП)
• Container: контейнер это запущенный экземпляр образа
(как объект в ООП)
• Volume: область постоянного хранения файлов, данные не
теряются при пересборке или удалении конейнера
• Dockerfile: файл конфигурации контейнера для сборки
9
Docker: внутреннее устройство
• Инструменты изоляции(наподобии chroot jail): LXC(<0.9),
libcontainer (runc, >=0.9)
• "слоёная" фаловая система AUFS (переиспользуемость,
Copy-On-Write)
Образ содержит слои(снепшоты) каждого отдельного
изменения внутреннего содержания.
10
Docker: внутреннее устройство
Как только мы создаём контейнер мы ставим наверх
пустой Read-write слой
11
Docker: внутреннее устройство
Запущенный контейнер можно описать как данный
объединённый слой доступный для записи и
изолированное от хост- машины пространство процессов с
процессом внутри(в идеале он должен быть только один)
12
Docker: внутреннее устройство
13
Docker: внутреннее устройство
14
Dockerfile
• FROM - Указывается базовый образ
• ADD - Копирование файлов с локальной машины
• RUN - Запуск команды внути контейнера, например apt-get install
• EXPOSE - Открытие порта для внешнего доступа
• CMD - Команда для основного процесса контейнера (может быть только одна CMD)
• ENTRYPOINT - Executable для запуска CMD, по умолчанию "/bin/sh -c”
в "docker run -i -t ubuntu bash": FROM=ubuntu CMD=bash ENTRYPOINT=/bin/sh -c
• USER - Установить юзера для RUN, CMD и ENTRYPOINT (по умолчанию, root)
• Команды выполняются декларативно (порядок имеет значение)
15
#4 Контейнеры (Docker)
• Изоляция на уровне процессов
• Можно точь-в-точь повторить продакшн локально
• Хорошо подходит для описания микросервисов, локально можно
разрабатывать, дебажить несколько сервисов одновременно
• Чем крупнее проект, тем больше прибыль от внедрения докера
• Порог вхождения довольно высокий, сложнее чем другие варианты
• Продукт очень бурно развивался, в сети много примеров с конфигурацией
прошлых версий и вовсе нерабочих
16
Единообразие
17
18
Образы или сборка локально
Для разработки в репозитории удобнее хранить
исходники контейнеров: Dockerfile от образа
официального репозитория дистрибутива (base
image)
Там где достаточно дефолтной конфигурации
(например, сборка логов) удобно брать готовые
официальные образы.
19
Логирование в стиле Docker
Переполнение файла логов docker
Варианты:
• Использовать logrotate: /var/lib/docker/containers/*/*.log
• Или выключить сохранение логов: --log-driver=none
20
Логирование в стиле Docker
ELK stack
21
Логирование в стиле Docker
Logspout! собирает сообщения из STDIN и STDERR
контейнеров, которые мы можем прочитать в Logstash
22
Типы томов (volumes)
• Bind-mounts — монтирование внешних папок
/host:/container
• Data-only containers - сохранение данных из
контейнера /container, использование в других
контейнерах с помощью --volumes-from(deprecated)
• Named volumes (>=1.10) - возможность закрепить имя
за томом volume_name:/container, не нужен volumes-
from.
• После первого использования том получает
правильные права доступа и наполняется контентом
(initial volume seeding)
23
Переменные окружения
Для того чтобы удобно собирать
и пользоваться окружением на
разных машинах, можно
использовать переменные
окружения и класть их в .env
Можно пересобирать PHP с
Xdebug или Blackfire в
зависимости от надобности
24
networks: vs links:
Вместо того чтобы указывать строго определённые связи
links(deprecated) от контейнера к контейнеру, окружить
весь проект одной bridge сетью
Docker-compose зарезолвит имена контейнеров в IP
адреса автоматически
25
Внешние сервисы и доступ к
хост машине
Для доступа к внешним сервисам, а так же хост машине
пока приходится использовать extra_hosts,
прописывающий их в /etc/hosts контейнера
26
Запущенный контейнер !=
готовый к работе контейнер
Wait_for_it в entrypoint:

More Related Content

What's hot

Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
Pavel Klimiankou
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
Ruslan Sharipov
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
OSLL
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
Alex Chistyakov
 
Docker: from understanding to production
Docker: from understanding to productionDocker: from understanding to production
Docker: from understanding to production
Anton Turetsky
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
FallenKain
 
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TKConf
 
Teach your dockers to use CRanes
Teach your dockers to use CRanesTeach your dockers to use CRanes
Teach your dockers to use CRanes
Pavel Emelyanov
 
Тестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на DockerТестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на Docker
Anton Maksimov
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101
Nadzeya Pus
 
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
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
OpenVZ
 
Docker. Основы
Docker. ОсновыDocker. Основы
Docker. Основы
Ivan Miniailenko
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системAlex Chistyakov
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
Andrey Markelov
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
Badoo Development
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Ontico
 
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
Provectus
 
Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
 Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов  Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
it-people
 

What's hot (20)

Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Docker: from understanding to production
Docker: from understanding to productionDocker: from understanding to production
Docker: from understanding to production
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
 
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
 
Teach your dockers to use CRanes
Teach your dockers to use CRanesTeach your dockers to use CRanes
Teach your dockers to use CRanes
 
Тестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на DockerТестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на Docker
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101
 
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"
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
 
Docker. Основы
Docker. ОсновыDocker. Основы
Docker. Основы
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
 
Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
 Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов  Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
 

Similar to Локальное окружение на Docker

Docker
DockerDocker
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и Docker
Andrey Markelov
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
Anton Turetsky
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Ontico
 
Окружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризацииОкружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризацииAlexander Kirillov
 
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
corehard_by
 
Docker & Badoo: 
никогда не останавливайся на достигнутом
Docker & Badoo: 
никогда не останавливайся на достигнутомDocker & Badoo: 
никогда не останавливайся на достигнутом
Docker & Badoo: 
никогда не останавливайся на достигнутом
Anton Turetsky
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
CodeFest
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
OpenStackRussia
 
Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016
Vad Tymoshyk
 
Зачем мне docker, я же сисадмин?!
Зачем мне docker, я же сисадмин?!Зачем мне docker, я же сисадмин?!
Зачем мне docker, я же сисадмин?!
Byndyusoft
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
Positive Hack Days
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
SQALab
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
COMAQA.BY
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
CEE-SEC(R)
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
Provectus
 

Similar to Локальное окружение на Docker (20)

Docker
DockerDocker
Docker
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и Docker
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Окружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризацииОкружение разработчика - от виртуализации к контейнеризации
Окружение разработчика - от виртуализации к контейнеризации
 
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
 
Docker & Badoo: 
никогда не останавливайся на достигнутом
Docker & Badoo: 
никогда не останавливайся на достигнутомDocker & Badoo: 
никогда не останавливайся на достигнутом
Docker & Badoo: 
никогда не останавливайся на достигнутом
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016
 
Зачем мне docker, я же сисадмин?!
Зачем мне docker, я же сисадмин?!Зачем мне docker, я же сисадмин?!
Зачем мне docker, я же сисадмин?!
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
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
 
Grossum - Docker
Grossum - DockerGrossum - Docker
Grossum - Docker
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 

Локальное окружение на Docker

  • 2. 2 • ОС разработчика • Стенды для разработки • Образы виртуальных машин • Контейнеры Гибкость Простота Выбор пути
  • 3. 3 #1 Каждый разрабочик всё устанавливает себе сам • Комфортно • Везде localhost • Можно копипастить из мануала по установке • Как правило ручная настройка • Разные ОС, дистрибутивы • Разные проекты или разные части поекта требуют разные версии ПО • Версии, конфиги ПО нигде не закреплены, не хранятся в репозитории • Поддержка legacy- проектов "- Баг?? А у меня работает!"
  • 4. 4 #2 Стенды-песочницы для разработчика • Можно поднять до прихода нового сотрудника • Возможность использовать систему управления конфигурацией(Ansible, Chef, Puppet...) для настройки нескольких машин • Полная изоляция • Всё делает админ, а не разработчик • Дорого • Разработчики с root-правами: бардак, только админ с root: админ постоянно отвлекается • В идеале это один стенд одного проектам для одного разработчика (т.е. в сумме n x m стендов) Dev: "- А можешь ещё поставить Redis?" Ops: "- Нет! Занят!!"
  • 5. 5 #3 Локальные VM (Vagrant) • Изоляция разных проектов в локальном окружении • Возможность использовать систему управления конфигурацией для настройки и хранить её в общем репозитории т.е. у всех один и тот же конфиг • Настройка окружения с Symfony есть в официальной документации • Долгая установка и конфигурация • Это ОС: требует много памяти на диске, много оперативной памяти, много процессорных ресурсов • Очень сложно воссоздать распределённую систему -“О! А этот конфиг, это также как на продакшне?" -“Нет... :("
  • 6. 6 Docker vs Vagrant: отличия Docker использует виртуализацию на уровне процессов ОС
  • 7. 7 Docker: инструменты • docker-engine: центральная часть докера, демон работающий на хост-машине и умеющий скачивать и заливать образы, запускать из них контейнеры, следить за запущенными контейнерами, собирать логи и настраивать сеть между контейнерами (а с версии 0.8 и между машинами). • docker: консольная утилита для управления docker-демоном по HTTP • docker-compose: инструмент для создания и запуска мульти- контейнерных докер- приложений • docker-swarm: нативное решение докера для создания кластеров • docker-machine: набор инструментов для запуска контейнеров на различных инфраструктура-как-сервис платформах, а также VMWare, Virtualbox итд • Docker Hub, Docker Store: репозиторий для хранения образов контейнеров (неофициальные и официальные)
  • 8. 8 Docker: основные понятия • Image: упакованная версия приложения вместе с зависимостями и необходимым окружением необходимым для запуска (как класс в ООП) • Container: контейнер это запущенный экземпляр образа (как объект в ООП) • Volume: область постоянного хранения файлов, данные не теряются при пересборке или удалении конейнера • Dockerfile: файл конфигурации контейнера для сборки
  • 9. 9 Docker: внутреннее устройство • Инструменты изоляции(наподобии chroot jail): LXC(<0.9), libcontainer (runc, >=0.9) • "слоёная" фаловая система AUFS (переиспользуемость, Copy-On-Write) Образ содержит слои(снепшоты) каждого отдельного изменения внутреннего содержания.
  • 10. 10 Docker: внутреннее устройство Как только мы создаём контейнер мы ставим наверх пустой Read-write слой
  • 11. 11 Docker: внутреннее устройство Запущенный контейнер можно описать как данный объединённый слой доступный для записи и изолированное от хост- машины пространство процессов с процессом внутри(в идеале он должен быть только один)
  • 14. 14 Dockerfile • FROM - Указывается базовый образ • ADD - Копирование файлов с локальной машины • RUN - Запуск команды внути контейнера, например apt-get install • EXPOSE - Открытие порта для внешнего доступа • CMD - Команда для основного процесса контейнера (может быть только одна CMD) • ENTRYPOINT - Executable для запуска CMD, по умолчанию "/bin/sh -c” в "docker run -i -t ubuntu bash": FROM=ubuntu CMD=bash ENTRYPOINT=/bin/sh -c • USER - Установить юзера для RUN, CMD и ENTRYPOINT (по умолчанию, root) • Команды выполняются декларативно (порядок имеет значение)
  • 15. 15 #4 Контейнеры (Docker) • Изоляция на уровне процессов • Можно точь-в-точь повторить продакшн локально • Хорошо подходит для описания микросервисов, локально можно разрабатывать, дебажить несколько сервисов одновременно • Чем крупнее проект, тем больше прибыль от внедрения докера • Порог вхождения довольно высокий, сложнее чем другие варианты • Продукт очень бурно развивался, в сети много примеров с конфигурацией прошлых версий и вовсе нерабочих
  • 17. 17
  • 18. 18 Образы или сборка локально Для разработки в репозитории удобнее хранить исходники контейнеров: Dockerfile от образа официального репозитория дистрибутива (base image) Там где достаточно дефолтной конфигурации (например, сборка логов) удобно брать готовые официальные образы.
  • 19. 19 Логирование в стиле Docker Переполнение файла логов docker Варианты: • Использовать logrotate: /var/lib/docker/containers/*/*.log • Или выключить сохранение логов: --log-driver=none
  • 21. 21 Логирование в стиле Docker Logspout! собирает сообщения из STDIN и STDERR контейнеров, которые мы можем прочитать в Logstash
  • 22. 22 Типы томов (volumes) • Bind-mounts — монтирование внешних папок /host:/container • Data-only containers - сохранение данных из контейнера /container, использование в других контейнерах с помощью --volumes-from(deprecated) • Named volumes (>=1.10) - возможность закрепить имя за томом volume_name:/container, не нужен volumes- from. • После первого использования том получает правильные права доступа и наполняется контентом (initial volume seeding)
  • 23. 23 Переменные окружения Для того чтобы удобно собирать и пользоваться окружением на разных машинах, можно использовать переменные окружения и класть их в .env Можно пересобирать PHP с Xdebug или Blackfire в зависимости от надобности
  • 24. 24 networks: vs links: Вместо того чтобы указывать строго определённые связи links(deprecated) от контейнера к контейнеру, окружить весь проект одной bridge сетью Docker-compose зарезолвит имена контейнеров в IP адреса автоматически
  • 25. 25 Внешние сервисы и доступ к хост машине Для доступа к внешним сервисам, а так же хост машине пока приходится использовать extra_hosts, прописывающий их в /etc/hosts контейнера
  • 26. 26 Запущенный контейнер != готовый к работе контейнер Wait_for_it в entrypoint: