Öğretici: Docker Compose kullanarak çok kapsayıcılı bir grup dağıtma

Bu öğreticide, bir çok Kapsayıcılı uygulamayı yerel olarak tanımlayıp çalıştırmak ve sonra Azure Container Instances bir kapsayıcı grubu olarak dağıtmak için Docker Compose kullanırsınız.

Docker ile bulutta yerel uygulamalar geliştirirken ve yerel geliştirmeden bulut dağıtımına sorunsuz bir şekilde geçmek istediğinizde, kapsayıcıları isteğe bağlı Azure Container Instances olarak çalıştırın. Bu özellik, Docker ve Azure arasındaki tümleştirmeyleetkinleştirilir. Yerel Docker komutlarını, Azure 'da tek bir kapsayıcı örneği veya çok kapsayıcılı bir grup çalıştırmak için kullanabilirsiniz.

Önemli

Azure Container Instances özelliklerinin hepsi desteklenmez. Docker ACI tümleştirmesi GitHub deposunda bir sorun oluşturarak Docker-Azure tümleştirme hakkında geri bildirim sağlayın.

İpucu

Kapsayıcıları, görüntüleri ve bağlamlarını geliştirmek, çalıştırmak ve yönetmek için tümleşik bir deneyim için Visual Studio Code Için Docker uzantısını kullanabilirsiniz.

Bu makalede şunları yapacaksınız:

  • Azure kapsayıcı kayıt defteri oluşturma
  • Uygulama kaynak kodunu GitHub’dan kopyalama
  • Bir görüntü derlemek ve çok kapsayıcılı bir uygulamayı yerel olarak çalıştırmak için Docker Compose kullanma
  • Uygulama görüntüsünü kapsayıcı Kayıt defterinize gönderme
  • Docker için Azure bağlamı oluşturma
  • Azure Container Instances içinde uygulamayı getir

Önkoşullar

  • Azure CLI -Azure CLI 'nın yerel bilgisayarınızda yüklü olması gerekir. Sürüm 2.10.1 veya üzeri önerilir. Sürümü bulmak için az --version komutunu çalıştırın. Yükleme veya yükseltme yapmanız gerekirse bkz. Azure CLI’yı yükleme.

  • Docker Desktop - Windows veya MacOSiçin kullanılabilen Docker Desktop sürüm 2.3.0.5 veya üstünü kullanmanız gerekir. Veya Linux Için Docker acı TÜMLEŞTIRMESI CLI'sını yükler.

Azure kapsayıcı kayıt defteri oluşturma

Kapsayıcı kayıt defterinizi oluşturmadan önce bunun dağıtılacağı bir kaynak grubu gerekir. Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal koleksiyondur.

az group create komutuyla bir kaynak grubu oluşturun. Aşağıdaki örnekte, eastus bölgesinde myResourceGroup adlı bir kaynak grubu oluşturulur:

az group create --name myResourceGroup --location eastus

Kaynak grubunu oluşturduktan sonra az acr create komutuyla bir Azure kapsayıcı kayıt defteri oluşturun. Kapsayıcı kayıt defteri adı Azure’da benzersiz olmalı ve 5-50 arası alfasayısal karakter içermelidir. <acrName> değerini kayıt defteriniz için benzersiz bir adla değiştirin:

az acr create --resource-group myResourceGroup --name <acrName> --sku Basic

Aşağıda, mycontainerregistry082 adlı yeni bir Azure Container Registry için kısmi çıktı verilmiştir:

{
  "creationDate": "2020-07-16T21:54:47.297875+00:00",
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082",
  "location": "eastus",
  "loginServer": "mycontainerregistry082.azurecr.io",
  "name": "mycontainerregistry082",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

Bu öğreticinin geri kalan aşamalarında, bu adımda seçtiğiniz kapsayıcı kayıt defteri adı için yer tutucu olarak <acrName> kullanılmaktadır.

Kapsayıcı kayıt defterinde oturum açma

Görüntü göndermeden önce, Azure Container Registry örneğinizde oturum açmanız gerekir. İşlemi tamamlamak için az acr login komutunu kullanın. Oluşturduğunuzda, kapsayıcı kayıt defteri için seçtiğiniz benzersiz adı sağlamanız gerekir.

az acr login --name <acrName>

Örnek:

az acr login --name mycontainerregistry082

Komut tamamlandığında Login Succeeded döndürülür:

Login Succeeded

Uygulama kodunu alma

Bu öğreticide kullanılan örnek uygulama, temel oylama uygulamasıdır. Bu uygulama, ön uç bileşen ile arka uç Redis örneğinden oluşur. Web bileşeni, özel kapsayıcı görüntüsüne paketlenmiştir. Redis örneği, Docker Hub’dan alınan değiştirilmemiş bir görüntü kullanır.

Örnek uygulamayı geliştirme ortamınıza kopyalamak için git komutunu kullanın:

git clone https://github.com/Azure-Samples/azure-voting-app-redis.git

Kopyalanmış dizine geçin.

cd azure-voting-app-redis

Dizin içinde uygulama kaynak kodu ve önceden oluşturulmuş bir Docker Compose dosyası, Docker-Compose. YAML olur.

Docker compose dosyasını değiştirme

Docker-compose.yaml dosyasını bir metin düzenleyicisinde açın. Dosyası ve hizmetlerini azure-vote-back azure-vote-front yapılandırır.

version: '3'
services:
  azure-vote-back:
    image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
    container_name: azure-vote-back
    environment:
      ALLOW_EMPTY_PASSWORD: "yes"
    ports:
        - "6379:6379"

  azure-vote-front:
    build: ./azure-vote
    image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
    container_name: azure-vote-front
    environment:
      REDIS: azure-vote-back
    ports:
        - "8080:80"

Yapılandırmada azure-vote-front aşağıdaki iki değişikliği yapın:

  1. Hizmette image özelliğini azure-vote-front güncelleştirin. Görüntü adına Azure kapsayıcı kayıt defterinizin oturum açma sunucusu adı <acrName> (.azurecr.io. Örneğin, kayıt defteriniz myregistry olarak adlandırılmışsa oturum açma sunucusu adı myregistry.azurecr.io (hepsi küçük harf) olur ve görüntü özelliği myregistry.azurecr.io/azure-vote-front olur.
  2. Eşlemeyi ports olarak 80:80 değiştirme. Dosyayı kaydedin.

Güncelleştirilmiş dosya aşağıdakine benzer şekilde görünüyor:

version: '3'
services:
  azure-vote-back:
    image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
    container_name: azure-vote-back
    environment:
      ALLOW_EMPTY_PASSWORD: "yes"
    ports:
        - "6379:6379"

  azure-vote-front:
    build: ./azure-vote
    image: myregistry.azurecr.io/azure-vote-front
    container_name: azure-vote-front
    environment:
      REDIS: azure-vote-back
    ports:
        - "80:80"

Bu değiştirmeleri yaparak, sonraki adımda derlemeniz gereken görüntü Azure kapsayıcı kayıt defteriniz için etiketlenir ve görüntü bir sonraki adımda azure-vote-front Azure Container Instances.

İpucu

Bu senaryo için Bir Azure kapsayıcı kayıt defteri kullanmak zorunda değildir. Örneğin, uygulama görüntülerinizi barındırmak için Docker Hub depoyu seçebilirsiniz. Farklı bir kayıt defteri seçerseniz görüntü özelliğini uygun şekilde güncelleştirin.

Çok kapsayıcılı uygulamayı yerel olarak çalıştırma

Kapsayıcı görüntüsünü derlemek, Redis görüntüsünü indirmek ve uygulamayı başlatmak için örnek dosyayı kullanan docker-compose up docker-compose.yaml dosyasını çalıştırın:

docker-compose up --build -d

Tamamlandığında, oluşturulan görüntüleri görmek için docker images komutunu kullanın. Üç görüntü indirilir veya oluşturulur. Görüntü, azure-vote-front temel olarak görüntüyü kullanan ön uç uygulamasını uwsgi-nginx-flask içerir. redis görüntüsü bir Redis örneği başlatmak için kullanılır.

$ docker images

REPOSITORY                                TAG        IMAGE ID            CREATED             SIZE
myregistry.azurecr.io/azure-vote-front    latest     9cc914e25834        40 seconds ago      944MB
mcr.microsoft.com/oss/bitnami/redis       6.0.8      3a54a920bb6c        4 weeks ago          103MB
tiangolo/uwsgi-nginx-flask                python3.6  788ca94b2313        9 months ago        9444MB

Çalışan kapsayıcıları görmek için docker ps komutunu çalıştırın:

$ docker ps

CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                           NAMES
82411933e8f9        myregistry.azurecr.io/azure-vote-front     "/entrypoint.sh /sta…"   57 seconds ago      Up 30 seconds       443/tcp, 0.0.0.0:80->80/tcp   azure-vote-front
b62b47a7d313        mcr.microsoft.com/oss/bitnami/redis:6.0.8  "/opt/bitnami/script…"   57 seconds ago      Up 30 seconds       0.0.0.0:6379->6379/tcp          azure-vote-back

Çalışan uygulamayı görmek için yerel web tarayıcısına http://localhost:80 yazın. Örnek uygulama aşağıdaki örnekte gösterilen şekilde yüklenir:

Oylama uygulamasının resmi

Yerel uygulamayı dendikten sonra uygulamayı durdurmak ve kapsayıcıları kaldırmak için docker-compose'ı çalıştırın.

docker-compose down

Kapsayıcı kayıt defterine görüntü itme

Uygulamayı Azure Container Instances dağıtmak için, azure-vote-front görüntüyü kapsayıcı Kayıt defterinize göndermeniz gerekir. Görüntüyü göndermek için Docker-Compose Push Çalıştır:

docker-compose push

Kayıt defterine gönderim birkaç dakika sürebilir.

Görüntünün kayıt defterinizde depolandığını doğrulamak için az ACR Repository Show komutunu çalıştırın:

az acr repository show --name <acrName> --repository azure-vote-front

Azure bağlamı oluştur

Azure Container Instances kapsayıcıları çalıştırmak için Docker komutlarını kullanmak için önce Azure 'da oturum açın:

docker login azure

İstendiğinde, Azure kimlik bilgilerinizi girin veya seçin.

Çalıştırarak bir acı bağlamı oluşturun docker context create aci . Bu bağlam Docker 'ı bir Azure aboneliğiyle ve kaynak grubuyla ilişkilendirir, böylece kapsayıcı örnekleri oluşturabilir ve yönetebilirsiniz. Örneğin, myacicontext adlı bir bağlam oluşturmak için:

docker context create aci myacicontext

İstendiğinde, Azure abonelik KIMLIĞINIZI seçin, sonra var olan bir kaynak grubunu seçin veya Yeni bir kaynak grubu oluşturun. Yeni bir kaynak grubu seçerseniz, sistem tarafından oluşturulan bir adla oluşturulur. Tüm Azure kaynakları gibi Azure kapsayıcı örneklerinin de bir kaynak grubuna dağıtılması gerekir. Kaynak grupları, ilgili Azure kaynaklarını düzenlemenizi ve yönetmenizi sağlar.

' docker context ls İ çalıştırarak, Docker bağlamlarınızın aci bağlamını eklediğini doğrulayın:

docker context ls

Uygulamayı Azure Container Instances dağıtma

Sonra ACI bağlamına geçin. Sonraki Docker komutları bu bağlamda çalışır.

docker context use myacicontext

docker compose upAzure Container Instances içinde uygulamayı başlatmak için öğesini çalıştırın. azure-vote-frontGörüntü, kapsayıcı Kayıt defterinizden çekilir ve kapsayıcı grubu Azure Container Instances oluşturulur.

docker compose up

Not

Bir ACI bağlamında Şu anda kullanılabilir olan Docker Compose komutları docker compose up ve ' dir docker compose down . dockerBu komutlarda ve arasında tire yok compose .

Kısa bir süre içinde, kapsayıcı grubu dağıtılır. Örnek çıktı:

[+] Running 3/3
 ⠿ Group azurevotingappredis  Created                          3.6s
 ⠿ azure-vote-back            Done                             10.6s
 ⠿ azure-vote-front           Done                             10.6s

docker psÇalışan kapsayıcıları ve kapsayıcı grubuna atanan IP adresini görmek için ' i çalıştırın.

docker ps

Örnek çıktı:

CONTAINER ID                           IMAGE                                         COMMAND             STATUS              PORTS
azurevotingappredis_azure-vote-back    mcr.microsoft.com/oss/bitnami/redis:6.0.8                         Running             52.179.23.131:6379->6379/tcp
azurevotingappredis_azure-vote-front   myregistry.azurecr.io/azure-vote-front                            Running             52.179.23.131:80->80/tcp

Çalışan uygulamayı bulutta görmek için, görüntülenecek IP adresini yerel bir Web tarayıcısına girin. Bu örnekte, girin 52.179.23.131 . Örnek uygulama aşağıdaki örnekte gösterilen şekilde yüklenir:

ACI 'de oylama uygulaması görüntüsü

Ön uç kapsayıcısının günlüklerini görmek için Docker logs komutunu çalıştırın. Örnek:

docker logs azurevotingappredis_azure-vote-front

Dağıttığınız kapsayıcı grubunun özelliklerini ve durumunu görmek için Azure portal veya diğer Azure araçlarını da kullanabilirsiniz.

Uygulamayı denemeyi bitirdiğinizde uygulamayı ve kapsayıcıları şu ile durdurun docker compose down :

docker compose down

Bu komut Azure Container Instances kapsayıcı grubunu siler.

Sonraki adımlar

Bu öğreticide, Docker Compose kapsayıcılı bir uygulamayı yerel olarak çalıştırmadan yerel olarak çalışma moduna geçmek için Azure Container Instances. Şunları öğrendiniz:

  • Azure kapsayıcı kayıt defteri oluşturma
  • Uygulama kaynak kodunu GitHub’dan kopyalama
  • Görüntü Docker Compose ve çok kapsayıcılı bir uygulamayı yerel olarak çalıştırmak için Docker Compose'i kullanma
  • Uygulama görüntüsünü kapsayıcı kayıt defterinize itme
  • Docker için Azure bağlamı oluşturma
  • Uygulamayı Azure Container Instances

Kapsayıcıları, görüntüleri ve bağlamları geliştirmek, çalıştırmak Visual Studio Code ve yönetmek üzere tümleşik bir deneyim için de Docker uzantısını kullanabilirsiniz.

Çok kapsayıcılı bir grup belirtmek için Azure Container Instances Azure araçlarını kullanın. Örneğin, yaMLdosyası ile Azure CLI kullanarak bir kapsayıcı grubu dağıtma veya bir kapsayıcı şablonu kullanarak dağıtma öğretici Azure Resource Manager bakın.