В курс будет входить изучение DevOps-технологий, необходимых для непрерывных сборки и развертывания ПО, таких как Docker, Ansible, Kubernetes и виртуальные машины
DevOps (от англ. Development & Operations) - методология автоматизации технологических процессов сборки, настройки и развертывания программного обеспечения
До выделения DevOps, как отдельной области, разработка и развертывание ПО в каскадной модели разработки проходили в 3 этапа:
Такой цикл работал медленно, так как зачастую разработчики, тестировщики и сисадмины - это разные отделы, работающие по отдельности в разных комнатах и использующие разные среды исполнения, из-за чего результат у разработчиков, тестировщиков и сисадминов отличались
С появлением гибкой модели Agile и необходимость обновлять проект очень часто появилась потребность согласовать процессы разработки (development), тестирования и эксплуатации (operations) ПО
DevOps появился в конце 2000-ых годов как решение проблемы плохого взаимодействия между разработчиками ПО и специалистами по системному администрированию (эксплуатации)
Область DevOps развилась благодаря тому, что специалисты перестали быть изолированными отделами и превратились в единую команду, что стало необходимым из-за перехода к гибкой разработки
Ключевая концепция DevOps заключается в непрерывной интеграции и непрерывной доставке (CI/CD, Continuous Integration и Continuous Delivery/Deployment)
Цикл разработки получается таким:

Роль DevOps-инженера в этом цикле - это строить конвейер автоматизации, управлять инфраструктурой и конфигурациями так, что развертывание происходит эффективно и стабильно
В основе работы с аппаратным обеспечением стоит операционная система. Операционная система, а именно ядро, имеет алгоритмы, которые распределяют ресурсы аппаратного обеспечения разным программам
Подробнее об этом описано в курсе “Операционные системы”
Чтобы абстрагировать среды исполнения от аппаратного обеспечения, используют виртуализацию. Всего можно выделить 3 применяющихся метода:
Виртуализация на уровне приложения
Виртуализация на уровне приложения - технология, которая изолирует приложение от операционной системы, позволяя ему работать в собственной среде. Такая среда является прослойкой между приложением и ОС, изолирующая приложение и перенаправляющая запросы от приложения к ОС
Такой средой исполнения может быть отдельное ПО (например, Microsoft App-V или VMware ThinApp) или виртуальная машина, запускающая байт-код языка программирования (например, Java Virtual Machine)
Виртуализация через гипервизор
Гипервизор - специальное ПО, которое распределяет физические ресурсы между ОС хоста и гостевыми ОС, на которых запущены изолировано друг от друга приложения
Подробнее об этом описано в курсе “Операционные системы”
Контейнеризация
Контейнеризация позволяет использовать один и тот же код ядра, не используя абстракцию в виде гипервизора, что экономит ресурсы процессора и оперативную память. Контейнеры, запускающие среды исполнения и приложения, представляют из себя процессы, которые изолированы между собой с помощью механизмов ядра ОС
Подробнее о механизмах контейнеризации в Linux описано в курсе “Администрирование ОС Linux”
Все эти методы позволяют запускать приложения в разных средах исполнения, но на одном и том же физическом сервере

В больших проектах зачастую используется микросервисная архитектура, из-за чего микросервисы проще хранить в отдельных контейнерах, поэтому контейнеризация получила большее распространение