Що таке віртуальні машини та контейнери в описах вакансій | ITExpert

Віртуальні машини і контейнери

ITExpert Блог Рекрутинг
Віртуальні машини і контейнери

Сучасну вакансію складно собі уявити без Docker-а десь у вимогах або хоча б у плюсах. Це стало нинішнім трендом, багато компаній не хочуть розглядати Senior-фахівців без цих знань. У більш глобальному розумінні це означає знання контейнеризації або просто контейнерів. Але що має означати цей термін? Чому він різко став таким актуальним? Про все це, а також про різницю між термінами «контейнеризація» та «віртуалізація» розберемо далі у статті.

Що ж таке віртуальна машина?

Щоб зрозуміти причини попиту на контейнеризацію, ми повернемося трохи назад в історії, до попередника контейнерів — віртуальних машин. Це технології, які досі можна зустріти у системних адміністраторів. Найпоширеніші представники цих технологій у профілях кандидатів це: Xen, KVM, Hyper-V, VMware, VirtualBox.

Уявіть собі вигаданий світ книги, фільму чи комп’ютерної гри: там можуть відбуватися вибухи, персонажі — вмирати, світи — руйнуватися і все це без будь-якої шкоди реальному світу. При цьому ви можете взяти книгу з собою, записати фільм на флешку, перенести на інше місце і продовжити з того ж місця, де ви закінчили — і для цього вигаданого світу все продовжиться з тієї ж секунди, ніби час просто зупинився. Для персонажів цей світ реальний, вони існують у ньому і не здогадуються про те, що є щось за межами їхньої реальності, їхній час завмирає за вашим бажанням. А ви можете почерпнути з цього вигаданого світу реальну користь — естетичне задоволення, пізнавальні уроки або просто хороший спосіб прокачати свій розум.

Аналогічно і з віртуальною машиною — це  «вигаданий» комп’ютер усередині комп’ютера, його програмна імітація. Спеціальна потужна програма  «уявляє» цілий комп’ютер і всі його процеси, які йдуть всередині нього, всі програми та файли. Як і для персонажів книги, програми всередині віртуальної машини не знають, що їхній комп’ютер не справжній — вони не відчувають різниці. Як у фільмі «Матриця», вони живуть усередині комп’ютерної симуляції, яка не відрізняється від реальності. Так само як смерті та катастрофи в книгах не завдають шкоди реальному світу, так і помилки у віртуальній машині не викликають збоїв у реальному комп’ютері. Усі пам’ятають «сині екрани смерті», особливо на старих версіях Windows, коли найменша помилка — і система летіла разом із вашими незбереженими даними.

Цього не сталося б, якби помилка сталася всередині віртуальної машини. Тоді б «полетів» лише вигаданий комп’ютер, а реальний спокійно б продовжив працювати.

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

Важлива корисна властивість вигаданих світів — вони можуть бути будь-якими, так і віртуальні машини часто зручно використовувати, щоб поринути в інший «світ». Наприклад, запустити у себе на MacOS Windows або навпаки, або взагалі якийсь Android. Буває потрібно і таке, вам для цього необов’язково бігти купувати новий пристрій, можна просто завантажити віртуальну машину та встановити на неї потрібну вам систему.

Але головна перевага віртуальної машини в тому, що її можна зупинити як фільм, зберегти як файл кудись на робочий стіл, відправити другу поштою, відкрити цей файл на іншому комп’ютері і продовжити роботу з того ж місця — і програми всередині віртуальної машини не зрозуміють що щось змінилося. Уявіть собі, що вам не потрібно везти комп’ютер, на якому ви попросили друга щось налаштувати через усе місто — ви просто відправили свій комп’ютер електронною поштою. Зручно, чи не так?

Виявилося, що цей підхід можна застосовувати і у комерційній сфері. Ми живемо в епоху інтернету, коли у компаній сотні і тисячі серверів по всьому світу. А налаштування одного сервера — довге заняття, потрібно скопіювати купу файлів, налаштувань, встановити багато програм. Процес може тривати багато годин. Цю роботу доведеться повторити на всіх серверах і намагатися від втоми та монотонності не допустити десь помилки. А якщо зробити всю цю роботу лише один раз, усередині віртуальної машини, а потім зберегти її у файл і просто скопіювати на всі комп’ютери? Вийдуть сотні, тисячі абсолютно ідентичних комп’ютерів.Тут вже точно немає місця ніяким помилкам!

А якщо віртуальному комп’ютеру дати доступ в інтернет, то він чимось відрізнятиметься від справжнього комп’ютера для зовнішніх користувачів?

По суті, нічим він не відрізнятиметься! Свого часу ця ідея підірвала інтернет. Саме завдяки їй ми зараз бачимо безліч «хмарних» провайдерів, які, загалом, торгують віртуальними машинами «під ключ»: AWS, Azure, GCP.

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

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

Віртуальна машина чи контейнер: у яких випадках потрібно вибрати друге?

Вся річ у тому, що віртуальні машини мають великий недолік. Вони, як вигадані світи, де автор вигадував всю історію до дрібниць, від початку до кінця — і цих дрібниць дуже багато. Щоб описати світ повністю, знадобиться багато сотень сторінок. Ви не зможете людині, не знайомій з «Грою престолів», двома словами пояснити, що таке «Нічна варта», або людині, яка ніколи не дивилася «Зоряні війни», чому дев’ятий фільм кіносаги називається «Скайвокер. Схід», та й хто взагалі такий цей (ця?) Скайвокер? Тут знадобляться тривалі пояснення.

Так і з віртуальними машинами: вони в деталях описують весь віртуальний комп’ютер. Якщо на віртуальному комп’ютері на жорсткому диску буде зайнято 100Гб пам’яті, вам знадобиться флешка об’ємом трохи більше 100Гб, щоб записати на неї збережену віртуальну машину і ніяк не менше. Можете уявити, скільки часу піде, щоб переслати ці 100Гб через інтернет. Якщо замислитись, це навіть трохи безглуздо — на свіжо встановленому комп’ютері більшу частину місця займає тека Windows. Якщо ви запустите на цьому комп’ютері три віртуальні машини з такою ж версією Windows, там будуть такі ж папки Windows всередині і кожна з них вимагатиме ще по стільки ж місця. У сумі вчетверо більше місця, ніж потрібно! Хоча, по суті, там лежать однакові файли. Хотілося б навчиться не дублювати багаторазово однакові файли. Ця думка не давала спокою програмістам, саме так і з’явилися контейнери.

Контейнери схожі на інший вид творів — це швидше ранні супергеройські фільми Марвел, де автор не вигадує цілий новий всесвіт, а переносить незвичайних персонажів у наш з вами світ. Тут не потрібно в деталях розписувати все — ми знаємо, як влаштована наша з вами дійсність, треба лише розповісти про відмінності: є плейбой-мільярдер Тоні Старк, ось сердитий і зелений Халк. Далі все зрозуміло: наш вигаданий світ починає працювати як копія реального, але з невеликими змінами.

Важливо, що відмінності лише невеликі. Це наше обмеження. Тут уже не запустиш Windows під MacOS. Проте, якщо ваш контейнер відрізняється лише встановленою програмою, його «вага» лише трохи перевищуватиме «вагу» цієї програми і всі інші корисні властивості віртуальних машин зберігатимуться. Тобто, контейнери — це ті самі віртуальні машини, з яких прибрали все зайве, залишивши лише корисну інформацію. Ми втратили можливість змінювати операційні системи, як рукавички, проте значно скоротили розмір файлу, що дуже важливо для передачі даних через інтернет. Адже в першу чергу нам все це потрібно, щоб швидко надсилати нові оновлення на сервери.

То чим віртуалки відрізняються від контейнерів? Як ви вже зрозуміли, контейнеризація — це та ж віртуалізація, але на рівні однієї обраної операційної системи, змінити її ми вже не можемо. Це значно звузило коло застосування, контейнери вже не такі корисні звичайним користувачам, тестувальникам або сисадмінам, а залишаються популярними серед головним чином розробників. Проте їм працювати з контейнерами набагато зручніше!

Історично склалася аналогія із вантажоперевезеннями морськими контейнерами. Програміст створює нову версію програми, встановлює на свою віртуальну машину-контейнер та зберігає її у файл — ніби завантажує та запечатує «контейнер». Потім він надсилає цей файл на сервер через інтернет — контейнер «пливе» морем до країни призначення. На сервері цю віртуальну машину запускають і отримують оновлену версію сервера зі свіжою програмою — контейнер вивантажується і розгортається, а сам процес називається розгортанням.

Якщо ви не уявляєте собі, як розгортається морський контейнер, ви просто ще не бачили, як контейнер перетворюється на будинок:

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

Якщо у вас 1-2 сервери, то одного Докера вам буде достатньо, тому що вам потрібно працювати з одним, максимум двома контейнерами за раз. Для невеликих стартапів та маленьких компаній цього зазвичай достатньо. Але якщо у вас величезний ентерпрайз-проєкт, з тисячами серверів, контейнери сотнями носяться туди-сюди через інтернет, то вже потрібна програма, яка дозволить працювати одночасно з величезною кількістю контейнерів. Тут уява малює величезний вантажний корабель, який перевозить морем сотні контейнерів, а керує ним безстрашний кермовий, у перекладі давньогрецькою — Kubernetes, чи, як його скорочено називають, K8S.

Отже: для штучної роботи на пару контейнерів достатньо одного Докера, на великий ентерпрайз із сотнями контейнерів потрібен вже Кубернетіс.

Зв’яжіться з нами вже зараз
Замовити консультацію

Docker

Невеликі компанії чи стартами з 1-2 контейнерами

Kubernetes

Великі ентерпрайз-проєкти з сотнями контейнерів

В цілому технологія віртуальних машин і контейнеризації значно спрощує роботу з випуском нових версій програм і особливо актуальна для Інтернету, де нові версії потрібно розсилати по серверах по всій планеті. І нехай основною людиною, яка порається з тонким налаштуванням Докера або Кубернетіса, залишається DevOps — програмістам потрібні хоча б базові знання, щоб просто відправити написаний ними код уже прокладеними девопсом рейками.

FAQ
Що таке контейнер та віртуальна машина?
Віртуальна машина — це «вигаданий» комп’ютер усередині комп’ютера, його програмна імітація. Вона допомагає тестувати нове програмне забезпечення, інструменти, працювати з вірусами без загрози для вашого ПК. Контейнеризація — це та ж віртуалізація, але на рівні однієї обраної операційної системи. Контейнери «важать» не так багато: це прискорює роботу в команді і дозволяє швидко відправляти оновлення на сервер.
У чому різниця між контейнером та віртуальною машиною?
Контейнеризація — це та ж віртуалізація, але на рівні однієї операційної системи. Це значно звузило коло застосування, контейнери вже не такі корисні звичайним користувачам, тестувальникам або сисадмінам, а зберігають попит серед головним чином розробникаів. Їм працювати з контейнерами набагато зручніше через невелику вагу: контейнер зберігає лише ваші зміни, а не всю інформацію про операційну систему.
Що краще: контейнер чи машина?
Зазвичай ці технології не конкурують, а доповнюють одна одну. Їх вибір на 100% залежить від ваших завдань та особливостей проєкту. У сучасній розробці програмного забезпечення частіше використовують контейнеризацію (Docker та/або Kubernetes). Якщо ви займаєтеся створенням IT-інфраструктури, PaaS або мультиплатформним тестуванням, то вам знадобляться рішення на базі віртуальних машин.

Наскільки корисним був цей пост?

Click on a star to rate it!

Середній рейтинг 5 / 5. Кількість голосів: 2

Оцінок поки немає! Будьте першим, хто оцінить цю публікацію.

Поділитися з друзями
Залиште коментар

up