автордың кітабын онлайн тегін оқу Виртуализация и контейнеризация
Валентин Юльевич Арьков
Виртуализация и контейнеризация
Учебное пособие
Шрифты предоставлены компанией «ПараТайп»
© Валентин Юльевич Арьков, 2022
Виртуальные машины и контейнеры — это современные технологии изоляции, которые решают проблемы совместимости, зависимости и развёртывания приложений. В учебном пособии рассматриваются примеры программных гипервизоров VirtualBox и Hyper-V, механизм песочницы Windows, а также Windows Subsystem for Linux и контейнеры Docker. Знакомство с целым спектром инструментов позволяет получить целостное представление об этом важном направлении информационных технологий.
ISBN 978-5-0059-3281-5
Создано в интеллектуальной издательской системе Ridero
Оглавление
Предисловие
Всё, что мы обсуждаем в данном пособии, Вам предстоит сделать в рамках лабораторной работы. Вам нужно научиться это делать. Вы потренируетесь и должны быть готовы выполнить любое действие с пониманием. Работаем — желательно — дома, не спеша, разобравшись, натренировавшись.
Напомним, что в учебном плане предусмотрено много часов для самостоятельной работы студентов (СРС). В рамках СРС вам предлагается самостоятельно освоить материал лабораторных работ. Тогда на занятиях с преподавателем у вас будет время продемонстрировать свои познания и умения — каждому студенту индивидуально.
Операционная система — это инструмент, это вещь для работы, для использования. Это кнопки, которые каждый должен уметь нажимать. Вот это от вас требуется, и этим наш предмет отличается от всех остальных.
Введение
В данном пособии мы разберём тему, которая стала модной в последние лет пять. Всё начиналось с виртуальных машин. То, что мы имеем сегодня, называется словом «контейнеры». Это развитие идеи виртуальных машин.
Нас будут интересовать четыре технологии в области виртуализации и контейнеризации:
— Hyper-V;
— Sandbox;
— WSL
— Docker.
В качестве заданий мы предлагаем просмотреть некоторые статьи в интернете и выполнить простые упражнения на компьютере.
Статьи в Википедии часто доступны и на русском, и на английском языках. Но они не обязательно в точности соответствуют друг другу.
Если статья написана на английском, а читать такой текст тяжеловато, можно использовать машинный перевод. В нашем распоряжении как минимум два варианта.
Вариант первый. В интернете есть готовые бесплатные сервисы по переводу веб-страниц: Яндекс, Гугл и прочие.
А вот и первое задание. Просмотрите в Википедии статью под названием «Ложные друзья переводчика». Выясните, в чем заключается проблема перевода, если английское слово звучит очень похоже на русское.
Переключитесь на английский вариант этой статьи и просмотрите автоматический перевод сайта на сервисах Яндекс и Google:
Яндекс — Переводчик — Перевод сайтов — Введите адрес сайта
Google — Переводчик — Сайты — Сайт
Вариант второй. Некоторые браузеры уже интегрировали сервис автоматического перевода. Здесь достаточно попросить перевести страницу или же отказаться от перевода и просмотреть оригинал страницы. Яндекс Браузер и Google Chrome могут нам помочь именно таким образом.
В дальнейшем, когда мы предлагаем читателю «просмотреть» статью, требуется получить самое общее представление о выбранной теме. Нужно извлечь из длинного текста только основную идею. Технические подробности мы обсуждаем при выполнении практических заданий.
Традиционное выполнение программы
Как происходит выполнение программ на компьютере?
Чаще всего, в обычной жизни рядовой пользователь запускает программу на своём персональном компьютере. Это может быть настольный (Desktop) компьютер, или ноутбук (Notebook), или какое-нибудь мобильное устройство (Mobile Device).
ПОЛЬЗОВАТЕЛЬ (user) — по определению — если понимать это название буквально — ПОЛЬЗУЕТСЯ компьютером, использует (use) его. Чтобы получить «пользу» для себя. То есть занимается своим делом, своей работой или своими развлечениями.
А для работы ему нужна ПРИКЛАДНАЯ программа — Application Software. Или короче — Application. То есть «приложение». Или совсем коротко — просто App. Опять же «приложение».
Но программу не удаётся просто так взять и запустить на «голом железе», на оборудовании компьютера — Hardware. Вначале нужно загрузить операционную систему (ОС) — Operating System (OS).
Так и получается схема из трёх уровней: Оборудование — Операционная система — Прикладная программа, см. рис.
Итак, обычно программа выполняется с помощью операционной системы. Чтобы запустить прикладную программу, нужно включить компьютер и дождаться, пока загрузится операционная система.
Внизу у нас имеется то, что называется «железо» или hardware. Выше находится операционная система.
Но есть ситуации, когда операционная система входит в состав прикладной программы. Это может быть в простых встраиваемых системах. Что такое «встраиваемая»? Это означает, что процессор установлен внутри какого-то устройства. Это может быть микроволновка, холодильник или что-нибудь ещё со словами «умный» или «смарт». Если в этом устройстве хватает памяти, то запускается операционная система. Если это маленькое устройство, то там всё реализовано в одной программе — и функции операционной системы, и функции прикладной программы.
Итак, обычная схема «железо — ОС — приложение» хорошо работает для небольших задач.
Изоляция приложений
Описанная вше «традиционная» схема хорошо работала и пока ещё работает, если у нас всего одна программа. Или всего несколько программ. И если эти программы не мешают друг другу.
Со временем выяснилось, что разработчики регулярно выпускают новые версии прикладных программ. При этом пользователи не просто привыкают к «своей» версии. Они нарабатывают множество файлов определённого формата. А потом в новой версии эти форматы немного меняются, потом ещё немного, потом меняются до неузнаваемости.
А на предприятии уже всё было отлажено, и всё работало. И любые изменения в работающей системе приводят к неприятностям. Поэтому, например, до сих на промышленных предприятиях есть системы управления производством на Windows XP (это реальный пример!). И на эту ОС даже не ставят обновления и исправления. Иначе конвейер или реактор просто перестанет работать.
Студентам интересно работать с «новой» версией, быть в курсе, быть в тренде. А для предприятия важно, чтобы производство шло без остановок и без перебоев.
Можно, конечно попытаться установить на один компьютер несколько версий одной программы. Чаще всего, это вообще невозможно — они будут «затирать» друг друга. Или, по крайней мере, одна версия будет мешать нормальной работе остальных.
Есть ещё и проблемы совместимости разных программ — ведь создают разные команды, разные фирмы-разработчики.
А ещё есть вопросы защиты и безопасности. Защита остальных приложений и самой операционной системы от запущенной программы. Не говоря уже про защиту компьютера от вредоносного программного обеспечения (ПО).
Все эти проблемы приходится как-то решать. И общий подход здесь называется «Изоляция приложений». Одно приложение работает, но оно изолировано от всего остального мира. Это похоже на изоляцию пациента от всего остального мира, если есть подозрение на какую-нибудь опасную, заразную болезнь. Или же это как изоляция преступника от остального общества, чтобы он не мог наносить вред окружающим.
Задание. Просмотрите статью «Application Isolation»:
https://devopsbootcamp.osuosl.org/application-isolation.html
Выясните, что такое изоляция и как это делается. При необходимости используйте машинный перевод веб-страницы.
Итак, на больших предприятиях появляются новые проблемы. Приходится держать несколько больших компьютеров для выполнения разных задач. Один сервер обслуживает электронную почту — это одна машина. Веб-сервер — это другая машина. Нужен какой-нибудь сервер для хранения файлов — это ещё одна машина. Для базы данных — ещё одна машина. И вот набирается несколько десятков отдельных компьютеров. Каждый для своей задачи.
Если нужно что-то обновить, возникает масса проблем. Чтобы увеличить оперативную память, нужно выключить машину, добавить память, включить, загрузить и так далее. В некоторых случаях вообще приходится полностью заменять «железо», если оно уже не справляется с новыми задачами и объёмами информации. Это традиционный подход.
Что ещё здесь интересного? Разные версии программ в рамках одного компьютера очень плохо ведут себя, если пытаться одновременно их держать на одной машине. Некоторые программы друг с другом плохо совместимы. Так появляется первый шаг: каким-то образом изолировать программы друг от друга. Эта проблема встала, как только на одном компьютере установили больше, чем одну программу.
Естественно, есть некоторые программы, которые называют «вредоносными». Программы пишут с разными целями. Хорошо бы, чтобы они не мешали всем остальным, и уж тем более не мешали работе операционной системы.
Динамические библиотеки
Программисты очень быстро обнаружили, что какие-то действия — и соответственно, какие-то части текста программы (его ещё называют словом «исходный код») используются много раз в разных программах. Одно и то же действие — одна и та же программа. Это вроде бы даже очевидно. Поэтому они почти сразу же придумали такое решение: то, что повторяется, вынести в отдельные «библиотеки». Это коллекция повторяющихся действий, часто используемых функций.
Примером таких библиотек является технология DLL. Это внешние файлы, из которых любая программа может вызвать нужную функцию. На первый взгляд, решение хорошее, удобное. Потом начали накапливаться неприятности — буквально как снежный ком.
Выясните, в чем состоит идея DLL, какие у этой технологии есть достоинства и недостатки, и что такое «зависимости».
Итак, существует такая технология как DLL — динамически подключаемая или динамически связываемая библиотека. Изначально технология была задумана, чтобы облегчить работу. Но потом оказалось, что все эти библиотеки складываются в одном большом каталоге, и там их несколько может набираться десятков тысяч. Они могут мешать друг другу. Всё это явление природы называется «DLL hell». Английское слово «hell» буквально означает «ад». Эта адская «свалка» файлов — огромная куча файлов, в которых разобраться очень сложно. К тому же они ещё и норовят друг друга перезаписать при установке новой версии программы. Плюс к этому есть такая вещь как «dependency», то есть «зависимость»: для работы одной программы может потребоваться установка дополнительных библиотек, дополнительных файлов или вообще дополнительных программных продуктов. И это тоже разрастается как снежный ком. Эта ситуация называется «dependency hell» — тоже в рамках одного компьютера.
Задание. Просмотрите в Википедии следующие статьи:
— Динамически подключаемая библиотека
— Dynamic-link library
— DLL Hell
— Dependency hell
Изоляция и администрирование
Существуют разные способы изоляции программ друг от друга. Один из таких способов называется «jail» — буквально переводится как «тюрьма». То есть программа буквально помещается в «тюремную камеру», откуда она не может вырваться, и не может никому помешать, и не может ни с кем общаться — буквально как преступник, заключённый в тюрьме.
Естественно, находятся любители взламывать системы. Эта технология называется «джейл брейк», то есть «побег из тюрьмы». Особенно это популярно для продукции компании Apple, потому что мобильное устройство Apple построено на основе операционной системы Unix. Здесь используют принципы «юникса», и в этом случае права пользователя очень сильно ограничены. И к тому же каждая прикладная программа (приложение, application) полностью отрезано от всех остальных. Для того, чтобы из одной программы передать данные в другую приходится использовать «обходные манёвры» — что-то типа экспорта и импорта.
Более того, мы фактически не можем обратиться к файловой системе iPhone напрямую. В лучшем случае, у нас есть фрагмент файлового дерева, доступный для пользователя. Причём для каждой прикладной программы –свой кусочек дерева, и эти части файловой системы могут и не пересекаться. Большие любители программирования придумали, как взламывать эту защиту и получать права доступа администратора к продукции компании Apple. Технология взлома защиты называется «джейлбрейк». После взлома можно записывать всё, что угодно и куда угодно. Можно устанавливать любые программы. Естественно, это кончается установкой пиратских, взломанных программ из пиратского же магазина приложений. Теперь уже ни о какой безопасности речи не идет. Мы устанавливаем неизвестно что и неизвестно откуда, к тому же с полными правами доступа. Тем не менее, такая технология есть.
Здесь упоминается системный администратор. Он может называться «root», то есть «корень». Может называться «superuser» — «супер-юзер» — «супер-пользователь». Может называться «админ». В юниксе может встретиться su — сокращение от «супер-юзер».
Как мы уже говорили, изоляция приложений больше всего похожа на изоляцию заразного пациента или опасного преступника от общества. Поэтому и название программисты использовали готовое: «jail», то есть «тюрьма». Ситуация, когда программа может вырваться из этой «тюрьмы», тоже получила соответствующее готовое название. С общими подходами и общепринятыми названиями вам предстоит ознакомиться самостоятельно.
Задание. Просмотрите в Википедии следующие статьи:
— chroot
— FreeBSD jail
— Privilege_escalation#Jailbreaking
— iOS jailbreaking
— Rooting (Android)
— Superuser — root, admin
— su (Unix)
— sudo
В этих статьях встречаются разные названия для одного и того же человека — администратор, админ, суперпользователь, admin, superuser, roor. Это пользователь, имеющий полные права доступа к вычислительной системе. В некоторых упражнениях нам потребуются именно такие права.
Portable Applications
Один из популярных подходов к «изоляции» приложений — это так называемые «переносимые приложения» — Portable Applications. Здесь «переносимость» означает, что программы не нужно устанавливать, а достаточно просто скопировать файлы. Обычно это выглядит так: скачиваем в интернете архив и затем распаковываем его в любом каталоге. Запускаем программу из этого каталога — и всё работает!
С этим подходом к изоляции приложений мы постепенно знакомимся в рамках лабораторных работ. Это так называемые «переносимые» приложения или Portable Apps — Portable applications.
В простейшем, бытовом понимании «переносимость приложения» означает, что программу можно просто скопировать: взять одну папку, скопировать на другой диск, или на флешку, или на другой компьютер. Можно скачать архив и развернуть в любом каталоге — и оттуда начинать работать. Работа без установки — это главный фокус переносимых приложений — Portable Applications. Мы скачиваем, разворачиваем, запускаем. Если программа нам надоела, мы её стираем — и никаких следов в самой операционной системе. При этом все файлы лежат в одном каталоге, и они никак не пересекаются с файлами, которые лежат в другом каталоге. Нет общих папок между этими переносимыми приложениями. Так организована изоляция приложений — как разграничения на уровне файловой системы.
Переносимые приложения не участвуют в «свалке DLL», которая обычно находится в каталоге C:\Windows\System32. Здесь всё сложено в одной папочке и
На второй лабораторной работе мы используем Portable версию для файлового менеджера FAR Manager:
FAR Manager Portable:
https://www.farmanager.com/download.php
Предлагаем самостоятельно посмотреть Portable версию для Libre Office:
LibreOffice Portable
https://www.libreoffice.org/download/portable-versions/
Есть целый сайт под названием Portable Apps. Здесь имеется целый комплект самых разных программ, см. рис.
Главная хитрость в том, что не всегда это слово Portable появляется на сайтах. Например, если мы заходим на сайт FAR Manager, у нас есть несколько вариантов скачивания. Здесь есть «архив» и MSI. Слово «Архив» подразумевает, что всё упаковано в одном файле. Это и есть Portable приложение. Мы разворачиваем этот архив в отдельный каталог, откуда оно и запускается без установки. Если говорить про MSI, это Microsoft Installer, то есть установочная версия.
Итак, Portable — это одна из попыток разделить зоны влияния и изолировать программы друг от друга.
Задание. Просмотрите в Википедии следующие статьи:
— Переносимое приложение
— Portable application
— Software portability
Виртуальные машины
Виртуализация. Гипервизор — Hypervisor
Следующим шагом было полностью изолировать целые операционные системы со всем комплектом программ. Это называется «виртуальные машины». С ними мы знакомимся в рамках 4, 5 и 6 лабораторных работ, когда запускаем Linux внутри операционной системы Windows. Если у кого-то есть Макинтош, здесь тоже можно в рамках виртуальной машины «покрутить» что-нибудь другое — Windows, или Linux, или Unix.
Здесь внизу имеется «железо». Дальше работает основная операционная система или Host OS. Английское слово «хост» означает «гостеприимный хозяин», то есть «тот, кто принимает гостей». Следующий вспомогательный слой называется «гипервизор» или «менеджер виртуальных машин». На наших лабораторных работах это программа VirtualBox. С помощью этого гипервизора мы запускаем другую операционную систему. Она будет называться гостевая ОС — Guest OS. Мы в отдельном окне получаем другую операционную систему. В неё мы можем установить всё, что хотим. Эта система может работать сама по себе, независимо от основной ОС. Можно развернуть несколько виртуальных машин на одном физическом «железе». Каждая виртуальная машина «живёт» сама по себе, и она не мешает никому. Так что в рамках виртуальной машины мы имеем гостевую операционную систему и любые прикладные программы — какие захотим установить.
