Баннер мобильный (1) Пройти тест

Docker

Глоссарий

22 августа 2023

Поделиться

Скопировано

Содержание

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

    лого Docker
    Логотип Docker

    Платформа Docker представлена в двух вариантах: бесплатная Community Edition под лицензией Apache и платная Enterprise Edition. Платная версия предназначена для коммерческого использования и распространяется по проприетарной лицензии. Изначально системой можно было пользоваться в Linux и UNIX-системах, но начиная с 2015 года в ПО добавили поддержку Windows.

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

    Контейнеризация — это способ упаковки приложения и всех его зависимостей в один образ, который запускается в изолированной среде, не влияющей на основную операционную систему. С помощью контейнера можно отделить приложение от инфраструктуры: не важно, в каком окружении оно будет работать, есть ли там нужные зависимости и настройки, — разработчикам достаточно создать программу и упаковать все зависимости и настройки в единый образ. Затем ее можно разворачивать и запускать на других системах. Это ускоряет процесс разработки, сокращает промежуток между написанием кода и его выкладкой.

    Контейнеризация напоминает виртуализацию, но технологии отличаются друг от друга. Виртуализация работает как отдельный компьютер со своей операционной системой и виртуальным оборудованием. Внутри одной операционной системы можно запустить другую. При контейнеризации виртуальная среда может запускаться прямо из ядра основной ОС и не виртуализирует оборудование. Поэтому контейнер может работать только в той же операционной системе, что и основная. Так как контейнеры не виртуализируют оборудование, они потребляют меньше ресурсов.

    Как устроен Docker

    структура платформы Docker
    Структура Docker

    На изображении представлена примерная структура платформы. Docker — клиент-серверное приложение. Это означает, что оно состоит из двух частей: сервера и клиента.

    Сервер еще называют Docker-движком или демоном (daemon). Это фоновый процесс, который непосредственно управляет контейнерами. Именно демон создает, разворачивает и запускает контейнеры. Его можно сравнить с двигателем машины.

    Клиент — это программа-интерфейс для командной строки, с которой взаимодействует пользователь. Он отдает команды через терминал. Клиент сообщает нужные сведения демону и отдает ему указания. Если продолжать аналогию с машиной, клиент — это руль и педали.

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

    Компоненты для контейнеризации

    Docker работает со следующими компонентами.

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

    Для сборки образа из Dockerfile используют команду:

    docker build <докерфайл>

    Docker Image. Это образ — неизменяемый файл, из которого разворачивается контейнер. Для этого нужно запустить образ в клиенте с помощью специальной команды:

    docker run <образ>

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

    docker pull <образ>

    При запуске команды docker run программа сначала проверяет, есть ли нужный образ в локальном хранилище. Если его нет, она сама находит файл в репозитории и скачивает на компьютер.

    Docker Container. Это уже готовый и развернутый контейнер, который находится на каком-либо устройстве.

    контейнеризация в Docker
    Компоненты для контейнеризации

    Так пользователь запускает нужный образ через клиент Docker и ждет, пока платформа развернет его в полноценную среду или приложение-контейнер.

    Docker контейнер

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

    Преимущества использования Docker контейнеров:

    1. Изоляция: Контейнеры изолируют приложения друг от друга и от хост-системы, что уменьшает возможные конфликты между зависимостями и обеспечивает более надежную среду выполнения.
    2. Портативность: Контейнеры могут быть созданы и запущены на различных системах без изменений, что делает развертывание приложений более простым и надежным.
    3. Эффективность использования ресурсов: Контейнеры используют общие ресурсы операционной системы и разделяют ядро, что делает их более эффективными по сравнению с виртуальными машинами.
    4. Масштабируемость: Контейнеры легко масштабируются горизонтально, позволяя быстро добавлять экземпляры приложения в ответ на увеличение нагрузки.
    5. Управление версиями: Контейнеры позволяют управлять версиями приложений и их зависимостей, что упрощает процесс развертывания и обновления.

    Чем контейнеризация отличается от виртуализации

    Контейнеры и виртуальные машины (ВМ) — это методы изоляции приложений и окружений. Docker использует виртуализацию на уровне операционной системы, позволяя запускать приложения в изолированных контейнерах, которые делят ядро ОС с хост-системой. ВМ, напротив, создают полные виртуальные компьютеры с отдельными ОС и ресурсами.

    Это означает, что Docker-контейнеры более легкие, потому что они не требуют дублирования всей ОС, как ВМ. Контейнеры также быстрее запускаются и имеют меньший объем, что делает их более эффективными в ресурсоемких средах. Однако ВМ предоставляют большую изоляцию, так как каждая ВМ имеет свою собственную ОС и не зависит от хост-системы.

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

    ХарактеристикаDocker контейнерыВиртуальные машины
    Уровень изоляцииОперационная системаАппаратное обеспечение
    РесурсоемкостьМеньшеБольше
    Запуск и остановкаБыстрееМедленнее
    РазмерМеньшеБольше
    ИзоляцияМенее глубокаяГлубокая
    Нагрузка на хост-системуМеньшеБольше
    СовместимостьОграниченнаяВысокая
    Виртуализация ОСДаДа
    ГипервизорНе требуетсяТребуется

    Эта таблица демонстрирует основные различия между Docker контейнерами и виртуальными машинами.

    Docker и виртуальные машины не всегда хорошо сочетаются вместе. Иногда в практике используется подход, при котором сервер разделяется на виртуальные машины, на которых запускаются контейнеры. Однако такая двойная виртуализация приводит к лишнему расходу ресурсов. Если в организации установилась такая практика, то вместо гипервизора можно использовать Kubernetes, который будет устанавливать приложения непосредственно на физическое оборудование.

    Обычно крупные компании работают с виртуальными машинами, развернутыми на физическом оборудовании в центрах обработки данных. Инженеры инфраструктуры создают виртуальные компьютеры и настраивают на них инфраструктуру. Используя оркестраторы, можно избавиться от этого дополнительного уровня.

    Если у вас есть избыток ресурсов, то можно установить Docker на виртуальную машину, чтобы обеспечить изоляцию между приложениями.

    Что такое Docker Hub

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

    Разработчики со всего мира могут выкладывать Docker-образы. Другие пользователи имеют возможность скачать их, развернуть в контейнеры и использовать на своих машинах. 

    Сейчас в Docker Hub более 100 тысяч образов. Некоторые из них загрузили в базу официальные разработчики. Это, например, Docker Images для mySQL или GitLab.

    Поддержка репозитория уже включена в Docker. Это значит, что достаточно написать команду для установки какой-либо программы, и система сама начнет искать ее в базе данных. По умолчанию это Docker Hub, но платформу можно настроить и под другие репозитории. Например, под внутренние корпоративные базы.

    Docker Compose: множественные образы

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

    Можно скачать их вручную и настроить либо воспользоваться Docker Compose — инструментом для работы с множественными образами и многоконтейнерными приложениями.

    Docker Compose
    Пример работы Docker Compose

    ПО позволяет управлять несколькими образами и контейнерами как одним. С помощью Docker Compose можно создать файл YAML для определения служб и с одной командой запускать и останавливать все что нужно. Инструмент способен ускорить разработку: в многоконтейнерных приложениях количество контейнеров может доходить до нескольких десятков.

    Как хранятся данные в Docker

    При остановке и перезапуске контейнера можно потерять часть рабочей информации, которая в нем записана. Чтобы этого избежать, программисты стремятся разрабатывать приложения с минимальным использованием хранилищ внутри контейнеров. Но обойтись без хранения данных получается не всегда, а от основной системы контейнер изолирован. Существует несколько способов решить проблему.

    Docker Volumes. Это тома — способ хранения информации, который рекомендуют использовать разработчики платформы. Внутри лежат файлы и другие данные. Тома можно подключать к разным контейнерам, выбирать специальные драйверы и хранить информацию не на хосте, а в облаке или на удаленном сервере.

    В Linux тома по умолчанию находятся в /var/lib/docker/volumes/. Другие программы могут получить к ним доступ только через контейнер, а не напрямую. Для создания и управления томами используются средства Docker: команда docker volume create, указание тома при создании контейнера в Dockerfile или docker-compose.yml.

    Bind Mount. Более простой способ реализовать удаленное хранение памяти — папки, которые монтируются в контейнер прямо с хоста. Этот вариант используют для передачи конфигурационных файлов или в процессе разработки. Программист может писать код в среде хоста, а потом передавать его в контейнер.

    Tmpfs и Named Pipes. Так называется особое файловое хранилище, которое есть только в системах Linux. Как правило, оно используется не для хранения файлов, а для обеспечения безопасности. Tmpfs — временное хранилище. Стоит остановить контейнер — данные будут потеряны. Доступ к Tmpfs очень быстрый, поэтому хранилище используют, чтобы оптимизировать работу контейнера.

    Named Pipes — это именованные каналы. Через них с Docker могут работать только пользователи Windows.

    Задачи, которые решает Docker

    Развертывание среды или приложения

    Docker позволяет перенести приложение со всеми зависимостями на другую систему с помощью пары команд в терминале. Настройка зависимостей вручную занимает больше времени. Также с помощью Docker можно быстро развернуть рабочую среду с определенными настройками. Существуют «системные контейнеры», которые содержат дистрибутивы ОС.

    Изолированный запуск

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

    Контроль ресурсов

    Еще одна возможность Docker — распределение ресурсов между разными приложениями. Неизолированные процессы могут конкурировать за память и вычислительные мощности процессора. Изолированные друг от друга программы не делают этого. Docker позволяет эффективнее использовать ресурсы и не допускать конфликтов.

    Повышение безопасности

    Если код контейнерного приложения окажется небезопасным, это не навредит серверу-хосту. При правильной настройке контейнера деятельность кода не затронет основную систему. Даже фатальная ошибка не повлияет на работоспособность остальных служб и программ.

    Работа с микросервисами

    Микросервисная архитектура — такой тип организации ПО, при котором функции большого приложения разделяются на маленькие независимые программные модули. Они общаются друг с другом с помощью протоколов, но в целом работают автономно друг от друга. Docker подходит для реализации архитектуры этого типа: каждый микросервис упаковывается в отдельный контейнер, который можно настроить и протестировать, запустить или остановить отдельно от других.

    Ускорение цикла разработки

    Технологии контейнеризации помогают программировать быстрее. На настройку среды, разворачивание приложений под разными платформами тратится меньше времени. В результате повышается производительность всей команды.

    Управление сложными системами

    Для автоматизации большинства процессов со сложными контейнерными приложениями используются платформы оркестрации. Многие возможности специального ПО завязаны на контейнеризации и функциях Docker.

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

    Масштабирование

    Это еще одна задача для платформ оркестрации. Во многих из них поддерживается автоматическое масштабирование систем под разные площадки и условия. Пример такой платформы — Kubernetes, которая часто используется в связке с Docker.

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

    Как начать работу с Docker

    Docker доступен для Linux, Windows, Mac. Чтобы скачать установочный файл, нужно перейти по ссылке и выбрать подходящую версию. Подробную инструкцию по установке можно найти в официальной документации.

    Расскажем про работу с «первым контейнером». Это практически аналог “Hello, World” для Docker: скачивание и разворачивание популярного образа из репозитория. Обычно используется какой-либо дистрибутив Linux:

    docker run ubuntu echo “Hi, I'm Ubuntu”

    Запись означает «Разверни образ Ubuntu в контейнер и выполни в нем команду echo “Hi, I’m Ubuntu”». Эта команда написана на bash — языке сценариев Linux.

    1. Docker-клиент получит эту запись и отправит инструкции демону.
    2. Тот проверит, есть ли образ Ubuntu на компьютере. Если его не найдется, программа скачает его из Docker Hub и сохранит.
    3. Затем движок развернет образ в контейнер — внутри изолированно от основной системы запустится Ubuntu.
    4. И уже внутри Ubuntu выполнится команда echo “Hi, I’m Ubuntu”. Она выведет в консоль надпись “Hi, I’m Ubuntu”.

    Это наиболее простой пример — возможностей у Docker намного больше.

    Недостатки Docker 

    Высокая потребность в ресурсах

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

    Оркестрация для крупных приложений

    Docker хорош для управления небольшим числом контейнеров. Однако при наличии 50–100 сервисов может потребоваться оркестратор, так как Docker не обладает достаточными инструментами для эффективного управления ресурсами и обеспечения надежности в случае разных сценариев обновления контейнеров.

    Большие приложения с микросервисной архитектурой часто используют оркестраторы, такие как Kubernetes или OpenShift, чтобы обеспечить более высокий уровень управления и надежности. Docker в таких случаях часто оказывается недостаточным.

    Сложности на Windows и macOS

    Docker, изначально разработанный для Linux, может столкнуться с проблемами совместимости на других ОС. Кроме того, установка Docker на Windows иногда может конфликтовать с VirtualBox, что может вызвать трудности при настройке.

    Поделиться

    Скопировано

    0 комментариев

    Комментарии