Что такое Docker? Искра для контейнерной революции

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

Docker — это программная платформа для создания приложений на основе контейнеров — небольших и легких сред выполнения, которые совместно используют ядро операционной системы, но в остальном работают изолированно друг от друга. В то время как контейнеры использовались в системах Linux и Unix в течение некоторого времени, Docker, проект с открытым исходным кодом, запущенный в 2013 году, помог популяризировать технологию, упростив разработчикам упаковку своего программного обеспечения для «сборки один раз и запуска в любом месте».

Краткая история Docker

Основанная как DotCloud в 2008 году Соломоном Хайксом в Париже, то, что мы теперь знаем как Docker, начиналось как платформа как услуга (PaaS), прежде чем развернуться в 2013 году, чтобы сосредоточиться на демократизации базовых программных контейнеров, на которых работала его платформа. Хайкс впервые продемонстрировал Docker на PyCon в марте 2013 года, где он объяснил, что Docker был создан, потому что разработчики продолжали просить базовую технологию, лежащую в основе платформы DotCloud. «Мы всегда думали, что было бы здорово иметь возможность сказать: «Да, вот наша низкоуровневая часть. Теперь вы можете делать контейнеры Linux с нами и делать все, что захотите, идти создавать свою платформу». Вот что мы делаем». Так родился Docker, а проект с открытым исходным кодом быстро набрал обороты у разработчиков и привлек внимание таких известных поставщиков технологий, как Microsoft, IBM и Red Hat, а также венчурных капиталистов, готовых вложить миллионы долларов в инновационный стартап. Началась контейнерная революция.

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

Как описал это Хайкс в своем выступлении на PyCon, контейнеры — это «автономные единицы программного обеспечения, которые вы можете доставить с сервера там на сервер там, от вашего ноутбука до EC2 до гигантского сервера без операционной системы, и он будет работать таким же образом, потому что он изолирован на уровне процесса и имеет свою собственную файловую систему». Упростив этот процесс, Docker быстро приблизился к де-факто отраслевому стандарту для контейнеров. Docker позволяет разработчикам развертывать, реплицировать, перемещать и создавать резервные копии рабочей нагрузки одним оптимизированным способом, используя набор повторно используемых образов, чтобы сделать рабочие нагрузки более переносимыми и гибкими, чем позволяли предыдущие методы.
В мире виртуальных машин (ВМ) это можно сделать, сохраняя приложения отдельно при работе на одном и том же оборудовании, но в этом мире каждая виртуальная машина требует своей собственной операционной системы, что означает, что они, как правило, большие, медленные для запуска, трудные для перемещения и громоздкие для обслуживания и обновления. Где контейнеры отмечали определенный сдвиг по сравнению с эпохой виртуальных машин, так это путем изоляции сред выполнения при совместном использовании базового ядра ОС, обеспечивая легкий и быстрый вариант для разработчиков.

Docker: составные части

Docker взлетел с разработчиками программного обеспечения, потому что он нашел новый способ упаковать инструменты, необходимые для сборки и запуска контейнера, более оптимизированным и упрощенным способом, чем это было возможно ранее. Разбитый на составные части, Docker включает в себя Dockerfile, образы контейнеров, утилиту Docker run, Docker Hub, Docker Engine, Docker Compose и Docker Desktop. Dockerfile. Каждый контейнер Docker начинается с файла
Dockerfile. Этот текстовый файл содержит набор инструкций по созданию образа Docker, включая операционную систему, языки, переменные среды, расположение файлов, сетевые порты и любые другие компоненты, необходимые для запуска.
Образ Docker. Подобно моментальному снимку в мире виртуальных машин, образ Docker представляет собой переносимый исполняемый файл только для чтения, содержащий инструкции по созданию контейнера и спецификации, для каких программных компонентов контейнер будет работать и как.
Утилита запуска Docker. Утилита запуска Docker — это команда, которая запускает контейнер. Каждый контейнер является экземпляром образа, и несколько экземпляров одного и того же образа могут быть запущены одновременно.
Концентратор Docker. Docker Hub — это репозиторий, в котором можно хранить, совместно использовать и управлять образами контейнеров. Думайте об этом как о собственной версии GitHub Docker, но специально для контейнеров.
Двигатель Docker. Docker Engine является ядром Docker. Именно базовая клиент-серверная технология создает и запускает контейнеры. Docker Engine включает в себя длительный процесс демона, называемый dockerd для управления контейнерами, API, которые позволяют программам взаимодействовать с демоном Docker, и интерфейс командной строки.
Docker Compose. Docker Compose — это средство командной строки, использующее файлы YAML для определения и запуска многоконтейнерных приложений Docker. Он позволяет создавать, запускать, останавливать и перестраивать все службы из конфигурации, а также просматривать состояние и выходные данные журнала всех запущенных служб.
Рабочий стол Docker. Все эти составные части упакованы в приложение Docker Desktop, обеспечивая удобный способ создания и совместного использования контейнерных приложений и микрослужб.

Преимущества Docker

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

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

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

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

Недостатки Docker

Контейнеры решают очень много проблем, но они не решают всех бед разработчиков.

Контейнеры Docker не являются виртуальными машинами. В отличие от виртуальных машин, контейнеры используют контролируемые части ресурсов операционной системы узла, что означает, что элементы не так строго изолированы, как на виртуальной машине.

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

Docker containers are stateless and immutable. Containers boot and run from an image that describes their contents. That image is immutable by default—once created, it doesn’t change. But a container instance is transient. When it is removed from system memory it’s gone forever. If you want your containers to persist state across sessions, like a virtual machine, you need to design for that persistence.

Что такое Docker сегодня?

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

Docker became mainstream by making it easy to move the code for an application and all of its dependencies from the developer’s laptop to a server. But the rise of containers led to a shift in the way applications are built—from monolithic stacks to networks of microservices. Soon many users needed a way to orchestrate and manage groups of containers at scale.

Рожденный из Google, проект Kubernetes с открытым исходным кодом быстро стал лучшим способом сделать это, заменив собственные попытки Docker решить эту проблему с помощью своего оркестратора Swarm (RIP). На фоне растущих проблем с финансированием Docker в конечном итоге продал свой корпоративный бизнес Mirantis в 2019 году, который с тех пор поглотил Docker Enterprise в Mirantis Kubernetes Engine.

Рожденный из Google, проект Kubernetes с открытым исходным кодом быстро стал лучшим способом сделать это, заменив собственные попытки Docker решить эту проблему с помощью своего оркестратора Swarm (RIP). На фоне растущих проблем с финансированием Docker в конечном итоге продал свой корпоративный бизнес Mirantis в 2019 году, который с тех пор поглотил Docker Enterprise в Mirantis Kubernetes Engine.

Перейти к верхней панели