Докер Linux что это такое

Обновлено: 21.11.2024

Слово "Docker" относится к нескольким вещам, включая проект сообщества с открытым исходным кодом; инструменты из проекта с открытым исходным кодом; Docker Inc., компания, которая в первую очередь поддерживает этот проект; и инструменты, которые официально поддерживает компания. Тот факт, что технологии и компания имеют одно и то же название, может сбивать с толку.

Вот краткое пояснение:

  • Программное обеспечение для ИТ "Docker" представляет собой технологию контейнеризации, позволяющую создавать и использовать контейнеры Linux®.
  • Сообщество Docker с открытым исходным кодом работает над улучшением этих технологий на благо всех пользователей.
  • Компания Docker Inc. опирается на результаты работы сообщества Docker, делает его более безопасным и делится этими достижениями с остальным сообществом. Затем он поддерживает улучшенные и усиленные технологии для корпоративных клиентов.

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

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

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

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

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

Контейнеры Docker и Linux: есть ли разница?

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

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

Преимущества контейнеров Docker

Модульность

Подход Docker к контейнеризации основан на возможности отключать часть приложения для обновления или восстановления без необходимости отключать все приложение. В дополнение к этому подходу, основанному на микросервисах, вы можете совместно использовать процессы между несколькими приложениями почти так же, как это делает сервис-ориентированная архитектура (SOA).

Управление слоями и версиями изображений

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

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

Откат

Возможно, лучшая часть многослойности — это возможность отката. Каждое изображение имеет слои. Не нравится текущая итерация изображения? Откатить на предыдущую версию. Это поддерживает гибкий подход к разработке и помогает сделать реальностью непрерывную интеграцию и развертывание (CI/CD) с точки зрения инструментов.

Быстрое развертывание

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

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

Есть ли ограничения на использование Docker?

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

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

Помимо этого, существуют другие подсистемы и устройства Linux, для которых не задано пространство имен. К ним относятся устройства SELinux, Cgroups и /dev/sd*. Это означает, что если злоумышленник получит контроль над этими подсистемами, хост будет скомпрометирован. Чтобы оставаться легким, совместное использование ядра хоста с контейнерами открывает возможность уязвимости безопасности. Это отличается от виртуальных машин, которые гораздо более тесно отделены от хост-системы.

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

Docker — это проект с открытым исходным кодом, который автоматизирует развертывание приложений внутри контейнеров Linux и предоставляет возможность упаковать приложение с его зависимостями во время выполнения в контейнер. Он предоставляет инструмент командной строки Docker CLI для управления жизненным циклом контейнеров на основе образов. Контейнеры Linux обеспечивают быстрое развертывание приложений, более простое тестирование, обслуживание и устранение неполадок при одновременном повышении безопасности. Использование Red Hat Enterprise Linux 7 с Docker позволяет клиентам повысить эффективность работы персонала, ускорить развертывание сторонних приложений, создать более гибкую среду разработки и более эффективно управлять ресурсами.

Контейнеры Linux в формате Docker поддерживаются на хостах с включенным SELinux. SELinux не поддерживается, если каталог /var/lib/docker расположен на томе с файловой системой B-tree (Btrfs).

7.1. Компоненты контейнеров Docker

Контейнер — изолированная программная среда приложения. Каждый контейнер основан на изображении, содержащем необходимые данные конфигурации. Когда вы запускаете контейнер из образа, поверх этого образа добавляется записываемый слой. Каждый раз, когда вы фиксируете контейнер (используя команду docker commit), добавляется новый слой изображения для хранения ваших изменений.

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

Изображение платформы — изображение, не имеющее родителя. Образы платформы определяют среду выполнения, пакеты и утилиты, необходимые для запуска контейнерного приложения. Образ платформы доступен только для чтения, поэтому любые изменения отражаются в скопированных изображениях, размещенных поверх него. См. пример такого наложения на Рисунок 7.1, «Расслоение изображения с использованием формата Docker».

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

Dockerfile — файл конфигурации с инструкциями по сборке образов Docker. Файлы Docker позволяют автоматизировать, повторно использовать и совместно использовать процедуры сборки.

Docker, подмножество проекта Moby, представляет собой программную платформу для создания, запуска и управления контейнерами на серверах и в облаке. Термин «докер» может относиться либо к инструментам (командам и демону), либо к формату файла Dockerfile.

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

Однако времена изменились, и вместо того, чтобы концентрироваться на отдельных серверах, Интернет построен на массивах взаимозависимых и дублирующих серверов в системе, обычно называемой "облаком". Благодаря инновациям, таким как пространства имен ядра Linux и контрольные группы, концепция сервера могла быть снята с аппаратных ограничений и вместо этого стала, по сути, частью программного обеспечения. Эти программные серверы называются контейнерами и представляют собой гибрид ОС Linux, на которой они работают, плюс гиперлокализованную среду выполнения (содержимое контейнера).

Контейнеры

Контейнерные технологии можно разделить на три категории:

Builder: инструмент или набор инструментов, используемых для создания контейнера, например distrobuilder для LXC или Dockerfile для Docker.

Engine: приложение, используемое для запуска контейнера. Для Docker это относится к команде docker и демону dockerd. Для других это может относиться к демону containerd и соответствующим командам (таким как podman .)

Оркестрация: технология, используемая для управления многими контейнерами, включая Kubernetes и OKD.

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

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

Альтернативы Docker

Контейнеры Linux способствовали массовому переходу к высокодоступным вычислениям. Существует множество наборов инструментов, которые помогут вам запускать службы или даже всю вашу операционную систему в контейнерах. Open Container Initiative (OCI) — это организация по отраслевым стандартам, которая поощряет инновации, избегая при этом опасности привязки к поставщику. Благодаря OCI у вас есть выбор при выборе цепочки инструментов контейнера, включая Docker, CRI-O, Podman, LXC и другие.

Утилиты контейнера

Контейнеры могут быстро размножаться, независимо от того, работаете ли вы с большим количеством различных служб или с несколькими экземплярами нескольких служб. Если вы решите запускать службы в контейнерах, вам, вероятно, потребуется программное обеспечение, предназначенное для размещения этих контейнеров и управления ими. Это широко известно как оркестрация контейнеров. Хотя Docker и другие контейнерные движки, такие как Podman и CRI-O, являются хорошими утилитами для определений и образов контейнеров, их задача — создавать и запускать контейнеры, а не помогать вам организовывать их и управлять ими. Такие проекты, как Kubernetes и OKD, обеспечивают оркестрацию контейнеров для Docker, Podman, CRI-O и т. д.

При запуске любого из них в производственной среде вы можете захотеть инвестировать в поддержку через следующий проект, такой как OpenShift (который основан на OKD).

Что вам нужно знать о Docker Community Edition

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

Зачем использовать Docker

Одна из замечательных особенностей открытого исходного кода заключается в том, что вы можете выбирать, какую технологию использовать для выполнения задачи. Механизм Docker может быть полезен разработчикам-одиночкам, которым нужна легкая и чистая среда для тестирования, но без сложной оркестровки. Если Docker доступен в вашей системе и все вокруг вас знакомы с цепочкой инструментов Docker, Docker Community Edition ( docker-ce ) — отличный способ начать работу с контейнерами.

Dockerhub и Quay.io — это репозитории, предлагающие образы для выбранной вами системы контейнеров. Если Docker Community Edition недоступен или не поддерживается, то Podman — разумный вариант.Усилия по обеспечению преобладания открытых стандартов продолжаются, поэтому важная долгосрочная стратегия для вашего контейнерного решения должна заключаться в том, чтобы придерживаться проектов, которые уважают и поощряют открытый исходный код и открытые стандарты. Поначалу собственные дополнительные возможности могут показаться привлекательными, но, как это обычно бывает, вы теряете гибкость выбора, когда используете свои инструменты в продукте, который не допускает миграции. Контейнеры могут освобождать, пока они освобождены.

Эта работа находится под лицензией Creative Commons Attribution-Share Alike 4.0 International License.

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

Платформа Docker

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

Docker предоставляет инструменты и платформу для управления жизненным циклом ваших контейнеров:

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

Для чего я могу использовать Docker?

Быстрая и стабильная доставка ваших приложений

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

Рассмотрите следующий пример сценария:

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

Адаптивное развертывание и масштабирование

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

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

Выполнение большего количества рабочих нагрузок на том же оборудовании

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

Архитектура Docker

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

Демон Docker

Демон Docker ( dockerd ) прослушивает запросы Docker API и управляет объектами Docker, такими как образы, контейнеры, сети и тома. Демон также может взаимодействовать с другими демонами для управления службами Docker.

Клиент Docker

Клиент Docker ( docker ) — это основной способ взаимодействия многих пользователей Docker с Docker. Когда вы используете такие команды, как docker run, клиент отправляет эти команды в dockerd, который их выполняет. Команда docker использует Docker API. Клиент Docker может взаимодействовать с несколькими демонами.

Докер для рабочего стола

Docker Desktop – это простое в установке приложение для среды Mac или Windows, которое позволяет создавать контейнерные приложения и микрослужбы и совместно использовать их. Docker Desktop включает демон Docker ( dockerd ), клиент Docker ( docker ), Docker Compose, Docker Content Trust, Kubernetes и Credential Helper. Дополнительные сведения см. в разделе Docker Desktop.

Реестры Docker

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

При использовании команд docker pull или docker run необходимые образы извлекаются из настроенного реестра. Когда вы используете команду docker push, ваш образ помещается в настроенный вами реестр.

Объекты Docker

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

Изображения

Изображение — это шаблон только для чтения с инструкциями по созданию контейнера Docker. Часто изображение основано на другом изображении с некоторыми дополнительными настройками. Например, вы можете создать образ на основе образа ubuntu, но установить веб-сервер Apache и ваше приложение, а также детали конфигурации, необходимые для запуска вашего приложения.

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

Контейнеры

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

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

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

Пример команды запуска docker

Следующая команда запускает контейнер Ubuntu, интерактивно подключается к вашему локальному сеансу командной строки и запускает /bin/bash .

При выполнении этой команды происходит следующее (при условии, что вы используете конфигурацию реестра по умолчанию):

Если у вас нет образа Ubuntu локально, Docker извлекает его из настроенного реестра, как если бы вы запускали docker pull ubuntu вручную.

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

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

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

Docker запускает контейнер и выполняет /bin/bash . Поскольку контейнер работает в интерактивном режиме и подключен к вашему терминалу (из-за флагов -i и -t), вы можете вводить данные с помощью клавиатуры, в то время как выходные данные записываются в ваш терминал.

При вводе команды exit для завершения команды /bin/bash контейнер останавливается, но не удаляется. Вы можете запустить его снова или удалить.

Основная технология

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

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

Читайте также: