Оглавление

1. Теоретическая часть

1.1 Что такое Docker?

Docker — это платформа с открытым исходным кодом, которая позволяет разработчикам создавать, развертывать, запускать, обновлять и управлять контейнерами — стандартизированными исполняемыми компонентами, объединяющими исходный код приложения с библиотеками операционной системы (ОС) и зависимостями, необходимыми для запуска этого кода в любой среде.

Контейнеры упрощают разработку и доставку распределенных приложений. Они становятся все более популярными по мере того, как организации переходят на облачную разработку и гибридные мультиоблачные среды. Разработчики могут создавать контейнеры без Docker, работая напрямую с возможностями, встроенными в Linux и другие операционные системы. Но Docker делает контейнеризацию быстрее, проще и безопаснее.

Docker также относится к Docker, Inc., компании, которая продает коммерческую версию Docker, а также к проекту Docker с открытым исходным кодом. В этот проект вносят свой вклад Docker, Inc. и многие другие организации и частные лица.

1.2 История создания

1.2.1 Доисторические времена - chroot и jails

Chroot впервые был представлен более 40 лет назад, в 1979 году во время разработки UNIXv7. Его единственным предназначением было изменение родительской корневой системы файлового процесса и его дочерних процессов. В нем не было ни сетевых пространств имен, ни современной изоляции процессов. В 2000 году FreeBSD jail расширили возможности chroot и добавили новые возможности. Jails имели собственные сетевые интерфейсы, со своими ip-адресами и отключенным по умолчанию сырыми сокетами. После этого они стали напоминать виртуальные машины.

Сообщество Linux вскоре подключилось к развитию этой идеи, выпустив Linux-VServer в 2001 году и OpenVZ в 2005 году. Оба они представляли собой нестандартные патчи для ядра Linux, и поэтому их было относительно сложно поддерживать. Они обеспечивали достойную изоляцию сети и процессов, но не были лишены недостатков. Не помогло и то, что хостинг-провайдеры продавали эти контейнеры как легковесные виртуальные машины, что расстраивало пользователей, которым нужны были те же возможности, которые они имели с виртуальными машинами.

1.2.2 Средневековье - cgroups, namespaces and LXC

Пространства имен (namespaces) — функция ядра Linux, которая была разработана в 2002 году в версии ядра 2.4.19, позволяющая изолировать и виртуализировать глобальные системные ресурсы множества процессов. Пространства имен разделяют ресурсы ядра так, что процесс в одном пространстве имен не может видеть ресурсы других пространств имен. Создание почти всех частей ядра Linux с учетом пространства имен все еще является продолжающимся проектом. Наиболее важными из них являются монтирование, идентификатор процесса, доступ к сетям, межпроцессное взаимодействие и пространство имен пользователя.

Контрольные группы (cgroups) — функция ядра Linux, внедренная в 2008 году для изоляции использования ресурсов (загрузка процессора, оперативной памяти, сети и др.) группами процессов. Эта технология притерпела множество изменений за последующие года, но всегда сохраняла свою основную цель — создание стандартизированного подхода к процессу изоляции в ядре Linux. В 2013 году контрольные группы были переработаны с использованием технологии пространства имен.

В 2008 году родился LXC, построенный на контрольных группах и пространствах имен. Это был первый доступный инструмент контейнеризации, работавший с исходным ядром Linux. Однако ранние версии были менее безопасными, чем его предшественники Linux-VServer и OpenVZ. Root в контейнере LXC означал root на хосте. Этого уже не было в LXC 1.0, который сделал важный шаг в обеспечении безопасности контейнеров, представив непривилегированные контейнеры с помощью пользовательских пространств имен.

1.2.3 Наше время - Docker

Docker разработали в 2008 году. Изначально это был внутренний проект компании dotCloud, которую впоследствии была переименована в Docker Inc. В 2013 году dotCloud открыла исходный код Docker для сообщества.

Ранние версии Docker представляли собой усовершенствованную обёртку LXC, а с 2015 года Docker уже использовал собственную библиотеку libcontainer, абстрагирующую виртуализационные возможности ядра Linux. Так он превратился в самостоятельную технологию. Платформа неслучайно переехала на libcontainer: гибкость и управляемость LXC-контейнеров оставляла желать лучшего.

Популярность Docker продолжает расти, потому что его поддерживает большое сообщество.

Untitled