Укр
Что такое Docker: простыми словами о контейнеризации

Что такое Docker: простыми словами о контейнеризации

  • 23 июня, 2020
  • читать 4 мин
Александр Юшко
Александр Юшко Java Developer в DataArt

Статью я пытался составить для людей, которые впервые читают о том, что такое контейнеризация, потому буду стараться простыми словами описать технические моменты. Кому интересен уровень сложнее, приходите к нам на курс Java EE, обучение проходит онлайн, а курс ведут только практикующие специалисты.

Что такое Docker

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

Теперь простыми словами: это возможность, образно говоря, отделить себе комнату, поклеить там обои, которые вам нравятся, расставить мебель и технику по вкусу, установить замок на двери и ключ выдать только брату. При этом, если вы зайдете в другую комнату, там все будет по-другому и никаких проблем не будет.

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

Разберем проблематику и рассмотрим больше примеров

Сервер — компьютер, с которого вы сейчас читаете данную статью, либо такой, как у вас дома или на работе, только с большей мощностью. На нем установлен Windows, например, а для работы вашей программы необходим Linux. А еще интереснее, когда даже от версии вашей системы или дополнительных программ может зависеть корректность работы. Что тогда делать? Переустанавливать? Покупать другой компьютер?

Контейнеризация — от слова контейнер. Давайте еще приведем пример из жизни, и станет понятнее необходимость применения.

На фото видно, как лайнер везет сотни контейнеров, в которых множество разных грузов. Без помещения груза в отдельные контейнеры, транспортировка была бы невозможной. Мы погрузили груз в контейнеры и уверены, что он будет транспортироваться в целости и сохранности.

Так и в случае с программами, сервер — это наш лайнер, а Docker — это возможность получить такие контейнеры, в которые мы сможем погрузить груз (программы). И при таком использовании будем уверены, что одна программа не поломает другую, в одном контейнере будет Windows, в другом Linux, в третьем — MacOS.

Вот так развитие мощностей серверов и необходимость запускать множество программ с различными настройками одновременно, привело к созданию подобных технологий.

Почему Docker, а не ВМ?

Виртуальная машина (ВМ) — эмулятор аппаратного обеспечения. Простыми словами на своем компьютере с помощью программы вы можете установить себе еще какую-либо ОС (операционную системы), которую сможете запустить параллельно.

Есть определенные отличия между ВМ и контейнеризацией, о которых в данной статье я писать не буду. Но для простоты понимания сказал бы, что технология контейнеризации позволяет запустить очень компактные виртуальные машины (отдельные процессы). Такие контейнеры занимают мало места (образ Ubuntu занимает 68Mb), запускаются очень быстро и настраиваются очень гибко.

Одно из преимуществ технологии Docker — это независимость платформы. То есть вы можете описать запуск программы, работая на Windows, а потом без проблем запустить на MacOS. Это дает возможность очень быстро переносить и настраивать программу на различных серверах.

Рекомендуем курс по теме

Общая схема работы Docker

Для начала необходимо установить Docker на ваш компьютер, чтобы можно было создавать, настраивать и запускать контейнеры. Инструкций по установке на просторах интернета полно, в том числе и на официальном сайте docker.com.

Схема создания контейнера выглядит следующим образом:

Схема создания контейнера
  1. Создаете ‘Dockerfile’ — файл, в котором необходимо описать, как будет создаваться образ. Простыми словами — это описание того, как будет выглядеть ваша комната;
  2. Image — это образ, на основании которого в дальнейшем будет запущен контейнер. Это дизайнерский проект вашей комнаты, четкая схема того, что и где будет стоять;
  3. Container — это запущенный образ, в котором работает ваша программа с описанными зависимостями согласно инструкции. То есть, это уже готовая комната, в которой вы можете жить.

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

Это похоже на то, когда вы знаете, какой ремонт планируете делать и едете в строительный магазин за всем необходимым, а не собираете все по разным магазинам.

Рекомендуем курс по теме

Основные термины

Dockerfile — файл-инструкция по сборке образа. Данные не имеют расширения (наподобие .txt)

Image — образ, который создается на основании Dockerfile. Также образы можно скачивать и запускать с удаленного хранилища. Нет необходимости образ Ubuntu собирать самостоятельно). На основании одного образа можно создать несколько контейнеров.

Container — контейнер, который запускается на основании image (образа). Созданный контейнер можно запускать и останавливать. Параллельно можно запустить несколько контейнеров, независимых и зависимых друг от друга.

Docker Engine — это движок Docker, собственно, это сам докер.

Docker Hub — это как раз то удаленное хранилище, где вы можете загрузить необходимый образ. В это хранилище возможно сохранить свои образы, чтобы в дальнейшем была возможность получить доступ к ним где угодно и поделиться с кем угодно.

Docker-compose — это инструмент, который позволяет запустить несколько контейнеров, связанных между собой. Он может иметь свои настройки и может использовать описанные ранее настройки из Dockerfile. Это вам пригодится при более глубоком изучении данной темы.

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

Данная технология сейчас очень популярна среди компаний и требует базовых знаний и умения работать с ней, потому по возможности постарайтесь использовать Docker в своих проектах даже небольших. Так вы получите первый опыт и сможете применять его там, где необходимо.

Надеюсь, прочитав данную статью, вы получили представление о том, что такое контейнеризация, для чего она нужна и как с ней работать, встретимся на обучении Java онлайн!