Docker、Azure、および Github アクションを使用したクラウドデプロイのセットアップ

数週間前、私は Docker で GitHub Actions を使用する方法についての ブログ を共有しましたが、その前に Guillaume は Docker と ACI の使用に関するブログ投稿も共有しています。 これら2つを組み合わせて、GitHubのコードから、新しいDockerからACIへのエクスペリエンスを使用してACIにデプロイするまでの1つのフローを見てみようと思いました。

まず、前回のGithubアクションでどこにいたかを思い出しましょう。 前回は、マスターするビルドが再構築され、Docker Hubにプッシュされるようになりました(そして、これらを高速化するためにいくつかのキャッシュを使用しました)。  

name: CI to Docker Hub
 
on:
 push:
   tags:
     - "v*.*.*"
 
jobs:
 
 build:
   runs-on: ubuntu-latest
   steps:
     -
       name: Checkout
       uses: actions/checkout@v2
     -      
       name: Set up Docker Buildx
       id: buildx
       uses: docker/setup-buildx-action@v1
     -    
       name: Cache Docker layers
       uses: actions/cache@v2
       with:
         path: /tmp/.buildx-cache
         key: ${{ runner.os }}-buildx-${{ github.sha }}
         restore-keys: |
           ${{ runner.os }}-buildx-
     -
       uses: docker/login-action@v1
       with:
         username: ${{ secrets.DOCKER_USERNAME }}
         password: ${{ secrets.DOCKER_PASSWORD }}
     -
       name: Build and push
       id: docker_build
       uses: docker/build-push-action@v2
       with:
         context: ./
         file: ./Dockerfile
         builder: ${{ steps.buildx.outputs.name }}
         push: true
         tags: bengotch/simplewhale:latest
         cache-from: type=local,src=/tmp/.buildx-cache
         cache-to: type=local,dest=/tmp/.buildx-cache
     -
       name: Image digest
       run: echo ${{ steps.docker_build.outputs.digest }}

次に、構築したイメージを取得して ACI にデプロイする方法を見つけたいと考えています。 

最初に行う必要があるのは、Githubリポジトリにアクセスして、Azureの資格情報を保存するために使用されるシークレットをさらにいくつか追加することです。 すでにAzureアカウントを持っていて、資格情報を取得できる場合は、それは素晴らしいことです。 そうでない場合は、使用する Azure 資格情報を作成する必要がありますが、それについても説明します。 

テナント ID をシークレット AZURE_TENANT_IDとして追加し、Azure でアプリを作成してクライアントとシークレットを取得する必要があります。これを行う最も簡単な方法は、次のコマンドで Azure コンソールを使用することです。 

az ad sp create-for-rbac --name http://myappname --role contributor --sdk-auth

これにより、AZURE_CLIENT_IDとAZURE_CLIENT_SECRETが出力されます。

最後に、サブスクリプションIDを追加する必要がありますが、 ここで これを見つけて、AZURE_SUBSCRIPTION_IDとして追加します。

Docker azure and github actions 1

Azure を初めて使用する場合は、リソース グループも作成する必要があり、これは 1 つのソリューションのリソースのセットをグループ化する Azure の方法です。 ここに 行って追加することで、新しいリソースグループを設定できます(たとえば、英国南部でsimplewhaleという新しいリソースグループを作成しました)。  

これでアクションの構築を開始でき、このワークフローをトリガーするタイミングの条件を設定します。 私は非常に継続的でありたいので、Docker Hubにプッシュするたびにイメージをデプロイします。

on:
   workflow_run:
     workflows: ["CI to Docker Hub"]
     branches: [main]
     types:
       - completed

これが整ったら、アクションのためにUbuntuボックスにセットアップします。

jobs:
 run-aci:
   runs-on: ubuntu-latest
   steps:
     - name: Checkout code
       uses: actions/checkout@v2

次に、実行しているアクションインスタンスにDocker Compose CLIをインストールする必要があります。

- name: Install Docker Compose CLI
       run: >
         curl -L https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sh

これをインストールすると、Compose CLI を使用して Azure にログインし、前に入力したシークレットを利用できます。

  - name: "login azure"
       run: "docker login azure --client-id $AZURE_CLIENT_ID --client-secret $AZURE_CLIENT_SECRET --tenant-id $AZURE_TENANT_ID"
       env:
         AZURE_TENANT_ID: '${{ secrets.AZURE_TENANT_ID }}'
         AZURE_CLIENT_ID: '${{ secrets.AZURE_CLIENT_ID }}'
         AZURE_CLIENT_SECRET: '${{ secrets.AZURE_CLIENT_SECRET }}'

ログインしたら、展開に使用する ACI コンテキストを作成する必要があります。

- name: "Create an aci context"
       run: 'docker context create aci --subscription-id $AZURE_SUBSCRIPTION_ID --resource-group simplewhale --location uksouth acicontext'
       env:
         AZURE_SUBSCRIPTION_ID: '${{ secrets.AZURE_SUBSCRIPTION_ID }}'

次に、ACI コンテキストを使用してコンテナーをデプロイします。 私はそれが存在することを確認するためにカールを追加しました:

- name: "Run my App"
       run: 'docker --context acicontext run -d --name simplewhale --domainname simplewhale -p 80:80 bengotch/simplewhale '
 
     - name: "Test deployed server"
       run: 'curl http://simplewhale.uksouth.azurecontainer.io/'

そして、確認するために再確認できます。
Docker azure と github actions 2

すごい!もう一度、私のクジラアプリが正常にデプロイされました! 今、私はマイナーな変更のためにGithubレジストリに物事を保存し、私の完全な番号のバージョンをDocker Hubに出荷し、これらをACIに再デプロイするCIを持っています!

Compose を使用したより詳細な例を実行するために、マウントを使用して別のレジストリに接続する方法も含まれている Compose アプリケーションで ACI エクスペリエンスを使用する Karol の例 を確認してみませんか。
ACI エクスペリエンスの使用をローカルで開始するには、 Docker Desktop を今すぐ使用できます。 ACI で使用するには、イメージをリポジトリに含める必要もあり、 これは Docker Hubで簡単に実行できます。