Контейнеризация. Типичные проблемы

1.

Контейнеризация
Евгений Буравцов
Тим-лид команды DevOps-инженеров
в российской ИТ-компании
1

2.

Контейнеризация
Какие проблемы обычно возникают
в процессе разработки и развертывания
приложений?
2

3.

Типичные проблемы

Работа на моей машине;

Развертывание ПО с зависимостями и
конфигурациями;

Обновление ПО и переход на более ранние
версии;

Ограничение использования ресурсов;

Неэффективное использование аппаратных
средств.
3

4.

Что такое Docker?

Docker — это открытая платформа для разработки, отправки и запуска приложений.

Docker стандартизировал способы сборки, отправки и запуска приложений.
BUILD
Development Environments
SHIP
Secure Content & Collaboration
RUN
Deploy, Manage, Scale
4

5.

Контейнер
Контейнер — это
стандартная единица
программного обеспечения,
которая упаковывает код и
все его зависимости, поэтому
приложение быстро и
надежно переносится из
одной вычислительной
среды в другую.
6

6.

Виртуальные машины или контейнеры
VM
VM
VM
App
App
App
Dependencies
Operation
System
Dependencies
Operation
System
App
App
App
Dependencies
Dependencies
Dependencies
Container
Container
Container
Dependencies
Operation
System
Hypervisor
Container Runtime
Operation System
Operation System
Hardware
Hardware
Virtualization
Containerization
7

7.

Виртуализация или контейнеризация
Критерии
Виртуализация
Контейнеризация
Дисковое пространство
ОС + выделенное
гипервизором
ОС с базовой дедупликацией
(повторное использование
слоев)
Скорость запуска
Низкая
Высокая
Производительность
Средняя
Высокая
Устойчивость
Высокая
Средняя
Безопасность
Высокая
Средняя
Эмуляция
Расширенная
Базовая
Поставка (deploy)
Медленная
Быстрая
Потребление ресурсов
Высокое
Низкое
8

8.

Проблемы → Решения
Проблема
Трад
ВМ
Конт
Работает на моей машине



Развертывание ПО с зависимостями и конфигурациями



Обновление ПО и переход на более ранние версии



Ограничение использования ресурсов



Неэффективное использование аппаратных средств



9

9.

Нет «серебряной пули»
Всегда есть варианты, а у вариантов свои последствия.
Но контейнеры хорошо подходят для многих приложений
(особенно микросервисов) в облаке и корпоративной среде.
10

10.

Архитектура Docker
Client
DOCKER_HOST
$ docker build
...
Docker daemon
$ docker pull
...
Registry
repository:
ubuntu
repository:
python
Containers
Docker Image
Cache
ubuntu:20.04
python:3.8
p37_app1
python:3.7
ubuntu:19.04
python:3.7
ubuntu:18.04
python:2.7
$ docker run ...
ubuntu:20.04
p37_app2
Remote API
database
images
$ curl ...
OS
Hardware
Another host
Docker daemon
11

11.

Архитектура Docker (продолжение)

В Docker используется архитектура клиент-сервер.

Клиент Docker общается с демоном Docker, который выполняет трудоемкие
процессы создания, запуска и распределения контейнеров Docker.

Клиент и демон Docker могут выполняться на одной системе, или можно подключить
клиент Docker к удаленному демону Docker.

Клиент и демон Docker взаимодействуют с помощью REST API, через сокеты UNIX или
сетевой интерфейс.

Кроме того, демон может взаимодействовать с другими демонами для управления
сервисами Docker.
12

12.

Архитектура Docker → Реестры Docker

В реестре Docker хранятся репозитории образов Docker.

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

При использовании команд docker image pull или docker container run
необходимые образы извлекаются из настроенного реестра. При использовании
команды docker image push образ отправляется в настроенный реестр.
13

13.

Объекты Docker
Docker
Registry
pull
push
Network
Dockerfile
build
Image
run
connect
Container
mount
Volume
14

14.

Образы

Образ — это шаблон только для чтения с инструкциями по созданию
Image as file system
контейнера Docker.

Configuratio
n
Dependenci
es
Initial
data
Образ содержит файловую систему и метаданные контейнера, такие как
переменные окружения, команда для запуска по умолчанию и другие.

Application
Как правило, образ строится на основе другого образа с некоторой
дополнительной кастомизацией.

Можно создавать собственные образы или использовать созданные другими и
опубликованными в реестре.

Для построения собственного образа необходимо создать Dockerfile,
определить необходимые шаги и запустить его. Каждая команда в Dockerfile
Image as Layers
CMD: python hello.py
workdir /app
создает слой в образе. При изменении Dockerfile и перестроении образа
перестраиваются только те слои, которые изменились.
add hello.py
Base Image (python:3)
15

15.

Контейнеры

Контейнер — это исполняемый экземпляр образа.

Для ОС контейнер — это просто еще один процесс на
вашей машине, который изолирован от всех других
процессов на хост-компьютере.

python
Вы можете создавать, запускать, останавливать,
перемещать или удалять контейнер с помощью Docker
API или командной строки. Контейнер можно
подключить к одной или нескольким сетям,
присоединить к нему хранилище или даже создать
новый образ на основе его текущего состояния.

Container
Thin Read-Write Layer
CMD: python hello.py

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

16.

Старый стиль и новый стиль
Старый стиль предполагает формат:
$ docker COMMAND ARGUMENTS

в нем слишком много команд (путаница);

трудно выделить группы команд;

во многих руководствах и книгах используется старый стиль.
17

17.

Старый стиль и новый стиль (продолжение)
Новый стиль предполагает формат:
$ docker COMMAND SUBCOMMAND
ARGUMENTS
Команды группируются вокруг целевых объектов (образов, контейнеров, сети и т.д.) →
команды управления.
$ docker help
...
Management Commands:
builder
Manage builds
config
Manage Docker
configs
container
Manage containers
image
Manage images
18

18.

Справка
Основная ссылка на команды CLI: docs.docker.com/engine/reference/commandline/docker/.

English     Русский Правила