Контейнеризация
Содержание лекции
Проблема версионирования
Проблема поставки
Решение проблемы
Виртуализация
Виртуализация. Гипервизоры
Виртуализация. Примеры
Виртуализация. Образы
Контейнеризация
Контейнеризация. Docker
Контейнеризация vs Виртуализация
Docker. Компоненты
Docker. Как работает?
Docker. Этапы создания
Dockerfile
Union FS
Docker. Слои
Слои и кэширование
Docker. Image
Docker. Container
Docker. Запуск
Docker. Внутри контейнера
Docker. Network
Docker. Volume
Как нужно упаковывать свои приложения
Docker-Registry
DockerHub
Docker. Проблема масштабирования
Docker-Compose
Docker-Compose. Конфигурация
Docker-Compose. Запуск
Docker-Compose. Проблема обслуживания
Оркестрация
Оркестрация. Kubernetes
Основы Kubernetes
Популярные оркестраторы
Проблема лицензированного программного обеспечения
3.41M
Category: softwaresoftware

Контейнеризация

1. Контейнеризация

Алексеев Антон
Аспирант ВШКФСУ

2. Содержание лекции

Виртуализация
Популярные гипервизоры.
Виртуальные машины.
Виртуальные сети.
Proxmox
Контейнеризация
Linux контейнер
Docker: слои, образы, контейнеры, Docker-файл, Registry.
Docker-Compose
Оркестрация
Kubernetes
Rancher
Openshift
Программное обеспечение облачных платформ
2

3. Проблема версионирования

Python3: print("Hello world")
Python2: print "Hello world"
Программное обеспечение облачных платформ
3

4. Проблема поставки

Программное обеспечение облачных платформ
4

5. Решение проблемы

Виртуализация
Программное обеспечение облачных платформ
Контейнеризация
5

6. Виртуализация

Виртуализация — это процесс создания программной (виртуальной) версии компьютера с выделенными ресурсами ЦП, памяти и хранилища, которые "заимствуются" у
физического компьютера (например, персонального компьютера) и (или) удаленного сервера, например сервера в центре обработки данных поставщика облачных
услуг. Виртуальная машина — это компьютерный файл (обычно его называют образом), который действует как обычный компьютер. Она может работать в окне в
качестве отдельной вычислительной среды (часто для запуска другой операционной системы) или даже как целая система, как это часто реализуется на рабочих
компьютерах. Виртуальная машина отделена от остальной части системы, то есть программное обеспечение виртуальной машины не может вмешиваться в работу
основной операционной системы компьютера.
Программное обеспечение облачных платформ
6

7. Виртуализация. Гипервизоры

Гипервизор - программа или аппаратная
схема, обеспечивающая или позволяющая
одновременное, параллельное выполнение
нескольких операционных систем на одном
и том же хост-компьютере. Гипервизор также
обеспечивает изоляцию операционных
систем друг от друга, защиту и безопасность,
разделение ресурсов между различными
запущенными ОС и управление ресурсами.
https://habr.com/ru/company/vps_house/blog/349788/
Программное обеспечение облачных платформ
7

8. Виртуализация. Примеры

Программное обеспечение облачных платформ
8

9. Виртуализация. Образы

Импорт/экспорт виртуальных машин
Клонирование и перенос
Резервное копирование
Программное обеспечение облачных платформ
9

10. Контейнеризация

Контейнеризация (виртуализация на уровне операционной системы, контейнерная виртуализация, зонная
виртуализация[1]) — метод виртуализации, при котором ядро операционной системы поддерживает несколько
изолированных экземпляров пространства пользователя вместо одного. Эти экземпляры (обычно
называемые контейнерами или зонами) с точки зрения выполняемых в них процессов идентичны
отдельному экземпляру операционной системы. Ядро обеспечивает полную изолированность контейнеров,
поэтому программы из разных контейнеров не могут воздействовать друг на друга.
Программное обеспечение облачных платформ
10

11. Контейнеризация. Docker

Программное обеспечение для автоматизации развёртывания и управления приложениями в среде
виртуализации на уровне операционной системы; позволяет «упаковать» приложение со всем его
окружением и зависимостями в контейнер, а также предоставляет среду по управлению контейнерами.
Виртуальные машины содержат приложение,
необходимые библиотеки или двоичные файлы и всю
операционную систему. Полная виртуализация требует
больше ресурсов, чем создание контейнеров.
Программное обеспечение облачных платформ
Контейнеры включают в себя приложение и все
его зависимости. Но они используют ядро ОС
совместно с другими контейнерами, которые
выполняются в изолированных процессах в
пользовательском пространстве операционной
системы узла.
11

12. Контейнеризация vs Виртуализация

Программное обеспечение облачных платформ
12

13. Docker. Компоненты

Программное обеспечение облачных платформ
13

14. Docker. Как работает?

Схема работы:
Пользователь отдает команду с
помощью клиентского интерфейса
Docker-демону, развернутому на Dockerхосте. Например, скачать готовый образ
из реестра (хранилища Docker-образов)
с помощью команды docker pull.
Взаимодействие между клиентом и
демоном обеспечивает REST API. Демон
может использовать публичный (Docker
Hub) или частный реестры.
Исходя из команды, заданной клиентом,
демон выполняет различные операции с
образами на основе инструкций,
прописанных в файле Dockerfile.
Например, производит их
автоматическую сборку с помощью
команды docker build.
Работа образа в контейнере. Например,
запуск docker-image, посредством
команды docker run или удаление
контейнера через команду docker kill.
Программное обеспечение облачных платформ
14

15. Docker. Этапы создания

Создание Docker файла
Docker build – создание image
Docker run – запуск контейнера
Программное обеспечение облачных платформ
15

16. Dockerfile

FROM python:3.8.3-alpine
ADD - копирование файлов из контекста создания или из удаленных URL в создаваемый образ;
CMD - запуск заданной инструкции во время инициализации контейнера – замещается
аргументами, указанными в команде `docker run`;
COPY - копирование файлов из контекста сборки в образ;
ENTRYPOINT - определяет исполняемый файл (и аргументы по умолчанию), запускаемый при
инициализации;
ENV - определение переменных сред внутри образа;
FROM - определение основного образа для файла Dockerfile;
RUN - запуск инструкции внутри контейнера с сохранением результата;
USER - задает пользователя для использования во всех последующих инструкциях `RUN`, `CMD`,
`ENTRYPOINT`;
VOLUME - создание точки монтирования с указанным именем;
WORKDIR - определение рабочего каталога для всех последующих инструкций `RUN`, `CMD`,
`ENTRYPOINT`;
RUN mkdir -p /home/app
RUN addgroup -S app && adduser -S app -G app
ENV HOME=/home/app
ENV APP_HOME=/home/app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
RUN apk update && apk add libpq
COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --no-cache /wheels/*
COPY ./entrypoint.sh $APP_HOME
COPY . $APP_HOME
RUN chown -R app:app $APP_HOME
USER app
ENTRYPOINT [ "/home/app/web/entrypoint.sh" ]
Программное обеспечение облачных платформ
16

17. Union FS

FROM ubuntu:18.04
LABEL end=“dev”
COPY . /app
RUN make /app
RUN rm -r $HOME/.cache
CMD python /app/app.py
FROM – создание слоя от образа ubuntu:18.04;
LABEL – модификация метаданных (слой не создается);
COPY - добавление файлов из контекста сборки (слой
создается);
RUN – выполнение команд (слой создается);
CMD – модификация метаданных (слой не создается)
Программное обеспечение облачных платформ
17

18. Docker. Слои

Слои это папки
Каждый слой – отдельная прослойка
образа
Из слоев формируются необходимые
зависимости
Программное обеспечение облачных платформ
18

19. Слои и кэширование

Кэш используется для инструкций:
- если в кэше была обнаружена
инструкция;
- в кэше имеется слой, который
имеет в точности ту же
инструкцию и предшествующий
родительски слой
! Важно: для инструкций `COPY` и
`ADD` кэш считается некорректным,
если изменилась контрольная сумма
или метаданные для любого файла
Программное обеспечение облачных платформ
19

20. Docker. Image

Образ (снимок) контейнеров
Эталон наших контейнеров
Программное обеспечение облачных платформ
20

21. Docker. Container

Каждый контейнер строится на основе Docker-образов.
Контейнеры запускаются напрямую из ядра операционной системы Linux.
Благодаря этому, они потребляют гораздо меньше ресурсов, чем при
аппаратной виртуализации.
Программное обеспечение облачных платформ
21

22. Docker. Запуск

Процесс запуска:
Происходит запуск образа (Docker-image). Docker Engine проверяет существование
образа. Если образ уже существует локально, Docker использует его для нового
контейнера. При его отсутствии выполняется скачивание с Docker Hub.
Создание контейнера из образа.
Разметка файловой системы и добавление слоя для записи.
Создание сетевого интерфейса.
Поиск и присвоение IP-адреса.
Запуск указанного процесса.
Захват ввода/вывода приложения.
Программное обеспечение облачных платформ
22

23. Docker. Внутри контейнера

Зайти внутрь контейнера можно с помощью команды exec –it и указав bash
Внутри находятся все файлы, которые созданы в образе
Структура такая же, как и в Linux ОС
Программное обеспечение облачных платформ
23

24. Docker. Network

Bridge: в этой сети контейнеры запускаются по
умолчанию. Связь устанавливается через bridgeинтерфейс на хосте. У контейнеров, которые
используют одинаковую сеть, есть своя собственная
подсеть, и они могут передавать данные друг другу по
умолчанию.
Host: этот драйвер дает контейнеру доступ к
собственному пространству хоста (контейнер будет
видеть и использовать тот же интерфейс, что и хост).
Macvlan: этот драйвер дает контейнерам прямой
доступ к интерфейсу и суб-интерфейсу (vlan) хоста.
Overlay: этот драйвер позволяет строить сети на
нескольких хостах с Docker (обычно на Docker Swarm
кластере). У контейнеров также есть свои адреса сети
и подсети, и они могут напрямую обмениваться
данными, даже если они располагаются физически на
разных хостах.
Программное обеспечение облачных платформ
24

25. Docker. Volume

Для чего стоит использовать тома в Docker:
шаринг данных между несколькими запущенными
контейнерами,
решение проблемы привязки к ОС хоста,
удалённое хранение данных,
бэкап или миграция данных на другой хост с Docker (для
этого надо остановить все контейнеры и скопировать
содержимое из каталога тома в нужное место).
Программное обеспечение облачных платформ
25

26. Как нужно упаковывать свои приложения

1. Создать докерфайл, написать слои для
создания образа
2. Создать файл с переменными окружения
3. gitlab-ci нужен для CI/CD процесса
4. В Readme описать запуск контейнера
5. Обязательно не забыть указать зависимости
библиотек
Программное обеспечение облачных платформ
26

27. Docker-Registry

Программное обеспечение облачных платформ
27

28. DockerHub

Программное обеспечение облачных платформ
28

29. Docker. Проблема масштабирования

10
Программное обеспечение облачных платформ
29

30. Docker-Compose

Docker Compose — это инструментальное средство, входящее в состав Docker.
Оно предназначено для решения задач, связанных с развёртыванием проектов.
Программное обеспечение облачных платформ
30

31. Docker-Compose. Конфигурация

Используется yaml файл
Определяются сети и тома (volumes)
Можно билдить как с докерфайла, так и пулить готовый
образ (image)
Дополнительно указываются команды
Определяются порты (например вывод на хост)
Задаются условия рестарта
Программное обеспечение облачных платформ
31

32. Docker-Compose. Запуск

Программное обеспечение облачных платформ
32

33. Docker-Compose. Проблема обслуживания

Не масштабируется на большое количество контейнеров
Нет защиты
Низкий показатель надежности
Тяжело обслуживать множество контейнеров
Проблема мониторинга
Программное обеспечение облачных платформ
33

34. Оркестрация

Что должно быть в хорошем удобном оркестраторе:
Возможность быстро начать работать, чтобы не тратить полгода на изучение и тестирование
Набор определенных возможностей из коробки:
управление секретами — передавать приложению пароли, токены, доступы к БД, а не хранить все в
коде
service discovery — подключать новые реплики приложения к инфраструктуре
возможности кастомизации кластера — для добавления своих сущностей и организации API для
наших целей
Наименьший vendor lock-in: когда разработчики завязывают покупателя на конкретную
технологию, и переход от одного поставщика к другому сопровождается большими
сложностями
Горизонтальное масштабирование: автоматическое масштабирование узлов кластера и
приложения. Нагрузка может быть нелинейной, поэтому оркестратор должен уметь
увеличить количество реплик приложения в процессе работы. Если в кластере не хватает
ресурсов, нужно соответственное увеличение количества узлов кластера:
Программное обеспечение облачных платформ
34

35. Оркестрация. Kubernetes

Программное обеспечение облачных платформ
35

36. Основы Kubernetes

kube-api-server, это центральная точка входа для всех компонентов Kubernetes и людей, которые
работают с кластером. Он предоставляет api для управления кластером
kube-controller-manager управляет контроллерами, например, node controller, который следит за node,
или replica controller, который следит за количеством подов, развернутых в нашем кластере
kube-sheduler определяет, когда и на каком узле будет работать под
хранилище etcd, в котором хранятся состояния кластера в формате ключ-значение
cloud-contoller — его наличие опционально. Он следит за контроллерами определенного публичного или
приватного облака
Программное обеспечение облачных платформ
36

37. Популярные оркестраторы

Программное обеспечение облачных платформ
37

38. Проблема лицензированного программного обеспечения

https://habr.com/ru/news/t/654127/
https://habr.com/ru/news/t/654171/
Программное обеспечение облачных платформ
38
English     Русский Rules