Докер (5 части серии)
Следуй за мной на Twitter , рад принять ваши предложения по темам или улучшениям/Крису
Эта статья является частью серии:
- Докер — с самого начала, часть Я Этот охватывает: почему докер, как он работает и охватывает основные концепции, такие как изображения, контейнеры и использование докерафила. Он также вводит некоторые основные команды Docker о том, как управлять вышеуказанными концепциями.
- Докер — с самого начала, часть II Речь идет о том, что узнать о объемах, то, что они есть, как они могут работать для вас и в первую очередь, как они создадут удивительную среду развития
- Докер — с самого начала, часть III Эта часть состоит в том, чтобы понять, как работать с базами данных в контейнерной среде и при этом мы должны узнать о связывании и сетях
- Докер — с самого начала, часть IV, мы здесь
- Докер — с самого начала, часть v Эта часть — это вторая и заключая часть на Docker Compose, где мы покрываем тома, переменные среды и работа с базами данных и сетью
Эта часть заключается в том, чтобы иметь дело с более чем двумя контейнерами докеров. Вы придете к точке в конце концов, когда у вас есть так много контейнеров, чтобы управлять тем, что чувствует себя неуправляемым. Вы можете продолжать печатать только Pocker Run к определенной точке, как только вы начните вращать несколько контейнеров, он просто вредит голову и пальцы. Чтобы решить это, у нас есть Docker Compose.
TLDR; Docker Compose — это огромная тема, по этой причине эта статья разделена на две части. В этой части мы опишем, почему Docker составляют и показывают, когда он сияет. Во второй части на Docker Compose мы охватим более продвинутые темы, такие как переменные среды, тома и базы данных.
В этой части мы охватим:
- Почему докер составлял , важно понимать, по крайней мере, на высоком уровне, что существует два основных архитектуры монолит и микросервисов, и что Docker Compose действительно помогает с управлением последним
- Особенности , мы объясним, какую функцию Docker Compose поддерживает поддержку, поэтому мы придем понять, почему это такая хорошая подходит для нашей выбранной архитектуры микросервиса
- Когда докер не достаточно , мы объясним, в какой момент, используя команды Docker, становится утомительным и болезненным, а при использовании Docker Compose начинает выглядеть все больше и больше заманчиво
- В действии Наконец, мы построим файл Docker-Compose.yaml с нуля и научитесь управлять нашими контейнерами, используя Docker Compose и некоторые основные команды
Ресурсы
Использование Docker и Containeruration — это о разрыве монолита в микросервисам. На протяжении этой серии мы научимся освоить Docker и все его команды. Рано или поздно вы захотите забрать свои контейнеры в производственную среду. Эта среда обычно облака. Когда вы чувствуете, что у вас есть достаточно опыта Docker, посмотрите на эти ссылки, чтобы увидеть, как Docker можно использовать в облаке:
- Контейнеры в облаке Отличная страница обзора, которая показывает, что еще есть, нужно знать о контейнерах в облаке
- Развертывание ваших контейнеров в облаке Учебное пособие, которое показывает, насколько легко использовать существующие навыки Docker и получите свои услуги в облаке
- Создание реестра контейнера Ваши изображения Docker могут быть в Docker Hub, но и в реестре контейнера в облаке. Разве не было бы здорово сохранить ваши изображения где-то и на самом деле иметь возможность создавать услугу от этого реестра в считанные минуты?
Почему докер составлял
Docker Compose предназначен для использования, когда нам нужно управлять многими услугами самостоятельно. То, что мы описываем, это что называется архитектурой микросервиса.
Архитектура микросервиса
Давайте определим некоторые свойства на такой архитектуре:
- Свободно связан Это означает, что они не зависят от другой службы для функционирования, все данные, которые им нужны, просто там. Они могут взаимодействовать с другими услугами, хотя Но это позвонив их внешнему API, например, вызов HTTP
- Независимо развернут Это означает, что мы можем начать, остановить и восстановить их, не затрагивая другие услуги напрямую.
- Высокогодные и тестируемые , услуги невелики, и поэтому стоит меньше понимать и потому, что нет тестирования зависимостей становится проще
- Организовано вокруг бизнес-возможностей Это означает, что мы должны попытаться найти разные темы, такие как бронирование, управление продуктами, выставление счетов и так на
Может быть, мы должны начать с вопроса того, почему мы хотим эту архитектуру? По словам, перечисленным выше свойств, которые он предлагает много гибкости, у него меньше нет зависимостей и так далее. Это звучит как все хорошие вещи, так что в том, что новая архитектура должна иметь все приложения?
Как всегда это зависит. Существуют некоторые критерии, где микросервисы будут сиять в отличие от монолитной архитектуры, такой как:
- Различные технологии стеки/развивающиеся техники У нас есть много команд разработчиков, и все они хотят использовать свой собственный технологический стек или хотите попробовать новую технологию без необходимости менять все приложение. Пусть каждая команда построит собственную услугу в выбранной вами технологии как часть архитектуры микросервиса.
- Повторно использовать , Вы действительно хотите построить определенные возможности один раз, например, например, счесть, если это разбито в отдельном сервисе, это облегчает повторное использование для других приложений. Ох и в архитектуре микросервисов вы могли бы легко комбинировать разные услуги и создать много приложений из него
- Минимальное воздействие сбой С Когда в монолитной архитектуре есть неудача, она может снизить все приложение, с микросервисами вы сможете лучше защитить себя от неудачи
На том, почему микро-сервисы по поводу того, почему Micro Services по монолитной архитектуре. Заинтересованное читатель призван посмотреть на следующие ссылка Отказ
Чехол для составляющих докеров
Описание архитектуры микросервиса сообщает нам, что нам нужна куча услуг, организованных вокруг бизнес-возможностей. Кроме того, они должны быть независимо развертываемыми, и нам нужно иметь возможность использовать различные технологии и многое другое. На мой взгляд, это звуки, как Docker, вообще бы отлично подходит. Причина, по которой мы делаем случай для Docker Compose над Docker, это просто чистый размер этого. Если у нас есть более двух контейнеров, сумма команд, которые нам нужны, внезапно выращивают линейный путь. Давайте объясним в следующем разделе, что особенности Docker составляют, что делает его масштабированием, когда количество услуг увеличивается.
Docker Compose Heals Обзор
Теперь Docker Stompose позволяет нам очень хорошо масштабировать в том смысле, что мы можем легко построить несколько изображений одновременно, начать несколько контейнеров и многое другое. Полный список функций выглядит следующим образом:
- Удается весь жизненный цикл приложения.
- Начать , остановка и восстановление услуг
- Вид Статус запущенных услуг
- Поток Вывод журнала работает
- Беги команда разоблачения на сервисе
Как мы видим, это заботится обо всем, что мы могли бы понадобиться, когда нам нужно управлять архитектурой микросервиса, состоящей из многих услуг.
Когда просто докер недостаточно
Давайте повторимся на том, как Docker работает, и какие команды нам нужны и давайте посмотрим, где это требует нас, когда мы добавим услугу или два.
Чтобы что-то притеснить, мы знаем, что нам нужно:
- Определите Dockerfile Что содержит то, какое изображение ОС нам нужно, какие библиотеки нам нужно установить, переменные Env, нам нужно установить, порты, которые нуждаются в открытии и, наконец, как — начать наш сервис
- построить изображение или вытащите существующее изображение из Docker Hub
- Создать и запустить контейнер
Теперь, используя Docker Compose, нам все еще нужно делать часть с DockerFile, но Docker Compose позаботится о создании изображений и управлять контейнерами. Давайте проиллюстрируем, как могут выглядеть команды с простой докером:
Docker Build -t некоторое изображение.
С последующим
Docker Run -D -P 8000: 3000 — имейте некоторое-контейнерное имя Некоторые изображения
Теперь это не ужасная сумма для записи, но представьте, что у вас есть три разных сервиса, которые вам нужно сделать, то он вдруг становится шесть команд, а затем у вас есть разрыва, которая является еще двумя командами и, что не на самом деле масштабируется.
Введите docker-compose.yml
Это то, где Docker Compose действительно сияет. Вместо набора двух команд для каждой службы, которую вы хотите создать, вы можете определить все услуги в вашем проекте в одном файле, файл, который мы называем Docker-Compose.yml.yml.yml
. Вы можете настроить следующие темы внутри Docker-Compose.yaml
файл:
- Построить , мы можем указать контекст здания и имя DockerFile, если он не должен называться стандартным именем
- Окружающая среда , мы можем определить и дать ценность как многие переменные среды, сколько нам нужно
- Изображение вместо создания изображений с нуля мы можем определить готовые изображения, которые мы хотим вырваться из докера и использовать в нашем решении
- Сети , мы можем создавать сети, и мы также можем для каждой службы указать, к какой сети она должна принадлежать, если есть какие-либо
- Порты мы также можем определить переадресацию порта, то есть какой внешний порт должен соответствовать каким внутренним порту в контейнере
- Объемы , конечно, мы также можем определить тома
Docker составляют в действии
Итак, на данный момент мы понимаем, что Docker Compose может позаботиться о почти всего, что мы можем сделать на командной строке, и что она также полагается на файл Docker-Compose.yaml
знать, какие действия для выполнения.
Авторирование Docker-Compose.yml файл
Давайте на самом деле попытаемся создать такой файл, и давайте дадим ему некоторые инструкции. Во-первых, хотя давайте сделаем быстрый обзор типичных проектов. Ниже у нас есть проект, состоящий из двух услуг, каждый из которых имеет свой каталог. Каждый каталог имеет Dockerfile
который содержит инструкции по созданию сервиса.
Это может выглядеть что-то вроде этого:
docker-compose.yaml /product-service app.js package.json Dockerfile /inventory-service app.js package.json Dockerfile
Стоит отметить выше, как мы создаем Docker-Compose.yaml
файл в корне нашего проекта. Причина для этого является то, что все услуги, которые мы стремимся к созданию и как создавать и начать их, должны быть определены в одном файле, наше Docker-Compose.yml
Отказ Хорошо, давайте откроем Docker-Compose.yml.yml.yml
и введите нашу первую строку:
// docker-compose.yaml version: '3'
Теперь это на самом деле имеет значение то, что вы указываете здесь. В настоящее время Docker поддерживает три разных варианта основных версий. 3 — последняя главная версия, читайте больше здесь, как различные версии отличаются, потому что они поддерживают различные функциональные возможности, и синтаксис может даже отличаться между ними Docker Versions Официальные документы Давайте давайте определим наши услуги:
// docker-compose.yaml version: '3' services: product-service: build: context: ./product-service ports: - "8000:3000"
Хорошо, это было много сразу, давайте сломаемся:
- Услуги: , должен быть только один из этого во всем файле docker-compose.yaml. Кроме того, обратите внимание, как мы заканчиваемся с
:
, нам нужно, что или не будет действительным синтаксисом, который, как правило, верно для любой команды - Продукт-сервис это имя, которое мы выбираем для нашего сервиса
- построить: , это инструктаж Docker составляют, как построить изображение. Если у нас есть готовое изображение, уже нам не нужно указывать это
- контекст: это необходимо, чтобы сказать Докер составлял, где наша
Dockerfile
В этом случае мы говорим, что ему нужно снизить уровень дляПродукт-сервис
каталог - Порты: , это переадресация портов, в котором мы сначала указываем внешний порт, за которым следует внутренний порт
Все это соответствует следующим двум командам:
docker build -t [default name]/product-service . docker run -p 8000:3000 --name [default name]/product-service
Ну, это почти правда, мы точно не сказали Docker Compose еще для выполнения здания изображения или создавать и запустить контейнер. Давайте узнаем, как сделать это, начиная с того, как построить изображение:
Составная сборка
Вышесказанное будет строить каждый сервис, который вы указали в Docker-Compose.yml
Отказ Давайте посмотрим на вывод нашей команды:
Выше мы можем видеть, что наш образ строится, и мы также видим, что это дано полное имя Состав-эксперименты_Product-Service: последние
как указано в последнем ряду. Имя получено из каталога, в котором мы находимся, то есть Составные эксперименты
и другая часть — это имя, которое мы даем услугу в Docker-Compose.yaml
файл. ОК, как для спиннинга, мы напечатаем:
докер
Это снова будет читать наши Docker-Compose.yaml
Файл, но на этот раз он создаст и запустит контейнер. Давайте также убедитесь, что мы запустим наш контейнер на заднем плане, чтобы мы добавили флаг -d
Так что полная команда сейчас:
Docker-Compose up -d
Хорошо, выше мы видим, что наш сервис создается. Давайте запустим Docker PS
Чтобы проверить состояние нашего вновь созданного контейнера: Кажется, он работает и работает на порту 8000
Отказ Давайте проверим: Хорошо, так пошел в терминал, и мы видим, что у нас есть контейнер. Мы знаем, что мы можем принести его с помощью при доке STOP, либо Docker Kill, но давайте сделаем это докеренно-составной способностью:
докер-состав
Как мы видим выше, журналы говорят, что он останавливается и удаляет контейнер, кажется, что делает оба Docker STOP [ID]
и Docker RM [ID]
для нас, сладкий:) Следует сказать, что если все, что мы хотим сделать, это остановить контейнеры, мы можем сделать это с:
остановка докера
Я не знаю о тебе Но на данный момент я готов перестать использовать Docker Build.
, Docker Run
, Докер Стоп
и Docker RM
Отказ Docker Compose, кажется, позаботится о полном жизненном цикле:)
Docker Compose демонстрирует
Давайте сделаем небольшой рецидил до сих пор. Docker Compose позаботится о полном жизненном цикле управления услугам для нас. Давайте попробуем перечислить наиболее использоваться команды Docker и какую соответствующую команду в Docker Compose будет выглядеть так:
Docker Build
становитсяDocker-Compose Build
Версия Docker Compose может создать все услуги, указанные вDocker-Compose.yml.yml.yml
Но мы также можем указать его, чтобы построить один сервис, поэтому мы можем иметь больше грануляционного контроля, если мы хотим кDocker Build + Docker Run
становитсядокер
, это делает много вещей одновременно, если ваши изображения не будут построены ранее, он построит их, и он также создаст контейнеры из изображенийДокер Стоп
становитсяостановка докера
, это снова команда, которую в Docker Compose может быть использован для остановки всех контейнеров или конкретного, если мы даем ему один контейнер в качестве аргументаDocker Stop && Docker RM
становитсядокер-состав
, это принесет контейнеры, сначала останавливая их, а затем удаляя их, чтобы мы могли начать свежие
Выше в себе довольно велик Но что еще больше, так это легко, чтобы продолжать расширить наше решение и добавить все больше и больше услуг для него.
Сделать наше решение
Давайте добавим еще один сервис, просто чтобы увидеть, насколько это легко и насколько хорошо он весы. Нам нужно сделать следующее:
- Добавить Новая услуга в нашем
Docker-Compose.yml.yml.yml
- построить Наше изображение/с
докер-состав строить
- Беги
докер
Давайте посмотрим на наш Docker-Compose.yaml
Файл и давайте добавим необходимую информацию для нашего следующего сервиса:
// docker-compose.yaml version: '3' services: product-service: build: context: ./product-service ports: - "8000:3000" inventory-service: build: context: ./inventory-service ports: - "8001:3000"
Хорошо, давайте увидим эти контейнеры и запустив, включая нашу новую услугу:
докер
Подожди, ты не должен бежать Составная сборка
? Ну, на самом деле нам не нужно Docker-Compose up
Все делает все для нас, создание изображений, создание и беговых контейнеров.
Предостережение, это не так просто, что работает нормально для первой строки + беги, где никакие изображения не существуют ранее. Однако, если вы выполняете перемен на службу, которые должны быть восстановлены, это означает, что вам нужно сначала запускать Concout Copose Pose, а затем вам нужно запустить docker-compose.
Резюме
Вот где нам нужно остановить на первую половину покрытия докера составляют, иначе это просто было бы слишком много. Мы смогли покрыть мотивацию за Docker Compose, и мы получили легкое объяснение архитектуру микросервиса. Кроме того, мы говорили о Docker против Docker Compose и, наконец, мы смогли контрастировать и сравнить команду Docker Compose для простых команд Docker. Таким образом, мы надеемся, мы смогли показать, насколько легче использовать Docker Compose и указать все ваши услуги в Docker-Compose.yaml
файл. Мы сказали, что докера было гораздо больше, чтобы составить переменные, сети, сети и базы данных, но это придет в следующую роль.
Докер (5 части серии)
Оригинал: «https://dev.to/azure/docker-from-the-beginning-partiv-mi6»