Концепции Docker

Docker - это платформа для разработчиков и системных администраторов для разработки, развертывания и запуска приложений с контейнерами. Использование контейнеров Linux для развертывания приложений называется контейнеризацией. Контейнеры не новы, но новое здесь - это их использование для легкого развертывания приложений.

Контейнеризация становится все более популярной, потому что контейнеры:

  • Гибкие: даже самые сложные приложения могут быть упакованы в контейнеры.
  • Легкие: контейнеры используют и разделяют ядро хоста.
  • Взаимозаменяемые: вы можете развертывать обновления и выполнять обновления на лету.
  • Переносимые: вы можете создавать локально, развертывать в облаке и работать где угодно.
  • Масштабируемые: Вы можете увеличивать и автоматически распределять реплики контейнера.
  • Складываемые в стеки: вы можете размещать сервисы вертикально и на лету.

Образы и контейнеры

Контейнер запускается путем запуска образа (image). Образ - это исполняемый пакет, который включает в себя все необходимое для запуска приложения - код, среду выполнения, библиотеки, переменные среды и файлы конфигурации.

Контейнер - это экземпляр образа во время выполнения (runtime instance), то, чем образ становится в памяти при выполнении (то есть образ с состоянием или пользовательский процесс). Вы можете увидеть список запущенных контейнеров с помощью команды docker ps, похоже на команду ps для просмотра процессов в Linux.

Контейнеры и виртуальные машины

Контейнер изначально работает в Linux и разделяет ядро хост-машины с другими контейнерами. Он запускает отдельный процесс, занимая не больше памяти, чем любой другой исполняемый файл, что делает его легким.

Противоположно ведут себя виртуальные машины (VM), где работает полнофункциональная "гостевая" операционная система с виртуальным доступом к ресурсам хоста через гипервизор (hypervisor). Как правило, виртуальные машины предоставляют среде больше ресурсов, чем требуется большинству приложений.

Контейнеризация делает CI/CD бесшовным. Например:

  • приложения не имеют системных зависимостей
  • обновления могут быть отправлены в любую часть распределенного приложения
  • плотность ресурсов может быть оптимизирована

С Docker масштабирование вашего приложения - это вопрос запуска новых исполняемых файлов, а не запуска тяжелых виртуальных хостов.

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных