Следуй за мной на Twitter , рад принять ваши предложения по темам или улучшениям/Крис
Сегодня он становится все более и более распространенным, чтобы разрабатывать, а также предоставлять ваше приложение в одном или нескольких контейнерах. Одно из наиболее распространенных программного обеспечения для контейнеризации есть Docker. Это отличный инструмент, позволяющий очень легко создавать изображение, а также контейнеры, а также отслеживать его. Разве не было бы здорово, если бы мы могли продолжать использовать Docker и принести наше приложение в облако
Azure Container Acces Получает развертывание контейнеров Docker на инфраструктуру Azure без предоставления каких-либо виртуальных машин или применения услуги более высокого уровня.
В этой статье мы сделаем следующее:
- Объясните , почему нам может понадобиться облако
- Клон Исходный код приложения от GitHub, давайте сосредоточимся на получении приложения в облако, а не на написании его с нуля, поэтому давайте возьмем существующее приложение
- Создать изображение контейнера из источника приложения, это предварительный шаг
- Тест Изображение в местной среде Docker, всегда хорошая практика, чтобы попробовать ваше программное обеспечение локально, прежде чем мы доставим его в облако
- Создать Реестр контейнеров, это вещь на лазуре, которая хранит изображения Docker
- Развернуть Наше приложение, мы можем создать экземпляр контейнера из одного из наших изображений в реестре контейнеров
Ресурсы
Если вы пропустили ссылки, которые мы упоминаем в этой статье. Они здесь:
Установка Azure CLI Azure CLI — это удивительный инструмент для вашего терминала Это позволяет вам делать практически все, что вы можете сделать на портале
AZ Container Command
AZ Container
Команда может быть вызвана разными способами. Раскрыть эти способы в вышеуказанной ссылке.Учебный модуль для реестра контейнеров Этот модуль научит вас всем о реестре контейнеров
Docker Tutorial Series Это серия из 5 частей, которая с самого начала проведет вас через контейнер с учетом Master Docker Compose и нескольких сервисов. Отлично, если вам нужно изучить Docker или освежить свои знания.
Расширение Docker для VS -кода Мой потрясающий коллега Шейн Бойер объясняет, как вы можете использовать расширение для VS -кода и сделать то, что я просто собираюсь показать вам, не выходя из кода VS
Обещание облака
Использование технологии контейнеров позволяет нам разделить наше приложение на многие услуги. Кроме того, он предлагает безопасный и надежный вариант для доставки приложения. Теперь наступает следующий вопрос, куда мы его доставляем, локально или, может быть, в облако?
Эта статья о доставке вашего приложения в облако, так что, конечно, мы немного предвзяты. Позвольте мне объяснить в несколько коротких моментов, почему мы думаем, что облако — отличное место для вашего приложения:
- Экономически эффективно , это экономически эффективно в том смысле, что вы платите только за то, что на самом деле используете. В локальном сценарии вы можете заплатить за серверы, процессор, память и т. Д. За то, что, как вы предполагаете, будет увеличением пользователей и использования. Это много расходов на наличные, и вам нужно спросить себя, хочу ли я потратить время, чтобы узнать, что мне нужно, а также потратить время и деньги, чтобы обновить его с течением времени?
- Масштабируемый , Облако позволяет легко масштабировать горизонтально и вертикально, добавляя нового работника, а не проблему, добавление большего количества серверов, снова базы данных, а не проблема и то, что мы можем сделать за считанные минуты
- Эластичный Представьте, что вы компания электронной коммерции с внезапными всплесками пользователей в праздничные дни или Черную пятницу и так далее. Облако может динамически добавить дополнительные ресурсы, которые вам необходимы, чтобы справиться с этим, и, конечно, оно может динамически уменьшаться, когда количество пользователей падает до более нормальной скорости
Предварительные условия
Вам понадобится следующее установленное
- Докер, здесь есть разные руководства для Linux, Mac и Windows, проверьте Официальные документы Чтобы увидеть, как установить Docker для вашей ОС
- Azure CLI установить
Клонировать приложение
Первоначально мы сказали, что мы сосредоточимся больше на том, как развертываться, а не писать приложение, поэтому по этой причине мы собираемся использовать готовое приложение, которое вы можете снять отсюда:
git clone https://github.com/azure-samples/aci-helloworld.git
Глядя на это, вы можете видеть, что это очень просто Node.js
Запуск приложения Экспресс
Анкет Есть два файла, представляющих интерес к репозитории ради нашей демонстрации:
- app/index.js , это точка входа в приложение
- Dockerfile , это
Dockerfile
Это поможет нам превратить наше приложение в изображение и, наконец, станет контейнером с приложением внутри него.
Давайте посмотрим на файл приложения/index.js:
// app.js const express = require('express'); const morgan = require('morgan'); const app = express(); app.use(morgan('combined')); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html') }); var listener = app.listen(process.env.PORT || 80, function() { console.log('listening on port ' + listener.address().port); });
Выше мы видим, что это довольно стандартное приложение Node.js + Express, здесь нет магии.
Давайте теперь посмотрим на Dockerfile:
// Dockerfile FROM node:8.9.3-alpine RUN mkdir -p /usr/src/app COPY ./app/ /usr/src/app/ WORKDIR /usr/src/app RUN npm install CMD node /usr/src/app/index.js
Он делает следующее:
- Выбирает изображение ОС В Короче говоря, мы основываем ОС на Ubuntu и релиз под названием Alpine, который имеет
Node.js
Предварительно установлен. - Создает каталог , со следующей командой mkdir -p/usr/src/app
- Копирует все файлы , от ./app/to/usr/src/app/
- Устанавливает рабочий каталог В to/usr/src/приложение
- Устанавливает наши зависимости от узла , с помощью NPM Install
- Запускает наше приложение , используя node/usr/src/app/index.js
В целом, это довольно стандартный Dockerfile.
Создайте изображение
Создание изображения является предварительным шагом, которое мы должны сделать, прежде чем наше приложение может быть начато. Шаг сборки приведет к изображению ОС, который мы просим, загрузите зависимую библиотеку, скопируйте код нашего приложения на его месте и так далее.
Мы можем использовать команду Docker Build для создания изображения. Точная команда, которую нам нужно будет использовать:
Docker Build ./Aci-shelloworld -t aci-tutorial-app
Приведенная выше команда ищет Dockerfile в каталоге/ACI-Helloworld и создает изображение под названием ACI-Tutorial-App. Запуск команды должен дать вывод, выглядящий так:
Выше это показывает нам все шаги, которые мы установили в Dockerfile, как:
- Снижение узла: 8.9.3-альпийское изображение ОС, копирование нашего приложения
- Установка Workdir,
- Установка зависимостей с помощью установки NPM,
- Запуск приложения с cmd node/usr/src/app/index.js
Мы можем увидеть наше созданное изображение, если запустим следующую команду:
Docker Images
ОК, тогда у нас есть изображение, которое означает, что мы готовы к нашему следующему шагу; тестирование на локальном уровне.
Проверьте изображение, создав контейнер
Теперь, когда у нас есть изображение, мы можем создать из него контейнер, используя Docker Run. Полная команда выглядит следующей:
Docker Run -d -p 8080: 80 ACI -Tutorial -App
Давайте посмотрим на аргументы:
- -Д, это говорит контейнеру работать на заднем плане
- -p, это позволяет нам отображать порты, значение аргумента следует интерпретировать как этот [внешний порт]: [Контейнеры внутренний порт]
Мы видим, что внешний порт составляет 8080, что означает, что мы можем перейти к
http://localhost: 8080 Чтобы гарантировать, что наше приложение работает.
Это изображение, которое мы получаем, поэтому я бы сказал, что наш контейнер работает:
С помощью следующей команды мы можем перечислить все работающие контейнеры:
Docker PS он должен представить следующий результат:
Мы не хотим, чтобы контейнер работал и использовал ресурсы, так что давайте откроем его. Мы хотим запустить командный Docker Kill, чтобы выключить контейнер, однако, эта команда нуждается в аргументе, ему нужен контейнер I d. Помните, когда мы бежим Docker PS
? Первым столбцом был наш идентификатор контейнера
Анкет Нам не нужен полный идентификатор, хотя этого достаточно с 4 первыми персонажами. Итак, давайте начнем с нашего команды
Docker Kill [идентификатор контейнера, 4 первых символа] Docker PS//Это должен быть пустой список. Вот дамп экрана только что запустил команды:
Создать реестр контейнеров
Azure Container Registry — это ваш частный реестр Docker в Azure.
Нам нужны Docker, Docker Engine и Azure CLI для работы. В этот момент мы уже установили Docker, так что давайте посмотрим, как мы можем установить Azure CLI:
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest
Прежде чем мы сможем создать указанный реестр, нам понадобится Ресурсная группа
. A Ресурсная группа
это логический контейнер, в котором нам нужно разместить все наши ресурсы, такие как приложения, базы данных и теперь Ресурсная группа
Анкет Все в одной группе может легко и надежно общаться.
Итак, давайте сначала создадим это:
az group create --name [your name for a resource group] --location westeurope
Как только это Ресурсная группа
Создан, мы можем вернуться к созданию нашего Реестр контейнеров
Анкет
Команда выглядит следующим образом:
az acr create --resource-group [your name for your resource group] --name [your name for a registry] --sku Basic --admin-enabled true
Давайте немного разберем его.
AZ ACR Создайте
Фактическая команда создать нашу Реестр контейнеров
Анкет Тогда нам нужны некоторые аргументы:
- -Resource-Group , это требует аргумента, который должен быть нашей недавно созданной группой ресурсов
- —имя , это название, которое мы даем наш реестр, например, контейнергии, например,
- —SKU , это план цен, мы выбираем самый дешевый, называемый базовым
Вы должны получить выход, выглядящий следующим образом:
{ "adminUserEnabled": true, "creationDate": "2018-03-16T21:54:47.297875+00:00", "id": "/subscriptions//resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082", "location": "eastus", **"loginServer": "[your container registry name].azurecr.io"**, **"name": "containerregistry"** , "provisioningState": "Succeeded", "resourceGroup": "myResourceGroup", "sku": { "name": "Basic", "tier": "Basic" }, "status": null, "storageAccount": null, "tags": {}, "type": "Microsoft.ContainerRegistry/registries" }
Важной частью является получение ProvisionState
назад с значением Удалось
Анкет
Войдите в наш реестр
Нам нужно войти в наш реестр, прежде чем мы сможем нажать на него изображения Docker. Итак, давайте войдем в систему:
az acr login --name [name of container registry]
Это должно сказать вам Вход преуспел
Если все хорошо
Ваш вывод должен выглядеть примерно так:
Выше вы можете видеть, что я решил позвонить в реестр Chriscontainerregistry
Поместите, вам придется заменить это на выбранное имя.
Тег контейнер изображение
Чтобы протолкнуть изображение контейнера в частный реестр, такой как Azure Container Registry
Вы должны сначала пометить изображение с полным именем сервера входа в реестр.
Это то, что вы можете узнать, посмотрев на вывод JSON, когда вы создали свой реестр. Вы ищете недвижимость под названием "LoginServer"
Анкет Он имеет формат [Имя вашего реестра] .azurecr.io
Анкет В моем случае это было бы chriscontainerregistry.azurecr.io
Анкет
Итак, либо вы помните имя LoginServer
, с тех пор, как мы создали наш реестр контейнеров, или вы всегда можете получить LoginServer
Позже позвонив этой команде:
az acr show --name [container registry name] --query loginService --output table
Это даст нам LoginServer
Имя напечатано в нашем терминале. Конечно [Имя реестра контейнеров] в нашем случае будет значением Chriscontainerregistry
, поэтому соответствующим образом скорректируйтесь в зависимости от выбранного вами имени.
Теперь давайте вернемся к Docker. Нам нужно Тег Изображение ACI-Tutorial-App с LoginServer вашего реестра контейнеров.
Мы отмечаем это со следующей командой:
Docker Tag Aci-Tutorial-App/ACI-Tutorial-App: v1
Давайте разберем это.
- ACI-Tutorial-App , это имя нашего изображения, запустите изображение Docker, если хотите проверить это
- /aci-tutorial-app: v1 Это будет пометить изображение в пути, поэтому можно перейти к нашему реестру контейнеров. Одно примечание:: v1 Это номер версии, но мы можем легко назвать эту последнюю или сегодняшнюю дату, дело в том, чтобы иметь систему, чтобы вы знали Если вы хотите использовать конкретное изображение
Таким образом, правильная команда в нашем случае, использование правильных значений будет:
Docker Tag Aci-Tutorial-App [Имя реестра контейнеров] .azurecr.io/aci-tutorial-app: v1
Запустите команду Docker Images на данный момент, чтобы убедиться, что она была правильно создана. Это должно выглядеть примерно так:
Толкнуть изображение в репозиторий
Теперь мы можем на самом деле подтолкнуть изображение в хранилище. Мы делаем это, выполнив следующую команду:
Docker push/aci-tutorial-app: v1
И со всеми правильными значениями это было бы:
Docker push chriscontainerregistry.azurecr.io/aci-tutorial-app:v1
Возможно, вам придется войти в систему сначала, и в этом случае вы запустите следующую команду:
AZ ACR Login — Имя [Имя реестра контейнеров]
Выполнение толкания Docker должно привести к следующему результату:
Перечислите изображения в репозитории
Итак, теперь мы действительно хотим посмотреть, какие изображения у нас там, спойлер, должен быть тот, который мы только что загрузили;)
Мы можем запустить следующую команду:
az acr repository list --name --output table
Используя правильное значение для Acrname, это выглядело бы так:
az acr repository list --name [name of container registry] --output table
Вот оно, наше единственное толкованное изображение:)
Развернуть приложение
Теперь, когда у нас есть наше изображение в репозитории, мы можем сказать репозиторию создать контейнер из нашего изображения и тем самым развернуть наше приложение.
Чтобы запустить нашу команду Deploy, нам сначала нужна небольшая информация, а именно следующая:
- вход в систему , мы можем запустить следующую команду для этого
az acr show --name --query loginServer
- Имя пользователя и пароль , для этого мы запускаем эту команду:
az acr credential show --name --query "passwords[0].value"
Это вернет пароль
Хорошо, теперь мы приходим в команду развертывания, это может выглядеть немного пугающе:
az container create --resource-group myResourceGroup --name aci-tutorial-app --image/aci-tutorial-app:v1 --cpu 1 --memory 1 --registry-login-server --registry-username --registry-password --dns-name-label --ports 80
Есть множество способов создать контейнер, если вы заинтересованы в других способах, посмотрите на эту ссылку AZ Container Создайте
Проверьте прогресс и журналы
Если для развертывания требуется время, вы можете проверить статус тем временем, с этой командой:
az container show --resource-group [name or resource group] --name aci-tutorial-app --query instanceView.state
После очень длинного ответа JSON обратно, ищите ProvisioningState: сукед
, если у вас есть, вы хороши.
Давайте посмотрим на наш контейнер со следующей командой:
az container show --resource-group [name of resource group] --name aci-tutorial-app --query ipAddress.fqdn
Мы можем увидеть журналы из приложения, запустив:
az container logs --resource-group [name of resource group] --name aci-tutorial-app
Это скажет нам запуск на порту 80
Посетите приложение развернутого
После того, как он будет развернут, мы можем посетить приложение по значению-dns-name, например, так:
Резюме
Мы решили развернуть приложение. На этот раз мы хотели развернуть контейнер Docker. Для этого нам сначала нужно было создать изображение Docker. Итак, мы создали один, используя Docker Build.
Тогда мы поняли, что нам нужен Реестр контейнеров
Потому что это было оттуда, мы бы развернули наше изображение, т. Е. Стротеть контейнер Docker и развернуть его.
Чтобы сделать это в том, что он оказался в Контейнерный реестр
Нам сначала нужно было пометить его с именем LoginServer, после этого мы нажали с меткой изображение.
Наконец, мы сказали Реестр контейнеров
Чтобы создать контейнер из После того, как развертывание было сделано, мы могли пойти в наш браузер и проверить, что приложение было там, успех:))
Это было не так много шагов. Я имею в виду, скажем, наше приложение состояло из 3 других услуг. Нам нужно только создать изображение для каждого, пометить его, нажмите и создать контейнер.
Оригинал: «https://dev.to/azure/how-you-can-use-docker-to-manage-deployments-in-the-cloud-2k4i»