[Зауважте, ця відповідь зосереджена на контейнерах 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.