Создание контейнеров для повторного использования

Используйте эти рецепты для создания контейнеров ИИ Azure, которые можно использовать повторно. Контейнеры можно создавать с помощью некоторых или всех параметров конфигурации, чтобы они не требовались при запуске контейнера.

После создания нового слоя контейнера (с параметрами) и его локального тестирования можно сохранить контейнер в реестре контейнеров. При запуске контейнеру потребуются только те параметры, которые в данный момент не хранятся в контейнере. Контейнер в частном реестре предоставляет пространство конфигурации для передачи этих параметров.

Синтаксис выполнения Docker

Во всех примерах docker run в этом документе предполагается наличие консоли Windows с символом продолжения строки ^. Примите во внимание следующие сведения.

  • Не изменяйте порядок аргументов, если вы не являетесь уверенным пользователем контейнеров Docker.
  • Если используется операционная система, отличная от Windows, или консоль, отличная от консоли Windows, используйте консоль или терминал, синтаксис папок для подключений и символ продолжения строки, соответствующие вашим консоли и системе. Так как контейнер служб ИИ Azure является операционной системой Linux, целевое подключение использует синтаксис папок в стиле Linux.
  • В примерах docker run используется каталог с диска c:, чтобы избежать конфликтов разрешений в Windows. Если вам нужен конкретный каталог для входных данных, может потребоваться предоставить соответствующие разрешения службе Docker.

Не сохраняйте параметры конфигурации в образе

В примерах команд docker run для каждой службы параметры конфигурации не сохраняются в контейнере. При запуске контейнера из консоли или службы реестра необходимо передать эти параметры конфигурации. Контейнер в частном реестре предоставляет пространство конфигурации для передачи этих параметров.

Рецепт повторного использования: храните все параметры конфигурации в контейнере

Чтобы сохранить все параметры конфигурации, создайте Dockerfile с этими параметрами.

Проблемы, свойственные такому подходу.

  • Новый контейнер имеет отдельные от исходного контейнера имя и тег.
  • Чтобы изменить эти параметры, необходимо изменить значения Dockerfile, перестроить образ и повторно выполнить публикацию в реестре.
  • Если кто-то получит доступ к реестру контейнеров или локальному узлу, он может запустить контейнер и использовать конечные точки служб ИИ Azure.
  • Если служба ИИ Azure, которую вы используете, не требует входных подключений, не добавляйте строки в COPY Dockerfile.

Создайте Dockerfile, извлекая из существующего контейнера служб ИИ Azure, который вы хотите использовать, а затем используйте команды Docker в Dockerfile, чтобы задать или извлечь сведения, необходимые контейнеру.

В этом примере:

  • Задает конечную точку выставления счетов {BILLING_ENDPOINT} из ключа среды узла с помощью ENV.
  • Задает ключ API выставления счетов {ENDPOINT_KEY} из ключа среды узла с помощью `ENV.

Рецепт повторного использования: храните параметры выставления счетов в контейнере

В этом примере показано, как создать контейнер тональности Языковой службы из Dockerfile.

FROM mcr.microsoft.com/azure-cognitive-services/sentiment:latest
ENV billing={BILLING_ENDPOINT}
ENV apikey={ENDPOINT_KEY}
ENV EULA=accept

При необходимости создайте и запустите контейнер локально или из контейнера частного реестра.

Рецепт повторного использования: храните параметры выставления счетов и подключения в контейнере

В этом примере показано, как использовать Распознавание речи, сохраняя выставление счетов и модели из Dockerfile.

  • Копирует файл модели Распознавания речи (LUIS) из файловой системы узла с помощью COPY.
  • Контейнер LUIS поддерживает более одной модели. Если все модели хранятся в одной и той же папке, требуется только инструкция COPY.
  • Запустите файл Docker из соответствующей родительской папки каталога входных данных модели. В следующем примере выполните команды docker build и docker run из соответствующего родительского каталога /input. Первый каталог /input в команде COPY — это каталог главного компьютера. Второй каталог /input — это каталог контейнера.
FROM <container-registry>/<cognitive-service-container-name>:<tag>
ENV billing={BILLING_ENDPOINT}
ENV apikey={ENDPOINT_KEY}
ENV EULA=accept
COPY /input /input

При необходимости создайте и запустите контейнер локально или из контейнера частного реестра.

Использование контейнера на локальном узле

Чтобы создать файл Docker, замените <your-image-name> на новое имя образа, а затем используйте:

docker build -t <your-image-name> .

Чтобы запустить образ и удалить его при остановке контейнера (--rm):

docker run --rm <your-image-name>

Добавление контейнера в частный реестр

Выполните следующие действия, чтобы использовать Dockerfile и поместить новый образ в частный реестр контейнеров.

  1. Создайте Dockerfile с текстом из рецепта повторного использования. Dockerfile не имеет расширения.

  2. Замените все значения в угловых скобках собственными значениями.

  3. Соберите файл в образ в командной строке или терминале с помощью следующей команды. Замените значения в угловых скобках (<>) на собственное имя и тег контейнера.

    Параметр тега -t — это способ добавить сведения об изменениях, внесенных в контейнер. Например, имя контейнера modified-LUIS указывает, что исходный контейнер был разделен на уровни. Имя тега with-billing-and-model показывает, как был изменен контейнер Распознавания речи (LUIS).

    docker build -t <your-new-container-name>:<your-new-tag-name> .
    
  4. Войдите в Azure CLI из консоли. Эта команда открывает браузер и требует проверки подлинности. После выполнения проверки подлинности можно закрыть браузер и продолжить работу в консоли.

    az login
    
  5. Войдите в свой частный реестр с Azure CLI из консоли.

    Замените значения в угловых скобках (<my-registry>) на имя реестра.

    az acr login --name <my-registry>
    

    Вы также можете войти с помощью имени для входа Docker, если вам назначен субъект-служба.

    docker login <my-registry>.azurecr.io
    
  6. Добавьте контейнеру тег расположения частного реестра. Замените значения в угловых скобках (<my-registry>) на имя реестра.

    docker tag <your-new-container-name>:<your-new-tag-name> <my-registry>.azurecr.io/<your-new-container-name-in-registry>:<your-new-tag-name>
    

    Если имя тега не используется, подразумевается latest.

  7. Отправьте новый образ в частный реестр контейнеров. При просмотре частного реестра контейнеров в следующей команде CLI в качестве имени контейнера будет использоваться имя репозитория.

    docker push <my-registry>.azurecr.io/<your-new-container-name-in-registry>:<your-new-tag-name>
    

Дальнейшие действия

Создание и использование экземпляра контейнера Azure