Оглавление
- Введение
- Актуальность и глубина информации. Онлайн-документация
- Аудитория книги
- Программирование и архитектура. Концепция Cloud Native
- Русскоязычные термины
- Пользовательские интерфейсы
- Примеры и их тестирование на GitHub
- Выбор Go и Java
- Сторонние библиотеки и инструменты
- Основные провайдеры облачных услуг – Amazon, Google, Microsoft
- Дополнительные форматы книги на ipsoftware.ru
- Открытый текст. Благодарности
- 1. Приложения, созданные для облака – концепция Cloud Native
- Основные положения концепции Cloud Native
- Микросервисы – быстрый цикл разработки и постоянный выпуск
- Контейнеры – изоляция и гарантия неизменяемости версий
- Облако – неизменная эластичная инфраструктура. «Феникс» вместо «снежинки»
- Оркестровка Kubernetes – декларативное описание состояния
- Инструменты для сбора журналов и наблюдения
- Разработка на практике – 12 факторов облачного приложения
- Резюме
- 2. Микросервисы
- Монолиты
- Архитектура на основе сервисов (SOA)
- Микросервисы по Мартину Фаулеру
- Разбиение системы на микросервисы
- Обратная сторона медали
- Резюме
- 3. Контейнеры и Docker
- Контейнеры – это Linux
- Конец ознакомительного фрагмента
- Главная
- Иван Портянкин
- 📚 Книги
- Программирование Cloud Native. Микросервисы, Docker и Kubernetes
- Читать фрагмент
- Контейнеры – изоляция и гарантия неизменяемости версийКонтейнеры – изоляция и гарантия неизменяемости версий
Контейнеры – изоляция и гарантия неизменяемости версий
Мы только что увидели, как много потенциальных преимуществ может принести с собой разбиение приложения на независимые компоненты, или микросервисы. Особенно они важны для программистов, получающих намного больше свободы в своих экспериментах и выборе технологии. Однако запуск таких компонентов должен быть быстрым, а взаимодействующие технологии должны уживаться на одних и тех же серверах (в пределах кластера) без конфликтов и сложных конфигураций.
Решить эту задачу можно виртуальными машинами, запуская на них микросервисы. Однако виртуальная машина требует установки и запуска отдельной, самостоятельной операционной системы, и время ее запуска делает быстрое масштабирование и перезапуск компонентов практически невозможным. Как мы уже поняли, эту задачу берут на себя контейнеры с их легкой виртуализацией с помощью возможностей Linux (при необходимости можно запускать контейнеры и на других операционных системах). Время запуска контейнера практически неотличимо от обычного процесса Linux, а изоляция приложений, их файловых систем, и ограничение их ресурсов мало чем отличается от полноценной виртуальной машины.
Все содержимое (файлы и зависимости приложения или его части), необходимое для запуска контейнеров, упаковывается в образы (image). Важным свойством образа является его неизменность (immutability), для каждой отдельной метки, или версии, этого образа. Поменять помеченный определенным способом образ с известной контрольной суммой уже невозможно. С практической точки зрения это означает, что созданная когда-то система, настроенная и работающая с определенным набором микросервисов, упакованных в образы для запуска в виде контейнеров, теперь всегда может быть заново воспроизведена в любой необходимый момент. Это важное качество воспроизводимости (reproducibility) гарантирует уверенность в текущем состоянии сложной, составной системы. Мы можем быть уверены в том, что работающая система не была запущена давно потерянным и никому больше не известным набором эзотерических скриптов.
В главе про контейнеры мы подробнее узнаем историю виртуальных машин и контейнеров, чуть подробнее взглянем на механизмы их работы, и на основной инструмент разработчика для работы с контейнерами – Docker.