Контейнеризация и DockerВиртуальные машины (VM) решили проблему траты средств на неиспользуемые ресурсы. Эта технология позволила запускать приложения независимо друг от друга внутри одного сервера, выделяя полностью изолированное пространство. Но, к сожалению, любая технология имеет свои недостатки. Запуск VM требует полноценной операционной системы (OS), которая потребляет CPU, RAM, хранилище и, в зависимости от OS, нужно учитывать расходы на лицензию. Эти факторы влияют на скорость загрузки и усложняют переносимость.
Следующим этапом эволюции стала контейнеризация. Данная технология решила предыдущую проблему, так как контейнеры не используют полноценную OS, что позволяет освободить большое количество ресурсов и предоставляет быстрое и гибкое решение для переносимости.
Docker адаптировал эту технологию и сделал ее легкодоступной. Когда говорят о контейнерах, в большинстве случаев имеют ввиду Docker. Docker-контейнеры как правило, это Linux-контейнеры. Уже существуют Windows и macOS-системы для запуска контейнеров, но важно понимать, что в таком случае появляется дополнительная прослойка. Например, Docker на Mac незаметно запускает контейнеры внутри легковесной Linux VM.
В основе работы Docker лежит стандартизированный способ исполнения кода. Можно сказать что Docker – это операционная система для контейнеров. Подобно тому как виртуальная машина создает виртуальное представление аппаратного обеспечения сервера (то есть устраняет необходимость непосредственно управлять таковым), контейнеры создают виртуальное представление серверной операционной системы. После установки на каждый сервер Docker предоставляет доступ к простым командам, необходимым для сборки, запуска или остановки контейнеров.
Так как контейнеры требуют гораздо меньше ресурсов (например, им не нужна полная ОС), их проще развертывать и они быстрее запускаются. Это позволяет повысить плотность развертываний, то есть запустить на одной единице оборудования больше служб и сократить затраты на них.
Запуск на одном ядре приводит к тому, что уровень изоляции будет ниже, чем на виртуальных машинах.
Основная цель образа — привести среду (зависимости) к единообразию в различных развертываниях. Это означает, что вы можете отладить образ на одном компьютере, а затем развернуть его на другом компьютере и получить ту же среду.
Образ (image) контейнера — это способ упаковки приложения или службы для надежного и воспроизводимого развертывания. Можно сказать, что Docker является не только технологией, но еще философией и процессом. Образы сделаны из упорядоченных
слоев (layers). Вы можете представить слой, как набор изменений файловой системы, например установка необходимого ПО. Когда вы берете все слои и складываете их вместе, вы получаете новый образ, который содержит все накопленные изменения.
При работе с Docker решается проблема того что приложение работает только на локальном компьютере, но не в рабочей среде. Упакованное приложение Docker будет выполняться в любой поддерживаемой среде Docker и будет работать одинаково во всех сценариях развертывания (разработка, контроль качества, промежуточное размещение и рабочая среда).
https://www.docker.com/#cloud101 #docker