数週間前、私は 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として追加します。
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/'
そして、確認するために再確認できます。
すごい!もう一度、私のクジラアプリが正常にデプロイされました! 今、私はマイナーな変更のためにGithubレジストリに物事を保存し、私の完全な番号のバージョンをDocker Hubに出荷し、これらをACIに再デプロイするCIを持っています!
Compose を使用したより詳細な例を実行するために、マウントを使用して別のレジストリに接続する方法も含まれている Compose アプリケーションで ACI エクスペリエンスを使用する Karol の例 を確認してみませんか。
ACI エクスペリエンスの使用をローカルで開始するには、 Docker Desktop を今すぐ使用できます。 ACI で使用するには、イメージをリポジトリに含める必要もあり、 これは Docker Hubで簡単に実行できます。