Вы находитесь на странице: 1из 86

ЭКОСИСТЕМА RED HAT ДЛЯ

DOCKER-КОНТЕЙНЕРОВ
Примеры использования

Дмитрий Севостьянов <dmitry.sevostyanov@redhat.com>


Senior Solution Architect, Red Hat
Повестка
● Что такое контейнеры
● Отличие от виртуальных машин
● Что хорошо и что плохо контейнеризируется
● Формат контейнеров и среды выполнения
● Docker, Red Hat Enterprise Linux, Atomic Host
● Управление системой Atomic Host
● Что такое Docker
● Команды Docker
● Экосистема Red Hat для контейнеров
● Влияние распределенной среды на применение контейнеров
● Поддержка Red Hat для контейнеров, приложений и средств управления
контейнерами
● Демонстрация и сценарии использования

2 Экосистема Red Hat для Docker-контейнеров


ЧТО ТАКОЕ КОНТЕЙНЕРЫ
Подход к выполнению приложений
Традиционный режим работы с приложениями Использование контейнеров для работы с
посредством виртуальных машин приложениями
Контейнеры
APP-1 APP-2 APP-n

MW-1 MW-2 MW-n


APP-1 APP-n
LIB-1 LIB-2 LIB-n
MW-1 MW-n
OS-1 OS-2 OS-n
LIB-1 LIB-n
VM-1 VM-2 VM-n

Virtualization OS

Hardware Hardware

4 Экосистема Red Hat для Docker-контейнеров


В чем значение контейнеров
Стандартный контейнер для перевозок Linux (Docker) контейнер

Любое Контейнер может иметь практически любой Может инкапсулировать любое приложение и
содержимое тип груза его зависимости

Любая Стандартная форма и размер позволяет Используя возможности ОС (LXC), запускается и


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

Изоляция и Контейнер с наковальнями транспортируется Изоляция по сетевым интерфейсам, ресурсам и


взаимодействие вместе с контейнером, содержащим бананы. файловым системам. Нет неприятностей с
Наковальни не раздавят бананы конфликтом библиотек и зависимостей

Автоматизация и Стандартный интерфейс облегчает погрузку, Стандартный запуск и останов, поиск и


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

Эффективность и Не нужна переупаковка, быстрое Легковесный, нет накладных расходов на


плотность перемещение между сортировочными узлами виртуализацию и запуск приложений, легко
перемещается между средами

Разделение Продавец заботится о наполнении, доставка Разработчик пишет код, администратор


ответственности о сохранности работает с инфраструктурой

5 Экосистема Red Hat для Docker-контейнеров


Прозрачное перемещение между средами

6 Экосистема Red Hat для Docker-контейнеров


Плотность размещения

10 виртуальных машин

100 контейнеров
7 Экосистема Red Hat для Docker-контейнеров
Время развертывания
> 24 часов ~ 12 минут < 10 секунд

Физический сервер Виртуальная машина Контейнер

8 Экосистема Red Hat для Docker-контейнеров


Преимущества для разработчика
Собранное единожды… запускается везде

● Чистое, безопасное, переносимое окружение для приложений


● Нет необходимости заботится об отсутствии зависимостей, пакетов и прочих
“точек боли” при последовательных обновлениях и развертываниях
● Запуск каждого приложения в изолированном окружении позволяет на
заботится о конфликте библиотек, требуемых для разных приложений
● Автоматизация всего, что можно поместить в скрипт - тестирование, упаковка,..
● Уменьшение/устранение зависимости от ОС у заказчика и разработчика
● Дешевое (быстрое) развертывание сервисов, отсутствие накладных расходов,
характерных для виртуальных машин, легкое повторение действия
(воспроизведение проблем), откат к предыдущему состоянию. Это
контейнеризация

9 Экосистема Red Hat для Docker-контейнеров


Преимущества для администратора
Настроенное единожды… работает везде

● Обеспечивает жизненный цикл приложения более эффективным,


повторяемым и непротиворечивым
● Устраняет несоответствие между различными средами - разработка,
тестирование, промышленная у заказчика
● Поддерживает разделение ответственности
● Значительно увеличивает скорость и надежность процессов непрерывного
развертывания и интеграции
● Увеличивает плотность и производительность из-за отсутствия накладных
расходов, характерных для виртуальных машин, а также переносимость

10 Экосистема Red Hat для Docker-контейнеров


Что такое контейнеры Linux (и Docker)
Это технология, позволяющая создавать, развертывать и запускать приложения

● Высокая плотность
● Высокая производительность выполнения
● Простота управления
● Гибкость
● Уменьшение затрат инфраструктуры
● Прозрачность при смене среды выполнения
● Физическая, виртуальная, частное или публичное облако

11 Экосистема Red Hat для Docker-контейнеров


Архитектура контейнеров Linux

● Пространства имен (Namespaces) Container Container Container


● Используется для бесконфликтного
существования одноименных Management Interface

ресурсов (FS, PID, NET)


● Контроль ресурсов (CGroups) Namespaces CGroups SELinux

● Ограничения по использованию CPU, Drivers Linux Kernel


RAM, IO
● Мандатный контроль доступа (SELinux) Hardware
● Препятствует получению контейнером
доступа к другим контейнерам (sVirt)

Цикл статей про CGroups - https://www.google.com/?q=redhat+world+domination+with+cgroups+part

12 Экосистема Red Hat для Docker-контейнеров


Использование контейнеров
Контейнеры, основанные на образе

● Независимы от ОС сервера
App-A App-B App-C
● Независимы от конфигурации сервера
● Приложения и его зависимости Runtime-A Runtime-B Runtime-C

разворачиваются из образа
Red Hat Enterprise Linux 7
● Минимальные накладные расходы
Container Host
● Одновременно несколько версий
● Одновременно несколько экземпляров Linux Kernel
● Контейнеры типа LXC Hardware, VM, Cloud
● Init System V, SystemD
● Легковесно, но трудоемко

13 Экосистема Red Hat для Docker-контейнеров


Контейнеры и виртуализация
Контейнеры Linux KVM

● Изоляция приложений на одном ● Загрузка полнофункциональной


экземпляре ОС ОС (Linux, Windows, Solaris)
● Изменения на уровне ОС ● VM в разы требовательней к
отражаются на контейнерах ресурсам (память, ЦПУ)
● TCP/IP stack ● Изолированные копии ядер ОС
● Контейнеры легковесны более защищены, безопасны и
● Теоретический максимум надежны
6000 контейнеров на сервер ● Гостевые ОС не видят изменений
● Нет живой миграции - проще на сервере
запустить новую копию ● Возможна живая миграция между
серверами

14 Экосистема Red Hat для Docker-контейнеров


Типы нагрузок и производительность

Вычисление примитивов OLTP нагрузка Аналитические приложения

RHEL 7 физический сервер RHEL 7 контейнер

15 Экосистема Red Hat для Docker-контейнеров


Приложения и контейнеры
Что хорошо и что плохо работает в контейнерах
http://rhelblog.redhat.com/2016/04/21/architecting-containers-part-4-workload-characteristics-and-candidates-for-containerization

Необходимо разбирать
Идеальны для контейнеров возможность и необходимость в
(параметризуемые приложения) каждом случае отдельно

● Web-приложения ● Вертикально-масштабируемые
● Java, Ruby, PHP,.. решения (SAP, Oracle EBS)
● Горизонтально-масштабируемые ● Системы с собственными средствами
приложения управления жизненным циклом
● REST API ● Системы, требующие доступа к
● NoSQL оборудованию или эксклюзивного
● Разработческие среды доступа к ресурсам
● Серверы приложений ● Системы, настройка которых
● Базы данных (MySQL, осуществляется через сложные
PostgreSQL) конфигурационные файлы

16 Экосистема Red Hat для Docker-контейнеров


Что такое контейнеры
Зависит с какой стороны посмотреть

Инфраструктура Приложение

● Изолированные процессы в ядре ОС ● Упаковка приложения и всех его


● Легче и проще чем традиционные ВМ зависимостей
● Переносимые из окружения в ● Развертывание в любом окружении
окружение за секунды
● Управляемые унифицированным ● Участие в CI/CD
образом ● Распространение и повторное
использование
контейнеризированных компонент

17 Экосистема Red Hat для Docker-контейнеров


ФОРМАТ КОНТЕЙНЕРОВ
И СРЕДЫ ВЫПОЛНЕНИЯ
Контейнеры
Инфраструктурные компоненты

Red Hat
Docker Enterprise Linux Atomic Host
Проект с открытым Образ операционной Операционная система,
исходным кодом. системы, упакованный в оптимизированная для
Унифицированный формат формате Docker работы с контейнерами
и API

19 Экосистема Red Hat для Docker-контейнеров


Docker
Это формат и API

● Использует возможности ядра Linux


● Предлагает удобный формат упаковки приложений
● Повторное использование
● Унифицированный API для работы с контейнерами

(Будет рассмотрен подробнее позже)

20 Экосистема Red Hat для Docker-контейнеров


Red Hat Enterprise Linux
Образ в формате Docker

● ОС (user-space) корпоративного уровня внутри контейнера


● Протестированная годами надежность и обновляемость
● Совместимость на уровне ABI/API
● Обеспечивает
● Работу Red Hat Software Collection (RH SCL)
● Платформу для запуска Java-приложений
● Экосистему утилит для отладки и управления приложениями
● Поддержку и помощь класса Enterprise для заказчиков

21 Экосистема Red Hat для Docker-контейнеров


Atomic Host
Среда выполнения контейнеров

● Родился из проекта “Project Atomic”, задуманного компанией Red Hat


● “Project Atomic” - это проекты сообщества (OSS), для работы с контейнерами
● Red Hat и сообщество Fedora вносят основной вклад в этот проект
● Возможности и характеристики
● Быстрый и надежный запуск небольших контейнеров
● Легкая настройка (cloud-init) и обновление (OSTree)
● Управление через Web-консоль Cockpit
● RHEL - дает образ ОС класса Enterprise
● RH SCL - Ruby, Python, NodeJS, .Net Core, MySQL, PostgreSQL, MongoDB,..
● JBoss Middleware - EAP, Fuse, BPM Suite, Data Grid

22 Экосистема Red Hat для Docker-контейнеров


OSTree и rpm-OSTree
Обеспечение обновления и отката на предыдущую версию системы Atomic Host

● OSTree - модель хранения объектов, подобная git


● download - дерево каталогов загрузочной файловой системы
● commit - слои с версиями и контрольными суммами файлов
● check out - формирует рабочую версию системы (read-only)
● rpm-OSTree - гибридная модель
● OSTree - для базовой системы
● RPM - дополнительные пакеты, сохраненные в commit слое
● Комбинированные возможности
● атомарное обновление и откат на предыдущую версию
● установка и сохранение RPM в OSTree репозиторий

23 Экосистема Red Hat для Docker-контейнеров


SystemD
Назначение и возможности

Назначение Возможности

● Уменьшить времени загрузки ОС ● Параллелизм


● Обрабатывать динамические ● Быстрая загрузка
изменения системной конфигурации ● Разрешение зависимостей
● Обеспечить стандартные средства ● Управление сервисами
для завершения процессов ● Не нужны “хаки” в rc.local
● Управлять системным окружением ● Автоматический запуск и перезапуск
работы процессов сервисов
● Ограничение ресурсов (CGroups)
● 99% совместимости с initscripts
● Дает ощутимые преимущества для облачных
и легких систем

24 Экосистема Red Hat для Docker-контейнеров


Главные отличия Atomic Host и RHEL
Atomic Host имеет разительные отличия от RHEL 7

● YUM не используется для обновления системы


● Организация папок в файловой системе
● /usr - только для чтения
● /etc, /var - для записи (/etc только для файлов конфигураций)
● /home -> /var/home, /usr/local -> /var/usrlocal, /srv -> /var/srv,..
● Схема разбиения диска использует логические тома (LVM)
● том root - для корневой файловой системы
● том docker-pool - “тонкий пул” для хранения образов Docker

25 Экосистема Red Hat для Docker-контейнеров


Установка Atomic Host
Физический сервер, виртуальная среда, облако

● Метод установки из ISO-образа (аналогично RHEL)


● Установка в виде подготовленного образа (appliance)
● RHV, vSphere, Hyper-V, OpenStack
● Может понадобиться Cloud-init.iso

Cloud-init: Используется для первоначального запуска и настройки системы.

26 Экосистема Red Hat для Docker-контейнеров


Создание Cloud-init.iso
Простейший случай

$ cat > user-data << EOF


#cloud-config
password: redhat01
chpasswd: { expire: False }
ssh_pwauth: True
ssh_authorized_keys:
- $(cat ~/prepared-ssh-key.pub)
EOF
$ cat > meta-data << EOF
instance-id: localhost
local-hostname: localhost
EOF
$ genisoimage -output cloud-init.iso \
-volid cidata -joliet -rock meta-data user-data

27 Экосистема Red Hat для Docker-контейнеров


Обновление Atomic Host
Обновление файловой системы

● Обновления скачиваются в репозиторий (/sysroot/ostree/repo)


● Создается новая конфигурация развертывания и загрузки
● /sysroot/ostree/deploy/rhel-atomic-host/deploy/<new-uuid>
● Текущая конфигурация там уже присутствует
● Создается ссылка на новую конфигурацию в загрузчике
● /boot/loader/entries/ostree-rhel-atomic-host-*.conf
● Копируется ядро и образ загрузки
● /boot/ostree/rhel-atomic-host-<new-uuid>
● Пользовательские данные разделяются всеми конфигурациями
● /sysroot/ostree/deploy/rhel-atomic-host/var

28 Экосистема Red Hat для Docker-контейнеров


Команды Atomic

29 Экосистема Red Hat для Docker-контейнеров


Управление Atomic Host
[root@atomic ~]# atomic host [1/2]

Команда “atomic host” - это обертка для выполнения группы команд rpm-ostree для
обеспечения обновления и откатов и получении информации о состоянии системы
● atomic host status - показывает информацию о развертываниях

[root@atomic ~]# atomic host status


State: idle
Deployments:
* rhel-atomic-host:rhel-atomic-host/7/x86_64/standard
Version: 7.3 (2016-10-26 14:24:09)
Commit: 90c9735becfff1c55c8586ae0f2c904bc0928f042cd4d016e9e0e2edd16e5e97
OSName: rhel-atomic-host

30 Экосистема Red Hat для Docker-контейнеров


Управление Atomic Host
[root@atomic ~]# atomic host [2/2]

● atomic host upgrade


● Обновляется до последней версии OSTree (если доступна)
● atomic host rollback
● Переключается на ранее развернутую конфигурацию (перезагрузка)
● atomic host deploy [-r]
● Позволяет развернуть конкретную версию OSTree
● Ключ -r извещает систему о необходимости перегрузиться

Не более двух вариантов доступно - “текущий и новый” или “текущий и старый”

31 Экосистема Red Hat для Docker-контейнеров


Управление контейнерами
Доступные команды [1/4]

● atomic diff <image1> <image2>


● Показывает совпадения и различия образами или контейнерами
● atomic info <image>
● Показывает информацию об образе
● atomic install <image>
● Загружает образ и выполняет установку, основываясь на метке INSTALL(*)
● atomic uninstall <image>
● Выполняет удаление, основываясь на метке UNINSTALL(*)
● atomic run <image>
● Запускает контейнер из указанного образа, основываясь на метке RUN(*)
(*) средства Atomic принимают эту метаинформацию как указания к действию

32 Экосистема Red Hat для Docker-контейнеров


Управление контейнерами
Доступные команды [2/4]

● atomic stop <image>/<container>


● Останавливает контейнер, основываясь на метке STOP
● atomic images list
● Показывает загруженные на Atomic Host образы
● atomic top <container>
● Показывает интерактивно процессы в контейнере
● atomic mount <image> <folder>
● Монтирует файловую систему контейнера или образа в указанную папку
● atomic unmount <folder>
● atomic push/pull <image>
● Загружает/выгружает из/в репозиторий указанный образ

33 Экосистема Red Hat для Docker-контейнеров


Управление контейнерами
Доступные команды [3/4]

● atomic storage export/import


● Позволяет экспортировать/импортировать все образы/контейнеры/тома или
мигрировать между различными типами систем хранения Docker
● atomic storage modify
● Изменяет настройки системы хранения Docker
● Работает только с драйвером devicemapper
● Позволяет добавлять блочные устройства в систему хранения Docker
● atomic storage reset
● Удаляет все образы и контейнеры, сбрасывает настройки по умолчанию
● atomic scan <image>
● Проводит анализ образа или контейнера на уязвимости (CVE), используя
openscap scanner
34 Экосистема Red Hat для Docker-контейнеров
Управление контейнерами
Доступные команды [4/4]

● atomic version <image>


● Показывает название и версию
● atomic update <image>
● Загружает последние обновления для указанного образа из репозитория
● Если образ создан на основе какого-либо другого, то продолжает
использовать “старый”
● atomic verify <image>
● Загружает обновления для указанного образа из репозитория
● Анализирует и обновляет все образы, от которых зависит указанный

35 Экосистема Red Hat для Docker-контейнеров


Web-консоль Atomic Host
Cockpit - мониторинг и администрирование системы и контейнеров

● Контейнер Cockpit Web Service запускается в привилегированном режиме


● Показывает и управляет только тем, что уже установлено в системе
● Не захватывает контроль над сервером (работайте через CLI, смотрите в Web)
● Не требует какой-либо конфигурации или отдельной инфраструктуры
● Не хранит никаких политик и данных (не имеет собственных пользователей)
● Не задумывался как менеджер конфигураций (не имеет шаблонов и т.д.)

36 Экосистема Red Hat для Docker-контейнеров


Atomic Host
Основные характеристики

● Сборка Red Hat Enterprise Linux 7, оптимизированная для запуска контейнеров


● Имеет встроенное средство управления
● Администрирование разительно упрощено
● Жизненный цикл операционной системы и контейнеров разделены
● Каждый контейнер и его образ имеют свои циклы
● Обновление OSTree каждые две недели
● Входит в экосистему Red Hat для контейнеров

37 Экосистема Red Hat для Docker-контейнеров


ЧТО ТАКОЕ DOCKER
Docker - это формат для выполнения кода
Технологии

Web-портал БД заказов Web-сервис Сервер Аналитика


очередей
технология, работающая с
любой нагрузкой,
легковесная, портируемая,
самодостаточная,..

… которой можно
манипулировать унифицировано
Аппаратура

Публичное облако в физической и виртуальной


среде

Рабочее место Сервер тестирования ВМ разработки ДЦ заказчика

39 Экосистема Red Hat для Docker-контейнеров


Почему это работает
Разделение интересов

Разработчик Администратор

● Заботится о том, ● Заботится о том,


что “внутри” что снаружи
● О коде ● О логах
● О библиотеках ● Об удаленном доступе
● О приложениях ● О мониторинге
● О данных ● О конфигурации сети
● Все LInux-серверы ● Все операции с контейнерами
для него одинаковы для него одинаковы
(start/stop/move/copy/attach)

40 Экосистема Red Hat для Docker-контейнеров


Docker и OCI

● Проект с открытым исходным кодом, разработанный в DotCloud


● Red Hat, Google, IBM - вносят наибольший вклад
● Open Container Initiative создана, чтобы избежать зависимости от производителя
● Red Hat вносит наибольший вклад в OCI и продвигает его как стандарт
● Docker обеспечивает
● Средства доставки (registry)
● Средство для выполнения контейнеров (server/client)
● Де-факто стандарт для реестра (registry)
● Де-факто стандарт для формата упаковки

41 Экосистема Red Hat для Docker-контейнеров


Использование контейнеров
Контейнеры, основанные на образе

● Независимы от ОС(*) сервера


App-A App-B App-C
● Независимы от конфигурации сервера
● Приложения и его зависимости Runtime-A Runtime-B Runtime-C

разворачиваются из образа
Red Hat Enterprise Linux 7
● Минимальные накладные расходы
Container Host
● Одновременно несколько версий
● Одновременно несколько экземпляров Linux Kernel
Hardware, VM, Cloud
(*) - Linux - это ядро ОС, RHEL, Fedora,.. - ОС на базе ядра Linux

42 Экосистема Red Hat для Docker-контейнеров


Использование контейнеров
Слои в образе Docker на Red Hat Enterprise Linux 7

Контейнер с приложением
● Используется device-mapper и снимки LVM(*) (Выполнение Приложения-А,
● Контейнер - активный компонент файловая система в режиме чтение-запись)

● Выполняющий приложение
● Основан на образе со всеми Слой пользователя (только чтение) (N)
зависимостями
Слой пользователя (только чтение) (1)
● После старта добавляется слой R/W
● Слой - часть зависимостей
● Основан на родительских слоях Образ платформы,
файловая система в режиме только для чтения
● Только чтение (OS Runtime, RO)
● Образ платформы - родительский слой
● Содержит базовый образ ОС
(*) - скоро будет доступен механизм OverlayFS (overlay2.ko)

43 Экосистема Red Hat для Docker-контейнеров


Откуда взять образ контейнера
Все образы находятся в реестрах

● Частный реестр Docker-Distribution


● Персональный
● Корпоративный
● Публичный реестр DockerHub
● DockerStore (*)
● Публичный реестр Red Hat
● Предоставляет API такое же
как и Docker-Distribution
● Имеет портал
(*) попытка решить проблему уязвимостей

44 Экосистема Red Hat для Docker-контейнеров


О безопасности публичных контейнеров

docker pull mongodb

● Кто собрал образ?


● С какой целью
● Демо?
● Он безопасен для
скачивания?
● Кто осуществляет
поддержку образа?
● Как часто
обновляется образ?

45 Экосистема Red Hat для Docker-контейнеров


Уязвимости в официальных образах
Источник (май, 2015) - https://www.banyanops.com/pdf/BanyanOps-AnalyzingDockerHub-WhitePaper.pdf

Критичность уязвимости
Высокая критичность
● Высокая
Средняя критичность ● ShellShock (bash)
● Heartbleed (OpenSSL)
● Средняя
● Poodle (OpenSSL)
● Низкая
● gcc (array memory allocation)
● Несоответствие концепции
962 официальных образа ● SystemD

46 Экосистема Red Hat для Docker-контейнеров


Сертификация контейнеров от Red Hat

Сомнительные Сертифицированные Red Hat


● Контейнер будет угрожать вашей ● Доверенный источник для сервера и
инфраструктуре? контейнера
● Как и когда обновляются приложения и ● Доверенное содержимое внутри
библиотеки контейнера? контейнера
● Будет ли работать это разных серверах? ● Будет работать на разных серверах

● Red Hat CDK


● Сервис
сертификации
● Каталог
сертификации
● Реестр Red Hat

47 Экосистема Red Hat для Docker-контейнеров


Выполнение контейнеров Linux
LXC существуют годы

Container Container Container

Red Hat Enterprise Linux 7

Hardware, VM, Cloud

48 Экосистема Red Hat для Docker-контейнеров


Выполнение контейнеров Linux
Формат упаковки и API - это качественный скачок

Container Container Container

Packaging Format, API

Red Hat Enterprise Linux 7

Hardware, VM, Cloud

49 Экосистема Red Hat для Docker-контейнеров


Выполнение контейнеров Linux
Red Hat Enterprise Linux выполняет контейнеры безопасно и быстро

RHEL RHEL Container НЕНАДЕЖНО

НАДЕЖНО Packaging Format, API

Red Hat Enterprise Linux 7

Hardware, VM, Cloud

50 Экосистема Red Hat для Docker-контейнеров


Выполнение контейнеров Linux
Оптимизированный сервер - Atomic Host

RHEL RHEL RHEL

Packaging Format, API Cloud-Init,


OSTree,
RPM RHEL 7 Atomic Host Cockpit,
Atomic
Hardware, VM, Cloud Command

51 Экосистема Red Hat для Docker-контейнеров


Выполнение контейнеров Linux
Полный набор для облачных вычислений

RHEL RHEL RHEL

Packaging Format, API

Atomic Host

Hardware, VM, Cloud

Cloud Native Stack


52 Экосистема Red Hat для Docker-контейнеров
Docker + DIY против Atomic Host
Do It Yourself - самоделка

Ненадежно Сертифицировано Red Hat


● Контейнер будет угрожать вашей ● Доверенный источник для сервера и
инфраструктуре? контейнера
● Как и когда обновляются приложения и ● Доверенное содержимое внутри
библиотеки контейнера? контейнера
● Работает это на разных серверах? ● Будет работать на разных серверах

● Red Hat CDK


● Сервис сертификации
● Каталог сертификации
● Реестр Red Hat
● Red Hat JBoss
Middleware

53 Экосистема Red Hat для Docker-контейнеров


Готовые образы от Red Hat
https://access.redhat.com/containers/?type=images#/search

Образы, доступные в пределах подписки на Red Hat Enterprise Linux


● Среды выполнения
● Apache, PHP, Python, Ruby/ROR, NodeJS, Nginx, Java/OpenJDK, .Net Core
● Базы данных
● MongoDB, MariaDB/MySQL, PostgreSQL, Redis

54 Экосистема Red Hat для Docker-контейнеров


Установка Docker
# subscription-manager repos --enable=rhel-7-server-extras-rpms
# subscription-manager repos --enable=rhel-7-server-optional-rpms

docker/docker-current docker-latest
# yum install docker # yum install docker-latest
# echo “DEVS=/dev/sdb” > \ # echo “DEVS=/dev/sdb” > \
/etc/sysconfig/docker-storage-setup /etc/sysconfig/docker-latest-storage-setup
# docker-storage-setup # docker-latest-storage-setup
# systemctl start docker # systemctl start docker-latest
# systemctl enable docker # systemctl enable docker-latest

В Atomic Host уже установлен и сконфигурирован Docker


● Можно приступать к работе с контейнерами незамедлительно
● Установлена поддержка продукта Google Kubernetes
● Будет рассмотрена на следующем семинаре

55 Экосистема Red Hat для Docker-контейнеров


Настройка сервиса Docker
Отредактируйте файлы и перезапустите сервис Docker

Настройки хранятся в группе файлов


● /etc/sysconfig/docker
● /etc/sysconfig/docker-network
● /etc/sysconfig/docker-storage
Настройки по умолчанию
● OPTIONS='--selinux-enabled --log-driver=journald'
● ADD_REGISTRY='--add-registry registry.access.redhat.com'
Можно добавить
● BLOCK_REGISTRY='--block-registry docker.io'
● INSECURE_REGISTRY='--insecure-registry your-registry.company.ru'

56 Экосистема Red Hat для Docker-контейнеров


Red Hat Satellite и Docker
Развертывание контейнеров формата Docker

● Containers -> Registries -> New Registry


● Containers -> Registries
● DockerHub -> Satellite -> Container
External Registry -> Satellite -> Container
● DockerHub -> Satellite (Development -> QA -> Production) -> Container
External Registry -> Satellite (Development -> QA -> Production) -> Container
● Containers -> New Container

57 Экосистема Red Hat для Docker-контейнеров


Команды Docker

58 Экосистема Red Hat для Docker-контейнеров


Сервис Docker
Команды по управлению Docker

● info - показывает информацию о настройка сервиса


● inspect - показывает подробную информацию о образе или контейнере
● version - показывает информацию о версии сервера Docker и клиентской части

59 Экосистема Red Hat для Docker-контейнеров


Docker images
Команды по работе с образами Docker

● build - собирает образ, используя метаописание из файла Dockerfile


● commit - создает новый образ из работающего контейнера
● export - выгружает файловую систему образа в файл
● history - показывает историю команд, совершенных при создании образа
● images - показывает список доступных локально образов
● import - загружает содержимое ранее сохраненного образа файловой системы
● load - загружает набор образов, с метаинформацией и наследованием
● rmi - удаляет набор образов локально
● save - выгружает образы с метаинформацией и слоями в файл
● tag - добавляет метку к образу

60 Экосистема Red Hat для Docker-контейнеров


Docker container
Команды по работе с контейнерами в формате Docker [1/1]

● attach - присоединиться к консоли запущенного контейнера


● cp - копировать файлы/папки из контейнера на сервер (или наоборот)
● create - создать, но не запускать контейнер
● diff - показать отличие файлов на файловых системах контейнеров
● events - показать события для контейнера со стороны Docker
● exec - выполнить команду внутри запущенного контейнера
● kill - убить запущенный контейнер, не дожидаясь завершения
● logs - показать логи контейнера
● pause - временно остановить работающий контейнер
● port - показать список портов которые контейнер экспортирует
● ps - показать список существующих или работающих контейнеров

61 Экосистема Red Hat для Docker-контейнеров


Docker container
Команды по работе с контейнерами в формате Docker [1/2]

● rename - переименовать контейнер


● restart - перезапустить контейнер
● rm - удалить не запущенный контейнер
● run - создать и запустить контейнер
● start - запустить созданный контейнер
● stats - показать статистику контейнера (интерактивно)
● stop - остановить работающий контейнер (корректно)
● top - показать процессы, запущенные в контейнере
● unpause - возобновить выполнение контейнера
● wait - блокировать текущий поток, показ не завершится контейнер

62 Экосистема Red Hat для Docker-контейнеров


Docker volumes
Команды по работе с томами Docker

● volume create - создать том, который можно подключить в контейнер


● volume inspect - показать информацию о томе
● volume ls - показать список томов
● volume rm - удалить том

63 Экосистема Red Hat для Docker-контейнеров


Docker
Замечания о безопасности

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


● Можно использовать группы пользователей, но это не спасает от взлома
● Сборку и запуск производит привилегированный пользователь
● Легко создать привилегированный контейнер
● Легко получить доступ из привилегированного контейнера ко всем подсистемам
сервера
● Нет аутентификации и авторизации
● Ограничения по использованию ресурсов минимальны или отсутствуют

64 Экосистема Red Hat для Docker-контейнеров


Упаковка приложения в контейнер

65 Экосистема Red Hat для Docker-контейнеров


Создание образа Docker
В ручном режиме

● Загрузить базовый образ


● Установить необходимые пакеты и зависимости
● Собрать приложение
● Стандартными средствами
● Поместить собранное приложение в образ
● Установить необходимую метаинформацию
● Метки, рекомендации
● Сохранить образ
● commit
● создать Dockerfile и выполнить сборку (build)

66 Экосистема Red Hat для Docker-контейнеров


Создание образа Docker
Dockerfile

Содержит команды, выполняемые подсистемой Docker при сборке


● Команды, выполняющиеся при сборе образа
● FROM, RUN, COPY, ADD, ENTRYPOINT, CMD,..
● Мета-информация
● LABEL, MAINTAINER, VOLUME, EXPOSE,..

67 Экосистема Red Hat для Docker-контейнеров


Создание образа Docker
Фреймворк S2I

● Загрузить S2I образ из реестра Red Hat для выбранной технологии


● Python, PHP, JBoss EAP, .Net CORE,..
● Указать ссылку на репозиторий исходного кода при запуске процесса сборки
● Загрузить полученный образ в реестр

68 Экосистема Red Hat для Docker-контейнеров


S2I
Принципы работы

● Фреймворк был изначально разработан для использования в OpenShift


● Можно (и нужно) использовать в независимом режиме
● Унификация подхода к сборке приложений и упаковке в контейнер
● https://github.com/openshift/source-to-image
● Использует соглашение о вызовах
● assemble
● run
● save-artifacts и usage
● Легко может быть создан разработчиком
● В том числе на основе существующего
● Расширен стандартный
● https://github.com/openshift/source-to-image/blob/master/docs/builder_image.md

69 Экосистема Red Hat для Docker-контейнеров


Docker
Основные возможности

● Упаковка приложений в контейнер


● Удобный и эффективный формат
● Метаинформация о контейнере (в том числе метки - label)
● Повторяемый сценарий сборки контейнера (Dockerfile)
● Унификация API для работы с контейнерами и образами
● Создание, запуск, остановка, удаление
● Адаптация к инфраструктуре (параметры, переменные, команда запуска)
● Работа с данными (volumes)
● Логи и работа внутри контейнера (shell)

70 Экосистема Red Hat для Docker-контейнеров


ЭКОСИСТЕМА RED HAT
ДЛЯ КОНТЕЙНЕРОВ
Что входит в экосистему

● Готовые образы контейнеров - Red Hat Container Catalog


● Входят в подписку на RHEL
● Входят в дополнительные подписки
● Red Hat OpenShift Container Platform
● Red Hat xPaaS Images (JBoss MIddleware)
● Red Hat Mobility Platform
● Среды выполнения - Red Hat Enterprise Linux, Red Hat Atomic Host*
● Среды управления - Red Hat OpenShift Container Platform
(*) Google Kubernetes входит в поставку, но поддерживается только в рамках одного сервера. Заказчикам рекомендуется
использовать OpenShift

72 Экосистема Red Hat для Docker-контейнеров


Red Hat Container Catalog
https://access.redhat.com/containers/

73 Экосистема Red Hat для Docker-контейнеров


Red Hat Container Catalog
https://access.redhat.com/containers/?type=images#/search/

74 Экосистема Red Hat для Docker-контейнеров


Atomic Host и Docker

CONTAINER CONTAINER CONTAINER CONTAINER CONTAINER

CONTAINER RUNTIME and PACKAGING


(DOCKER)
ATOMIC HOST
RED HAT ENTERPRISE LINUX

75 Экосистема Red Hat для Docker-контейнеров


Что дополнительно требуется для
Operations
Контейнеры абстрагируют приложение от инфраструктуры, но не инфраструктуру

● Сетевая инфраструктура
● Масштабируемая, распределенная, автоматизированная
● Безопасность
● Внутри контейнеров, взаимодействия между контейнерами, среды
выполнения
● Аутентификация и авторизация
● RBAC, каталоги пользователей, интеграция через OAuth
● Система хранения данных
● Сохранение состояния приложения (разные протоколы, автоматизация)
● Реестр контейнеров
● Интегрированный реестр для корпоративных образов

76 Экосистема Red Hat для Docker-контейнеров


Распределенное выполнение

CONTAINER CONTAINER CONTAINER CONTAINER CONTAINER

CONTAINER ORCHESTRATION & CLUSTER MANAGEMENT


(KUBERNETES)
LOGS &
NETWORKING STORAGE REGISTRY SECURITY
METRICS

CONTAINER INFRASTRUCTURE
CONTAINER AUTOMATION
CONTAINER and COCKPIT
CONTAINER CONTAINER

CONTAINER RUNTIME and PACKAGING


(DOCKER)
ATOMIC HOST
RED HAT ENTERPRISE LINUX

77 Экосистема Red Hat для Docker-контейнеров


Автоматизация жизненного цикла ПО
CONTAINER CONTAINER CONTAINER CONTAINER CONTAINER

SELF-SERVICE
SERVICE CATALOG
(LANGUAGE RUNTIMES, MIDDLEWARE, DATABASES, …)
BUILD AUTOMATION DEPLOYMENT AUTOMATION
APPLICATION LIFECYCLE MANAGEMENT
CONTAINER CONTAINER (CI/CD)
CONTAINER CONTAINER CONTAINER

CONTAINER ORCHESTRATION & CLUSTER MANAGEMENT


(KUBERNETES)
LOGS &
NETWORKING STORAGE REGISTRY SECURITY
METRICS

CONTAINER INFRASTRUCTURE
CONTAINER AUTOMATION
CONTAINER and COCKPIT
CONTAINER CONTAINER

CONTAINER RUNTIME and PACKAGING


(DOCKER)
ATOMIC HOST
RED HAT ENTERPRISE LINUX

78 Экосистема Red Hat для Docker-контейнеров


Red Hat and Third Party
https://access.redhat.com/articles/2726611 - Container Support Policy
https://access.redhat.com/articles/2726491 - Container Orchestration Tools

● Red Hat и контейнеры заказчика


● RHEL/Atomic и upstream Docker*
● RHEL/Atomic/Docker и контейнеры* заказчика
● RHEL/Atomic/Docker/RedHat Images и приложения* заказчика
● Red Hat полный стек (RHEL/Atomic/Docker/Images/Applications)
● Red Hat и межсерверные средства и наборы контейнеров
● Red Hat и компоненты Docker (swarm*, compose*)
● Red Hat и компоненты Kubernetes (multi-node*, multi-master*)

(*) - не поддерживается или поддержка ограничена, см. ссылки на с.82

79 Экосистема Red Hat для Docker-контейнеров


ЗАКЛЮЧЕНИЕ
Экосистема Red Hat и контейнеры

● Что такое контейнеры


● Предназначение и архитектура
● Среда выполнения контейнеров
● Red Hat Enterprise Linux и Atomic Host
● Команды управления atomic
● Формат образов контейнеров и API управления Docker
● Команды docker
● Реестр образов Red Hat
● Контейнеры и реальный мир
● Межсерверное взаимодействие и безопасность

81 Экосистема Red Hat для Docker-контейнеров


Семинары цикла “Контейнеры”

● Экосистема Red Hat для Docker-контейнеров


● Что такое контейнеры, Docker и Atomic Host
● Упаковка приложений в контейнеры
● Контейнеры в распределенной среде
● Архитектура и возможности Kubernetes
● Вспомогательные сервисы (SDN, Storage, Registry)
● Применение Red Hat OpenShift для поддержки жизненного цикла приложений
● Архитектура и возможности OpenShift Container Platform
● Безопасное выполнение приложений
● Управление приложениями, технологическими средами и контурами
безопасности

82 Экосистема Red Hat для Docker-контейнеров


Полезные ссылки
● http://rhelblog.redhat.com/tag/architecting-containers
● https://access.redhat.com/articles/rhel-atomic-getting-started
● https://access.redhat.com/containers/
● https://access.redhat.com/products/red-hat-enterprise-linux/evaluation
● https://github.com/dsevost/events-workshop-atomic-20170524
● Поддержка контейнеров в Red Hat
● https://access.redhat.com/articles/2726611
● Поддержка компонент Docker в Red Hat
● https://access.redhat.com/solutions/1408853
● Переход с Kubernetes на Red Hat OpenShift (transition period)
● https://access.redhat.com/solutions/2733681
● Межсерверное управление контейнерами (Container Orchestration Tools)
● https://access.redhat.com/articles/2726491

83 Экосистема Red Hat для Docker-контейнеров


ДЕМОНСТРАЦИЯ
Ресурсы для демонстрации

● https://github.com/dsevost/events-workshop-atomic-20170524
● 01-atomic
● 10-docker
● 20-apps
● Инфраструктурные контейнеры демо-стенда Red Hat в MONT
● gluster
● dhcpd
● named

85 Экосистема Red Hat для Docker-контейнеров


СПАСИБО ЗА ВНИМАНИЕ
plus.google.com/+RedHat facebook.com/redhatinc

linkedin.com/company/red-hat twitter.com/RedHatNews

youtube.com/user/RedHatVideos

Вам также может понравиться