Развертывание контейнеров Docker в Azure
Обзор
Интеграция Docker с Azure позволяет разработчикам использовать собственные команды Docker для запуска приложений в экземплярах контейнеров Azure (ACI) при создании облачных приложений. Новый интерфейс обеспечивает тесную интеграцию между Docker Desktop и Microsoft Azure, позволяя разработчикам быстро запускать приложения с помощью расширения Docker CLI или VS Code, чтобы плавно переключаться с локальной разработки на облачное развертывание.
Кроме того, интеграция между Docker и технологиями разработчиков Microsoft позволяет разработчикам использовать интерфейс командной строки Docker для:
Простой вход в Azure
Настраивает контекст ACI с помощью одной команды Docker, что позволит вам переключаться с локального контекста на облачный контекст и быстро и легко запускать приложения.
Упростите разработку одноконтейнерных и мультиконтейнерных приложений с помощью спецификации Compose, позволяющей разработчику впервые без проблем вызывать полностью совместимые с Docker команды непосредственно в службе облачных контейнеров.
Также см. полный список функций контейнера, поддерживаемых ACI и полный список поддерживаемых функций установки Docker Compose cli на Linux с помощью ACI.
Пререквизиты
Чтобы развернуть контейнеры Docker в Azure, необходимо выполняет следующие требования.
Загружает и устанавливает последнюю версию Docker Desktop.
В качестве альтернативы устанавливает пакет Docker Compose CLI для Linux.
Убедиться, что у вас есть подписка Azure. Вы можете начать с Бесплатная учетная запись Azure.
Запуск контейнеров Docker в ACI
Docker не только запускает контейнеры локально, но также позволяет разработчикам беспрепятственно развертывать контейнеры Docker в ACI с помощью docker run
или развертывать многоконтейнерные приложения, определённые в файле Compose, с помощью команды docker compose up
.
Следующие разделы содержат инструкции по развертыванию контейнеров Docker в ACI. Также см. полный список функций контейнера, поддерживаемых ACI.
Войти в Azure
Выполняет следующие команды, чтобы войти в Azure:
$ docker login azure
Откроется ваш веб-браузер и вам будет предложено ввести учетные данные для входа в Azure. Если Docker CLI не может открывает браузер, он вернется к Поток кода устройства Azure и позволит вам подключиться вручную. Обратите внимание, что логин Командная строка Azure отделён от логина Docker CLI Azure.
Кроме того, вы можете войти в систему без взаимодействия (обычно в сценариях или сценариях непрерывной интеграции) с помощью субъекта-службы Azure с кодом docker login azure --client-id xx --client-secret yy --tenant-id zz
.
Примечание
При входе через поставщика сервисов Azure вы получаете токен доступа, действительный в течение короткого периода времени (обычно 1 час), но он не позволяет вам автоматически и прозрачно обновлять данный токен. Вы должны вручную повторно войти в систему, когда срок действия маркера доступа истек при входе в систему с поставщиком сервисов.
Вы также можете использовать только параметр --tenant-id
, чтобы указывает арендатора, если у вас есть несколько доступных в Azure.
Создаёт контекст ACI
После входа в систему вам необходимо создать контекст Docker, связанный с ACI, для развертывания контейнеров в ACI. Для создания контекста ACI требуется подписка Azure, группа ресурсов и регион. Например, давайте создадим новый контекст с именем myacicontext
:
$ docker context create aci myacicontext
Эта команда автоматически использует ваши учетные данные для входа в Azure для идентификации ваших идентификаторов подписки и групп ресурсов. Затем вы можете в интерактивном режиме выбрать подписку и группу, которые хотите использовать. При желании вы можете указывает данные параметры в CLI, используя следующие флаги: --subscription-id
, --resource-group
и --location
.
Если в вашей учетной записи Azure нет существующих групп ресурсов, команда docker context create aci myacicontext
создаст её для вас. Никаких дополнительных параметров для этого указывать не нужно.
После того, как вы создали контекст ACI, вы можете просмотреть список своих контекстов Docker, выполнив команду docker context ls
:
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
myacicontext aci myResourceGroupGTA@eastus
default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
Запускает контейнер
Теперь, когда вы вошли в систему и создали контекст ACI, вы можете начать использовать команды Docker для развертывания контейнеров в ACI.
Есть два способа использовать ваш новый контекст ACI. Вы можете использовать флаг --context
с командой Docker, чтобы указывает, что вы хотите запускает команду, используя только что созданный контекст ACI.
$ docker --context myacicontext run -p 80:80 nginx
Или вы можете изменяет контекст, используя docker context use
, чтобы выбрать контекст ACI, который будет вашим фокусом для запуска команд Docker. Например, мы можем использовать команду docker context use
для развертывания контейнера Nginx:
$ docker context use myacicontext
$ docker run -p 80:80 nginx
После того, как вы переключились на контекст myacicontext
, вы можете использовать docker ps
для вывода списка ваших контейнеров, работающих в ACI.
В случае демонстрационного контейнера Nginx, запущенного выше, результат выполнения команды ps отобразит в столбце «PORTS» IP-адрес и порт, на котором работает контейнер. Например, он может отображать 52.154.202.35:80->80/tcp
, и вы можете просмотреть страницу приветствия Nginx, просмотрев http://52.154.202.35
.
Чтобы просмотреть журналы из вашего контейнера, запускает:
$ docker logs <CONTAINER_ID>
Чтобы выполняет команду в работающем контейнере, запускает:
$ docker exec -t <CONTAINER_ID> COMMAND
Чтобы останавливает и удаляет контейнер из ACI, запускает:
$ docker stop <CONTAINER_ID>
$ docker rm <CONTAINER_ID>
Вы можете удаляет контейнеры, используя docker rm
. Чтобы удаляет работающий контейнер, необходимо использовать флаг --force
или останавливает контейнер с помощью docker stop
перед его удалением.
Примечание
Семантика перезапуска контейнера в ACI отличается от семантики при использовании локального контекста Docker для локальной разработки. В ACI контейнер будет сброшен в исходное состояние и запущен на новом узле. Это включает в себя файловую систему контейнера, поэтому все состояние, не сохраненное в томе, будет потеряно при перезапуске.
Запуск приложений Compose
Вы также можете развертывать многоконтейнерные приложения, определённые в файлах Compose, и управлять ими в ACI с помощью команды docker compose
. Все контейнеры в одном приложении Compose запускаются в одной группе контейнеров. Обнаружение службы между контейнерами работает с использованием имени службы, указанного в файле Compose. Разрешение имён между контейнерами достигается путём записи имён служб в файл /etc/hosts
, который автоматически совместно используется всеми контейнерами в группе контейнеров.
Также см. полный список функций создания, поддерживаемых ACI.
Убедиться, что вы используете контекст ACI. Вы можете сделать это либо указав флаг
--context myacicontext
, либо установив контекст по умолчанию с помощью командыdocker context use myacicontext
.Запускает
docker compose up
иdocker compose down
, чтобы запускает, а затем останавливает полное приложение Compose.
По умолчанию docker compose up
использует файл docker-compose.yaml
в текущей папке. Вы можете указывает рабочий каталог с помощью флага –workdir или указывает файл Compose напрямую с помощью docker compose --file mycomposefile.yaml up
.
Вы также можете указывает имя для приложения Compose, используя флаг --project-name
во время развертывания. Если имя не указано, имя будет получено из рабочего каталога.
Контейнеры, запущенные как часть приложений Compose, будут отображаться вместе с отдельными контейнерами при использовании docker ps
. Их идентификатор контейнера будет иметь формат: <COMPOSE-PROJECT>_<SERVICE>
. Данные контейнеры нельзя останавливает, запускает или удаляет независимо друг от друга, поскольку все они являются частью одной группы контейнеров ACI. Вы можете просматривать журналы каждого контейнера с docker logs
. Вы можете перечислить развернутые приложения Compose с docker compose ls
. В нем будут перечислены только приложения для создания, а не отдельные контейнеры, начинающиеся с docker run
. Вы можете удаляет приложение Compose с помощью docker compose down
.
Примечание
Текущая интеграция Docker Azure не позволяет получать объединенный поток журналов из всех контейнеров, составляющих приложение Compose.
Обновление приложений
Из развернутого приложения Compose вы можете обновить приложение, повторно развернув его с тем же именем проекта: docker compose --project-name PROJECT up
.
Обновление приложения означает, что узел ACI будет использоваться повторно, а приложение сохранит тот же IP-адрес, который ранее был выделен для предоставления портов, если таковые имеются. ACI имеет некоторые ограничения на то, что может быть обновлено в существующем приложении (например, вы не сможете изменяет резервирование ЦП/памяти), в данных случаях вам необходимо развернуть новое приложение с нуля.
Обновление — это поведение по умолчанию, если вы вызываете docker compose up
для уже развернутого файла Compose, поскольку имя проекта Compose происходит от каталога, в котором файл Compose находится по умолчанию. Вам необходимо явно выполняет docker compose down
перед повторным запуском docker compose up
, чтобы полностью сбросить приложение Compose.
Освобождение ресурсов
Отдельные контейнеры и приложения Compose можно удаляет из ACI с помощью команды docker prune
. Команда docker prune
удаляет развертывания, которые в данный момент не выполняются. Для удаления запущенных отложений можно указывает --force
. Параметр --dry-run
перечисляет развертывания, которые планируется удаляет, но фактически не удаляет их.
$ ./bin/docker --context acicontext prune --dry-run --force
Resources that would be deleted:
my-application
Total CPUs reclaimed: 2.01, total memory reclaimed: 2.30 GB
Открытие портов
Отдельные контейнеры и приложения Compose могут дополнительно открывать порты. Для отдельных контейнеров это делается с помощью флага --publish
(-p
) команды docker run
: docker run -p 80:80 nginx
.
Для приложений Compose необходимо указывает открытые порты в определении файловой службы Compose:
services:
nginx:
image: nginx
ports:
- "80:80"
Примечание
ACI не позволяет отображать порты (т. е. изменять номер порта при раскрытии порта). Поэтому исходный и целевой порты должны быть одинаковыми при развертывании в ACI.
Все контейнеры в одном приложении Compose развернуты в одной группе контейнеров ACI. Различные контейнеры в одном и том же приложении Compose не могут предоставлять один и тот же порт при развертывании в ACI.
По умолчанию при предоставлении портов для вашего приложения случайный общедоступный IP-адрес связан с группой контейнеров, поддерживающей развернутое приложение (один контейнер или приложение Compose). Данный IP-адрес можно получает при перечислении контейнеров с docker ps
или с использованием docker inspect
.
Имя метки DNS
Помимо предоставления портов на случайный IP-адрес, вы можете указывает имя метки DNS, чтобы предоставить вашему приложению полное доменное имя в форме: <NAME>.region.azurecontainer.io
.
Это имя можно установить с помощью флага --domainname
при выполнении docker run
или с помощью поля domainname
в файле Compose при выполнении docker compose up
:
services:
nginx:
image: nginx
domainname: "myapp"
ports:
- "80:80"
Примечание
Домен приложения Compose можно задать только один раз, если указывает domainname
для нескольких сервисов, значение должно быть одинаковым.
Полное доменное имя <DOMAINNAME>.region.azurecontainer.io
должно быть доступно.
Переменные среды
При использовании docker run
вы можете передавать переменные среды в контейнеры ACI, используя флаг --env
. Для приложений Compose можно указывает переменные среды в файле Compose с помощью служебного поля environment
или env-file
или с флагом командной строки --environment
.
Проверки здоровья
Вы можете указывает проверки работоспособности контейнера, используя либо флаги с префиксом --healthcheck-
с docker run
, либо в файле Compose с разделом службы healthcheck
.
Проверки работоспособности преобразуются в ACI LivenessProbe
s. ACI периодически запускает команду проверки работоспособности, и в случае её неудачи работа контейнера будет завершена.
Проверки работоспособности должны использоваться в дополнение к политикам перезапуска, чтобы гарантировать перезапуск контейнера при завершении работы. Политика перезапуска по умолчанию для docker run
— no
, которая не перезапускает контейнер. Политика перезапуска по умолчанию для Compose — any
, которая всегда пытается перезапустить сервисные контейнеры.
Пример использования docker run
:
$ docker --context acicontext run -p 80:80 --restart always --health-cmd "curl http://localhost:80" --health-interval 3s nginx
Пример использования файлов Compose:
services:
web:
image: nginx
deploy:
restart_policy:
condition: on-failure
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80"]
interval: 10s
Частные образы Docker Hub и использование Реестра контейнеров Azure
Вы можете развернуть частные образы в ACI, размещенные в любом реестре контейнеров. Вам необходимо войти в соответствующий реестр, используя docker login
, прежде чем запускать docker run
или docker compose up
. Интерфейс командной строки Docker извлечет ваш логин реестра для развернутых образов и отправит учетные данные вместе с информацией о развертывании образа в ACI. В случае Реестра контейнеров Azure командная строка попытается автоматически войти в ACR из вашего имени входа в Azure. Вам не нужно сначала вручную входить в реестр ACR, если у вашего входа в Azure есть доступ к ACR.
Использование групп ресурсов ACI в качестве пространств имён
Вы можете создать несколько контекстов Docker, связанных с ACI. Каждый контекст должен быть связан с уникальной группой ресурсов Azure. Это позволяет использовать контексты Docker в качестве пространств имён. Вы можете переключаться между пространствами имён, используя docker context use <CONTEXT>
.
Когда вы запускаете команду docker ps
, она перечисляет только контейнеры в вашем текущем контексте Docker. Не будет никаких конфликтов в именах контейнеров или имён приложений Compose между двумя контекстами Docker.
Устанавливает интерфейс командной строки Docker Compose в Linux.
Docker Compose CLI добавляет поддержку запуска и управления контейнерами в Azure Container Instances (ACI).
Устанавливает необходимые компоненты
Установить скрипт
Вы можете установить новый CLI с помощью скрипта установки:
$ curl -L https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sh
Ручная установка
Вы можете загружает интерфейс командной строки Docker ACI Integration со страницы последний релиз.
Затем вам нужно будет сделать его исполняемым:
$ chmod +x docker-aci
Чтобы включить использование локального Docker Engine и использовать существующие контексты Docker, у вас должен быть существующий Docker CLI как com.docker.cli
где-то в PATH
. Вы можете сделать это, создав символическую ссылку из существующего интерфейса командной строки Docker:
$ ln -s /path/to/existing/docker /directory/in/PATH/com.docker.cli
Примечание
Переменная среды PATH
представляет собой список каталогов, разделенных двоеточием, с приоритетом слева направо. Вы можете просмотреть его, используя echo $PATH
. Вы можете найти путь к существующему интерфейсу командной строки Docker, используя which docker
. Вам могут понадобиться root-права, чтобы сделать эту ссылку.
При новой установке Ubuntu 20.04 с Docker Engine уже установлено:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ which docker
/usr/bin/docker
$ sudo ln -s /usr/bin/docker /usr/local/bin/com.docker.cli
Вы можете убедиться, что это работает, проверив, что новый интерфейс командной строки работает с контекстом по умолчанию:
$ ./docker-aci --context default ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ echo $?
0
Чтобы сделать данный CLI с интеграцией ACI вашим CLI Docker по умолчанию, вы должны переместить его в каталог в PATH
с более высоким приоритетом, чем существующий CLI Docker.
Опять же, на свежей Ubuntu 20.04:
$ which docker
/usr/bin/docker
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ sudo mv docker-aci /usr/local/bin/docker
$ which docker
/usr/local/bin/docker
$ docker version
...
Azure integration 0.1.4
...
Поддерживаемые команды
После установки интерфейса командной строки Docker ACI Integration запускает --help
, чтобы просмотреть текущий список команд.
Удаляет
Чтобы удаляет Docker Azure Integration CLI, вам необходимо удаляет загруженный двоичный файл и com.docker.cli
из вашего PATH
. Если вы устанавливали с помощью скрипта, это можно сделать следующим образом:
$ sudo rm /usr/local/bin/docker /usr/local/bin/com.docker.cli
Обратная связь
Спасибо, что попробовали интеграцию с Docker Azure. Ваше мнение очень важно для нас. Сообщить нам свой отзыв, создав задачу в репозитории compose-cli GitHub.