Аннотация
Цель этого руководства для начинающих — дать представление о Docker и Docker Compose. Предполагается, что у вас уже установлены docker и docker compose, и вы ищете простое руководство по их использованию. Он также охватывает основные понятия, ключевые термины, историю обоих инструментов и их практическое применение. Кроме того, в нем рассматриваются преимущества и недостатки использования Docker и Docker Compose, а также примеры из реальной жизни. К концу этого руководства читатели получат базовое представление об этих мощных инструментах контейнеризации и их преимуществах.
Оглавление:
1. Резюме
2. Введение
3. Краткая история Docker и Docker Compose
4. Основные термины
5. Docker Hub: официальный реестр
6. Docker и Docker Compose: локальная сборка
7. Плюсы и минусы использования Docker
8. Плюсы и минусы использования Docker Compose
9. Примеры из реальной жизни
10. Заключение
Что такое Docker?
Docker — это платформа с открытым исходным кодом, которая позволяет разработчикам управлять приложениями внутри контейнеров. Контейнеры — это легкие изолированные среды, которые упаковывают приложение с его зависимостями, обеспечивая согласованное и воспроизводимое развертывание в различных вычислительных средах, в которых установлен Docker. Docker позволяет разработчикам эффективно создавать, поставлять и запускать приложения независимо от базовой инфраструктуры.
Что такое Docker Compose?
Docker Compose — это инструмент, который позволяет вам определять и запускать мультиконтейнерные приложения. С помощью Docker Compose вы можете создать файл YAML, определяющий службы, составляющие ваше приложение, а затем использовать одну команду для запуска всех служб. Это упрощает управление сложными приложениями и позволяет делиться конфигурацией приложения с другими.
Docker и Docker Compose: краткая история
Во-первых, история Докера
Первоначально Docker был выпущен в 2013 году Соломоном Хайксом и его командой. Он быстро завоевал популярность благодаря инновационному подходу к контейнеризации. Успех Docker был обусловлен его способностью обеспечивать согласованную среду выполнения в разных системах, упрощая развертывание приложений и уменьшая проблему «это работает на моей машине».
Затем Docker Compose
Docker Compose был представлен в 2014 году как отдельный проект, первоначально называвшийся «фиг», позже ставший официальным инструментом Docker. Он был создан для удовлетворения потребности в управлении сложными приложениями с несколькими взаимосвязанными контейнерами. Docker Compose появился как решение для оркестрации приложений на основе контейнеров, позволяющее разработчикам легко определять свои зависимости и управлять ими.
Ключевые термины Docker
Изображение. Облегченный автономный исполняемый пакет, содержащий все необходимое для запуска приложения, включая код, среду выполнения, библиотеки и системные инструменты.
>Контейнер. Контейнер — это исполняемый экземпляр образа на хост-компьютере. Он изолирован от других контейнеров и хост-компьютера и имеет собственную файловую систему, сеть и пространство процесса.
Dockerfile: Dockerfile — это текстовый файл, содержащий инструкции по созданию образа Docker.
Реестр: централизованный репозиторий, в котором хранятся образы Docker, например Docker Hub или частные реестры.
Docker Hub: Docker Hub — это официальный реестр образов Docker.
Volume: механизм постоянного хранения, позволяющий обмениваться данными. между контейнерами или между контейнером и хост-системой.
Служба ключевых терминов Docker Compose
: определение, описывающее, как запускать конкретный контейнер, включая его образ, конфигурацию, зависимости и сетевые требования.
YAML Ain' Язык разметки (YAML): удобочитаемый формат сериализации данных, используемый Docker Compose для определения структуры и конфигурации приложения. Я кратко рассказал о файлах YAML в своей предыдущей статье Начало работы с GitHub Actions: руководство для начинающих.
Объем: механизм сохранения данных при перезапуске контейнера или между контейнерами.
Сеть: виртуальная сеть, которая позволяет контейнерам в рамках одного проекта Docker Compose взаимодействовать друг с другом.
Центр Docker
Docker Hub — это официальный реестр образов Docker. Он содержит миллионы изображений, в том числе изображения для популярных приложений, таких как Nginx, MySQL и WordPress. Docker Hub упрощает процесс поиска и использования готовых образов, уменьшая потребность в ручном создании и настройке образов. Подробнее о работе с Dockerhub мы поговорим в моей следующей статье. Dockerhub также предоставляет ряд функций для управления вашими образами, например:
1. Поиск образов
2. Управление версиями образов
3. Маркировка изображений
Docker Compose: локальная сборка и использование образов из Dockerhub
- Наш файл Docker
Файл Docker, как определено ранее, представляет собой набор текстовых команд, который содержит инструкции по созданию образа Docker.
На изображении выше мы видим 7 определенных команд, давайте кратко пробежимся по ним.
1. Команда From. Эта строка указывает Docker использовать образ node:18.13.0-alpine в качестве базового образа для производственной среды.
2. Workdir: эта строка указывает Docker установить рабочий каталог в /usr/src/app. Это каталог, в котором будет находиться код вашего приложения после запуска контейнера со встроенным образом.
3. Команда Expose: эта строка сообщает Docker, что в данном случае необходимо открыть предоставленный порт. , порт — 8000. Это порт, который ваше приложение будет прослушивать.
4. Команда Копировать. Эта строка указывает Docker скопировать предоставленные файлы, в данном случае пакет. json в рабочий каталог. Этот файл содержит информацию о зависимостях нашего приложения Nodejs.
5. Команда Выполнить: эта строка сообщает Docker о необходимости запустить указанную команду, в данном случае это команда для запуска «npm install». который устанавливает зависимости приложений.
6. Следующая команда в файле docker — это снова команда Копировать, на этот раз мы говорим докеру скопировать все файлы (за исключением файлов, указанных в .dockerignore файл) из нашего локального каталога в рабочий каталог, т. е. все остальные аспекты файлов наших приложений. команда при запуске контейнера. Это запустит ваше приложение.
2. Локальная сборка образа Docker
Теперь давайте создадим наш образ Docker. Во-первых, позвольте мне показать структуру моего проекта
Мы видим, что Dockerfile выше находится в каталоге «Docker». Теперь в моем терминале (в коде VS) я могу запустить эту команду «docker build . -f ./docker/Dockerfile», который указывает механизму Docker создать образ с использованием файла Docker, указанного с помощью тега -f «/docker/Dockerfile», он должен создать образ Docker для меня локально. Точка (.), указанная после «сборки докера», информирует докер о корневом расположении моего проекта, то есть о том, где находятся мои src и другие файлы приложений. Таким образом, команду можно интерпретировать как «Эй, докер, создай для меня образ, вот мое корневое расположение (.) и файл докера существует здесь (./docker/Dockerfile)».
показан ответ, аналогичный изображенному ниже.
3. Docker запускает контейнер
На изображении выше мы видим «Успешно построено de2a66510226» с идентификатором изображения de2a66510226. Теперь мы можем использовать идентификатор образа для создания контейнера, просто выполнив эту команду «docker run -p 8000:8000 de2a66510226», и теперь наше приложение работает на указанном порту.
Теперь позвольте мне разобрать последнюю команду, которую мы выполнили, т.е. docker run -p 8000:8000 de2a66510226
1. Команда docker run. Эта команда сообщает Docker о необходимости запуска контейнера.
2. Флаг -p: этот флаг сообщает Docker о необходимости открыть порт 8000 для контейнер и сопоставьте его с портом 8000 на хост-компьютере. Это означает, что вы сможете получить доступ к своему приложению на локальном хосте: 8000.
3. Наконец, мы указали идентификатор образа выше, когда создавали образ докера, сообщая докеру использовать этот образ при создании этого контейнера.
4. Локальная сборка Docker Compose из файла docker
Далее мы подошли бы к запуску контейнера, однако на этот раз вместо этого мы будем использовать инструмент компоновки docker. Лично я использую это больше, так как это намного проще.
На изображении выше мы видим 8 основных ключей YAML, давайте кратко пробежимся по ним.
Во-первых, предоставляется версия docker compose со значением 3, а затем определяется служба под названием «web», которая содержит команды для создания контейнера
1. имя_контейнера: имя контейнера, который будет создан для этого сервиса. Это имя должно быть уникальным в среде Docker.
2. stdin_open: это логическое значение, указывающее, должен ли быть открыт стандартный ввод контейнера. Это позволяет вам взаимодействовать с контейнер с помощью стандартного ввода, например, запуская команды или отправляя данные. Значение по умолчанию для этого свойства — false.
3. tty: это логическое значение, указывающее, должен ли контейнер иметь присоединенный псевдотерминал. Если для этого свойства установлено значение true, то к контейнеру будет прикреплен псевдотерминал. Это позволяет вам взаимодействовать с контейнером с помощью эмулятора терминала. Значение по умолчанию для этого свойства — false.
4. build: конфигурация сборки для контейнера. Это включает в себя контекст и Dockerfile, которые будут использоваться для создания образа. context — это каталог, содержащий файлы, которые будут использоваться для создания образа. Dockerfile — это файл, содержащий инструкции по созданию образа.
5. ports: список портов, которые будут доступны контейнеру. В этом случае контейнер будет предоставлять порт 8000 на хост-компьютере.
Плюсы и минусы использования Docker
Во-первых, плюсы
Docker может помочь вам:
1. Переносимость: Docker позволяет упаковать ваше приложение и его зависимости в контейнер, что делает его легко переносимым. Контейнеры можно запускать на любой машине, на которой установлен Docker, независимо от базовой операционной системы.
2. Масштабируемость. Docker предоставляет легкий и эффективный способ масштабирования вашего приложения. С помощью Docker вы можете легко развернуть несколько контейнеров, чтобы справляться с возросшей рабочей нагрузкой, или реплицировать свое приложение на нескольких серверах.
3. Изоляция. Каждый контейнер Docker работает изолированно, обеспечивая безопасную и воспроизводимую среду. для вашего приложения. Контейнеры имеют свои собственные файловые системы, сеть и распределение ресурсов, что гарантирует, что изменения или проблемы в одном контейнере не повлияют на другие.
Теперь минусы:
1. Кривая обучения: Docker требует обучения, особенно для тех, кто плохо знаком с контейнеризацией. Понимание таких понятий, как образы, контейнеры и оркестровка контейнеров, может занять некоторое время и усилия.
2. Сохраняемость. По умолчанию контейнеры Docker являются эфемерными, то есть любые изменения, сделанные в контейнере, теряются после остановки или удаления контейнера. Сохранение данных и управление приложениями с отслеживанием состояния требуют дополнительной настройки.
3. Размер образа. Образы Docker могут быть большими, особенно если они содержат полную операционную систему. Это может привести к повышенным требованиям к хранилищу и увеличению времени извлечения образа, особенно в средах с ограниченной пропускной способностью.
Плюсы и минусы использования Docker Compose
Как всегда плюсы на первом месте
1. Простая организация работы с несколькими контейнерами. Docker Compose упрощает управление приложениями с несколькими контейнерами, позволяя определять все связанные службы и управлять ими в одном файле конфигурации. Он обеспечивает декларативный подход к управлению сложными средами.
2. Управление зависимостями служб. Docker Compose позволяет определять зависимости между службами, обеспечивая запуск и остановку зависимых служб в правильном порядке. Это упрощает работу со сложными настройками приложений.
3. Воспроизводимые среды: с помощью Docker Compose вы можете определить точную конфигурацию и настройку среды вашего приложения, включая сети, тома и переменные среды. Это упрощает воссоздание одной и той же среды на разных машинах или в разных средах.
Дальше минусы,
1. Ограниченная масштабируемость. Хотя Docker Compose отлично подходит для управления приложениями малого и среднего размера, он может быть не идеальным выбором для хорошо масштабируемых и распределенных систем. В таких случаях часто предпочитают более продвинутые инструменты оркестрации контейнеров, такие как Kubernetes, Docker Swarm.
2. Кривая обучения. Как и Docker, Docker Compose имеет собственную кривую обучения, особенно для тех, кто плохо знаком с оркестровкой контейнеров. Понимание синтаксиса YAML и различных параметров конфигурации может занять некоторое время.
3. Отсутствие расширенных функций. Docker Compose предоставляет базовые функции оркестрации, но может не иметь некоторых дополнительных возможностей, необходимых для сложных производственных настроек. Для расширенных функций, таких как автоматическое масштабирование, балансировка нагрузки и последовательные обновления, рекомендуется более надежный инструмент оркестровки, такой как Kubernetes.
Реальные примеры
Реальные примеры компаний из тысяч, использующих docker (и, возможно, docker compose), включают следующее:
1. Netflix
2. Airbnb
3. CircleCI
Заключение
Docker и Docker Compose произвели революцию в способах развертывания, управления и масштабирования приложений. С помощью изолированных контейнеров и мощных инструментов оркестровки разработчики могут создавать переносимые, масштабируемые и воспроизводимые среды приложений. Требуется время для обучения и ресурсы для рассмотрения, но преимущества Docker и Docker Compose делают их важными инструментами для современной разработки программного обеспечения. Однако при принятии решения о том, какой инструмент использовать, важно учитывать конкретные потребности и сложность вашего приложения.
Ссылки
1. Документация по Docker
2. Документация по Docker Compose
3. Docker Hub