Докер, що це таке і яка мета


111

Я чула про Докера кілька днів тому і хотіла перейти.

Але насправді я не знаю, яка мета цього "контейнера"?

Що таке контейнер?

Чи може це замінити віртуальну машину, присвячену розробці?

Яка мета, простими словами, використання Docker у компаніях? Основна перевага?



Відповіді:


115

VM: Використовуючи програмне забезпечення VM, наприклад, Ubuntu можна встановити всередині Windows. І вони би обидва бігали одночасно. Це як побудова ПК з його основними компонентами, такими як процесор, оперативна пам’ять, диски, мережеві карти тощо, в операційній системі та зібрати їх для роботи так, ніби це був справжній ПК. Таким чином, віртуальний ПК стає "гостем" всередині фактичного ПК, який має свою операційну систему, яку називають хостом.

Контейнер: Це те саме, що вище, але замість того, щоб використовувати всю операційну систему, він скоротив "непотрібні" компоненти віртуальної ОС, щоб створити мінімальну її версію. Це призводить до створення LXC (Linux Containers). Це швидше, ніж VM Machines.

Докер: контейнер докера, на відміну від віртуальної машини та контейнера, не вимагає або не включає окрему операційну систему. Натомість він покладається на функціональність ядра Linux і використовує ізоляцію ресурсів.
Мета Докера: Основна його мета - автоматизація розгортання програм у контейнерах програмного забезпечення та автоматизація віртуалізації рівня операційної системи в Linux. Це легше, ніж стандартні контейнери та чоботи, підняті за лічені секунди. ггг

(Зверніть увагу, що у випадку Docker не потрібна гостьова ОС)


1
Я намагався шукати ресурси щодо робочого процесу розробки-розгортання докера, але, схоже, нічого не можу знайти. Давайте, наприклад, у мене є середовище лампи з ларавелом + кутовий4. Я можу поділитися певним файлом з товаришами по команді? Як відредагувати джерело програми (php html js / ts), якщо я поміщую його в контейнер? Чи можемо ми все-таки використовувати git / svn у нашому вихідному коді?
anaval

13
VM означає «Віртуальна машина». Не потрібно називати це "VM Machine", оскільки тоді він стає "Віртуальною машиною машини". :)
Джунейт

32

[Зауважте, ця відповідь зосереджена на контейнерах Linux і може не повністю застосовуватися до інших операційних систем. ]

Що таке контейнер?

Це додаток : контейнер - це спосіб запуску програм, ізольованих один від одного. Замість того, щоб віртуалізувати обладнання для запуску декількох операційних систем, контейнери покладаються на віртуалізацію операційної системи для запуску декількох додатків. Це означає, що ви можете запускати більше контейнерів на одному і тому ж апаратному забезпеченні, ніж VM, оскільки у вас працює лише одна копія ОС, і вам не потрібно попередньо розподіляти ядра пам'яті та процесора для кожного примірника вашої програми. Як і будь-яке інше додаток, коли контейнеру потрібен процесор або пам'ять, він розподіляє їх, а потім звільняє їх після завершення, дозволяючи іншим програмам згодом використовувати ті самі обмежені ресурси.

Вони користуються просторами імен ядра : Кожен контейнер за замовчуванням отримає середовище, де розташовані такі простори:

  • Mount: файлові системи, /в контейнері буде відрізнятися від /хоста.
  • PID: ідентифікатори обробки, pid 1 в контейнері - це ваша запущена програма, цей pid буде відрізнятися при перегляді від хоста.
  • Мережа: контейнери запускаються із власним інтерфейсом зворотного зв'язку (127.0.0.1) та приватним IP за замовчуванням. Docker використовує такі технології, як мостові мережі Linux, щоб з'єднати кілька контейнерів разом у своєму приватному мережі.
  • IPC: міжпроцесовий зв'язок
  • UTS: сюди входить ім'я хоста
  • Користувач: Ви можете необов'язково змістити всі ідентифікатори користувача, щоб змістити їх від хоста

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

І інші інструменти безпеки Linux : Контейнери також використовують інші функції безпеки, такі як SELinux, AppArmor, Capability та Seccomp, щоб обмежити користувачів всередині контейнера, включаючи кореневого користувача, від можливості вийти з контейнера або негативно вплинути на хоста.

Упакуйте свої додатки з залежностями для переносимості . Упаковка програми в контейнер включає в себе збірку не тільки самої програми, але і всіх залежностей, необхідних для запуску цієї програми, на переносне зображення. Це зображення є базовою файловою системою, що використовується для створення контейнера. Оскільки ми лише ізолюємо додаток, ця файлова система не включає ядро ​​та інші утиліти ОС, необхідні для віртуалізації всієї операційної системи. Тому зображення для контейнера має бути значно меншим, ніж зображення для еквівалентної віртуальної машини, що дозволяє швидше розгортатися до вузлів по всій мережі. В результаті контейнери стали популярним варіантом для розміщення програм у хмарі та віддалених центрах обробки даних.

Чи може це замінити віртуальну машину, присвячену розробці?

Це залежить : Якщо у вашому середовищі розробки працює Linux, і вам або не потрібен доступ до апаратних пристроїв, або прийнятно мати прямий доступ до фізичного обладнання, ви знайдете міграцію до контейнера Linux досить прямо. Ідеальною ціллю для докерного контейнера є такі програми, як веб-API (наприклад, програма REST), до яких ви отримуєте доступ через мережу.

Яка мета, простими словами, використання Docker у компаніях? Основна перевага?

Dev або Ops : Докер зазвичай виводиться в оточення одним із двох шляхів. Розробники, які шукають спосіб більш швидкого розвитку та локального тестування свого застосування, та операцій, які прагнуть запустити більше робочого навантаження на менше обладнання, ніж це можливо для віртуальних машин.

Або Девопс : Однією з ідеальних цілей є негайне використання Docker негайно з інструмента розгортання CI / CD, складання програми та негайно побудова зображення, розгорнутого для розробки, CI, prod тощо. Контейнери часто скорочують час на переміщення програми від реєстрації коду, поки він не стане доступним для тестування, зробивши розробників більш ефективними. І при правильному проектуванні той самий образ, який був протестований і затверджений розробниками та інструментами CI, може бути розгорнутий у виробництві. Оскільки цей образ включає всі залежності від застосування, ризик того, що щось буде порушено у виробництві, що працювало на розробці, значно знижується.

Масштабованість . Однією з головних переваг контейнерів, яку я зазначу, є те, що вони розроблені для горизонтальної масштабованості на увазі. Якщо у вас є додатки без громадянства під великим завантаженням, контейнери набагато простіше та швидше масштабувати через менший розмір зображення та зменшення накладних витрат. З цієї причини ви бачите контейнери, які використовуються багатьма великими веб-компаніями, такими як Google та Netflix.


2
+1 Я повністю згоден з вашою відповіддю, особливо з частиною "чи може вона замінити віртуальну машину (и)". Я бачу багато коментарів в інших місцях, підкреслюючи, що Docker - це не віртуальна машина, але, з досвіду, для багатьох випадків використання це працює так само добре, або навіть є кращою альтернативою. Що ви маєте на увазі, хоча сказали, що "прийнятно мати прямий доступ до фізичного обладнання"?
Тиріс

2
@tyress, якщо ваш хост Linux, ви можете монтувати пристрої безпосередньо в контейнер Linux. Я бачив, як це робиться зі звуковими пристроями, але все в / dev можна додати. Це обходить певну ізоляцію контейнера, але має сенс для конкретних завдань, таких як настільні додатки.
BMitch

це чудово. Я про це не думав.
Тиріс

@BMitch: дуже чиста та елегантна відповідь, THX !! Я думаю, я зараз можу уявити, що таке контейнер. Однак, було б чудово, якщо ви можете оновити свою відповідь тим, як контейнер пов’язаний з докер? У порівнянні з контейнером та VM, чи докер еквівалентний гіпервізору?
rahulaga_dev

1
Docker - це інструмент, який реалізує контейнери, а також надає решту необхідної екосистеми, наприклад, реєстр на докерному концентраторі та настільних середовищах, в який вбудований VM для запуску контейнерів Linux.
BMitch

6

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

Чому б можна подумати про докер і контейнери, коли все здається нормальним із поточним процесом архітектури та розробки додатків !!

Візьмемо приклад, що ми розробляємо додаток за допомогою сервісів nodeJs, MongoDB, Redis, RabbitMQ тощо [ви можете думати про будь-які інші сервіси].

Тепер ми стикаємося з цими наступними речами як з проблемами в розробці додатків і процесі доставки, якщо ми забудемо про існування докера або інших альтернатив контейнерних програм.

  1. Сумісність послуг (nodeJs, mongoDB, Redis, RabbitMQ тощо) з ОС (навіть після знаходження сумісних версій з ОС, якщо трапляється щось несподіване, пов’язане з версіями, тоді нам потрібно знову переглянути сумісність і виправити це).

  2. Якщо для двох системних компонентів потрібно a бібліотека / залежність з різними версіями в застосуванні в ОС (Це потребує перегляду кожного разу у випадку несподіваної поведінки програми через проблему версії бібліотеки та залежності).

  3. Найголовніше, що якщо нова людина приєднується до команди, нам важко налаштувати нове середовище, людині доводиться виконувати великий набір інструкцій і виконувати сотні команд, щоб нарешті налаштувати середовище. Це потребує часу та зусиль.

    Люди повинні переконатися, що вони використовують правильну версію ОС та перевірити сумісність служб із ОС. І кожен розробник повинен дотримуватися цього під час налаштування.

  4. У нас також є різні середовища, такі як розробник, тестування та виробництво. Якщо одному розробнику зручно користуватися однією ОС, а іншому зручно з іншими ОС, і в цьому випадку ми не можемо гарантувати, що наша програма буде вести себе однаково в цих двох різних ситуаціях .

Все це ускладнює наше життя в процесі розробки , тестування та доставки додатків.

Тому нам потрібно щось, що вирішує питання сумісності і дозволяє нам вносити зміни та модифікації в будь-який компонент системи, не впливаючи на інші компоненти.

Тепер ми думаємо про докер, тому що його мета полягає в тому, щоб зберігати додатки та автоматизувати розгортання програм та надсилати їх дуже легко.

введіть тут опис зображення

Як докер вирішує вищезазначені питання-

  1. Ми можемо запускати кожен сервісний компонент (nodeJs, MongoDB, Redis, RabbitMQ) у різних контейнерах із власними залежностями та бібліотеками в одній ОС, але в різних середовищах.

  2. Ми повинні просто запустити конфігурацію докера раз, тоді всі розробники нашої команди можуть розпочати роботу з простою командою запуску докера, ми заощадили тут багато часу та зусиль :) .

Таким чином контейнери є ізольованим середовищем із усіма залежностями та бібліотеками, поєднаними разом із власним процесом та мережевими інтерфейсами та монтажами .

Усі контейнери використовують однакові ресурси ОС, тому для завантаження та використання процесора потрібно менше часу з меншими витратами на обладнання.

Я сподіваюся, що це буде корисно.


2

Дозвольте спробувати дати якомога простіші відповіді:

Але насправді я не знаю, яка мета цього "контейнера"?

Що таке контейнер?

Простіше кажучи: пакет, що містить програмне забезпечення . Більш конкретно, додаток та всі його залежності поєднані. Звичайне, недокероване середовище додатків підключено безпосередньо до ОС, тоді як контейнер Docker - це шар абстракції ОС.

І контейнер відрізняється від зображення тим, що контейнер - це екземпляр часу виконання зображення - подібно до того, як об'єкти виконують екземпляри класів, якщо ви знайомі з OOP.

Чи може це замінити віртуальну машину, присвячену розробці?

І VM, і контейнери Docker є методами віртуалізації, оскільки вони забезпечують абстракцію поверх системної інфраструктури.

VM запускає повну "гостьову" операційну систему з віртуальним доступом до ресурсів хоста через гіпервізор. Це означає, що VM часто забезпечує навколишнє середовище більше ресурсів, ніж насправді потрібно. Загалом, VM надають середовищу більше ресурсів, ніж потрібно більшості програм. Тому контейнери - техніка легшої ваги. Двоє вирішують різні проблеми.

Яка мета, простими словами, використання Docker у компаніях? Основна перевага?

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

Крім того, оскільки контейнери Docker є лише для читання, вони застосовують ключовий принцип DevOps: виробничі послуги повинні залишатися незмінними

Деякі загальні переваги їх використання:

  • Велика ізоляція послуг
  • Відмінна керованість, оскільки контейнери містять усе, що потрібно додатку
  • Інкапсуляція технології впровадження (у контейнерах)
  • Ефективне використання ресурсів (за рахунок легкої ваги віртуалізації) порівняно з ВМ
  • Швидке розгортання
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.