Я слышал о Docker несколько дней назад и хотел познакомиться.
Но на самом деле я не знаю, для чего предназначен этот «контейнер»?
Что такое контейнер?
Может ли он заменить виртуальную машину, предназначенную для разработки?
Проще говоря, в чем цель использования Docker в компаниях? Главное преимущество?
Ответы:
ВМ: Используя программное обеспечение ВМ, например, Ubuntu можно установить внутри Windows. И они оба побежали бы одновременно. Это похоже на создание ПК с его основными компонентами, такими как ЦП, ОЗУ, диски, сетевые карты и т. Д., Внутри операционной системы и сборка их для работы, как если бы это был настоящий ПК. Таким образом, виртуальный ПК становится «гостем» внутри реального ПК, который со своей операционной системой называется хостом.
Контейнер: он такой же, как указано выше, но вместо использования всей операционной системы он сокращает «ненужные» компоненты виртуальной ОС, чтобы создать ее минимальную версию. Это привело к созданию LXC (контейнеров Linux), которые быстрее виртуальных машин.
Докер: контейнер докеров , в отличие от виртуальной машины и контейнера, не требует отдельной операционной системы и не включает в себя ее. Вместо этого он полагается на функциональность ядра Linux и использует изоляцию ресурсов.
Назначение Docker: его основная цель - автоматизировать развертывание приложений внутри программных контейнеров и автоматизацию виртуализации на уровне операционной системы в Linux. Он более легкий, чем стандартные контейнеры, и загружается за секунды.
(Обратите внимание, что в случае Docker не требуется гостевая ОС)
источник
[Обратите внимание, что этот ответ касается контейнеров Linux и может не полностью применяться к другим операционным системам. ]
Это приложение : контейнер - это способ запускать приложения, изолированные друг от друга. Вместо виртуализации оборудования для запуска нескольких операционных систем контейнеры полагаются на виртуализацию операционной системы для запуска нескольких приложений. Это означает, что вы можете запускать больше контейнеров на одном оборудовании, чем виртуальные машины, потому что у вас работает только одна копия ОС, и вам не нужно заранее выделять память и ядра ЦП для каждого экземпляра вашего приложения. Как и любое другое приложение, когда контейнеру требуется ЦП или память, он выделяет их, а затем освобождает их по завершении, позволяя другим приложениям использовать те же ограниченные ресурсы позже.
Они используют пространства имен ядра : каждый контейнер по умолчанию получит среду, в которой указаны следующие пространства имен:
/
в контейнере будет отличаться от файловой системы/
на хосте.Каждое из этих пространств имен также не позволяет контейнеру видеть такие вещи, как файловая система или процессы на хосте или в других контейнерах, если вы явно не удалите эту изоляцию.
И другие инструменты безопасности Linux : контейнеры также используют другие функции безопасности, такие как SELinux, AppArmor, Capabilities и Seccomp, чтобы ограничить пользователей внутри контейнера, включая пользователя root, от возможности покинуть контейнер или негативно повлиять на хост.
Упакуйте свои приложения с их зависимостями для переносимости : упаковка приложения в контейнер включает в себя сборку не только самого приложения, но и всех зависимостей, необходимых для запуска этого приложения, в переносимый образ. Этот образ является базовой файловой системой, используемой для создания контейнера. Поскольку мы только изолируем приложение, эта файловая система не включает ядро и другие утилиты ОС, необходимые для виртуализации всей операционной системы. Таким образом, образ контейнера должен быть значительно меньше, чем образ эквивалентной виртуальной машины, что ускоряет развертывание на узлах сети. В результате контейнеры стали популярным вариантом для развертывания приложений в облаке и удаленных центрах обработки данных.
Это зависит : если ваша среда разработки работает под управлением Linux, и вам либо не нужен доступ к аппаратным устройствам, либо допустимо иметь прямой доступ к физическому оборудованию, тогда вы обнаружите, что переход на контейнер Linux довольно прост. Идеальной целью для контейнера докеров являются такие приложения, как веб-API (например, приложение REST), к которым вы получаете доступ через сеть.
Dev or Ops : Docker обычно попадает в среду одним из двух путей. Разработчики ищут способ более быстрой разработки и локального тестирования своих приложений, а также операций, стремящихся выполнять большую рабочую нагрузку на меньшем количестве оборудования, чем это было бы возможно с виртуальными машинами.
Или Devops : одной из идеальных целей является немедленное использование Docker из инструмента развертывания CI / CD, компиляция приложения и немедленное создание образа, который развертывается для разработки, CI, prod и т. Д. Контейнеры часто сокращают время на перемещение приложения от проверки кода до его доступности для тестирования, что делает разработчиков более эффективными. А при правильном проектировании тот же образ, который был протестирован и одобрен разработчиками и инструментами CI, можно развернуть в производственной среде. Поскольку этот образ включает в себя все зависимости приложения, значительно снижается риск поломки в производственной среде, которая работала в процессе разработки.
Масштабируемость : последнее ключевое преимущество контейнеров, о котором я упомяну, заключается в том, что они разработаны с учетом горизонтальной масштабируемости. Когда у вас есть приложения без сохранения состояния при большой нагрузке, контейнеры намного проще и быстрее масштабируются из-за их меньшего размера изображения и меньших накладных расходов. По этой причине вы видите, что контейнеры используются многими крупными веб-компаниями, такими как Google и Netflix.
источник
Несколько дней назад мне в голову приходили одни и те же вопросы, и что я обнаружил после этого, давайте разберемся очень простыми словами.
Давайте возьмем пример, что мы разрабатываем приложение с использованием служб nodeJs, MongoDB, Redis, RabbitMQ и т. Д. [Вы можете думать о любых других службах].
Теперь мы сталкиваемся со следующими вещами как с проблемами в процессе разработки и доставки приложений, если мы забываем о существовании докера или других альтернатив контейнерных приложений.
Совместимость сервисов (nodeJs, mongoDB, Redis, RabbitMQ и т. Д.) С ОС (даже после нахождения совместимых версий с ОС, если что-то непредвиденное произойдет, связанное с версиями, нам нужно еще раз проверить совместимость и исправить это).
Если для двух компонентов системы требуется библиотека / зависимость с разными версиями в приложении в ОС (это требует повторного просмотра каждый раз в случае неожиданного поведения приложения из-за проблемы с версией библиотеки и зависимости).
Наиболее важно то, что если к команде присоединяется новый человек, нам очень сложно настроить новую среду, человек должен следовать большому набору инструкций и запускать сотни команд, чтобы окончательно настроить среду. И это требует времени и усилий.
Люди должны убедиться, что они используют правильную версию ОС и проверить совместимость сервисов с ОС, и каждый разработчик должен следить за этим каждый раз при настройке.
У нас также есть разные среды, такие как разработка, тестирование и производство. Если одному разработчику удобно использовать одну ОС, а другому - другую ОС И в этом случае мы не можем гарантировать, что наше приложение будет вести себя одинаково в этих двух разных ситуациях. .
Все это усложняет нам жизнь в процессе разработки , тестирования и доставки приложений.
Поэтому нам нужно что-то, что решает проблему совместимости и позволяет нам вносить изменения и модификации в любой системный компонент, не затрагивая другие компоненты.
Как Docker решает вышеуказанные проблемы -
Мы можем запускать каждый сервисный компонент (nodeJs, MongoDB, Redis, RabbitMQ) в разных контейнерах со своими зависимостями и библиотеками в одной ОС, но в разных средах.
Нам нужно просто запустить конфигурацию докера один раз, тогда все разработчики из нашей команды смогут начать работу с простой командой запуска докера, мы сэкономили здесь много времени и усилий :) .
Надеюсь, это будет полезно.
источник
Позвольте мне попытаться дать как можно более простые ответы:
Что такое контейнер?
Проще говоря: пакет, содержащий программное обеспечение . В частности, приложение и все его зависимости связаны вместе. Обычная среда приложений без докеров подключается непосредственно к ОС, а контейнер Docker - это уровень абстракции ОС.
Контейнер отличается от изображения тем, что контейнер является экземпляром среды выполнения изображения - аналогично тому, как объекты являются экземплярами классов среды выполнения, если вы знакомы с ООП.
И виртуальные машины, и контейнеры Docker представляют собой методы виртуализации, поскольку они обеспечивают абстракцию поверх системной инфраструктуры.
На виртуальной машине работает полноценная «гостевая» операционная система с виртуальным доступом к ресурсам хоста через гипервизор. Это означает, что виртуальная машина часто предоставляет среде больше ресурсов, чем ей действительно нужно. В целом виртуальные машины предоставляют среде больше ресурсов, чем требуется большинству приложений. Таким образом, контейнеры - это более легкая техника. Эти двое решают разные проблемы.
Контейнеризация идет рука об руку с микросервисами. Меньшие службы, составляющие более крупное приложение, часто тестируются и запускаются в контейнерах Docker. Это упрощает непрерывное тестирование.
Кроме того, поскольку контейнеры Docker доступны только для чтения, они обеспечивают соблюдение ключевого принципа DevOps: производственные сервисы должны оставаться неизменными.
Некоторые общие преимущества их использования:
источник