PowerShellでAzure Container Registryにイメージをプッシュし簡単にデプロイする方法

PowerShellを利用してAzure Container Registry(ACR)にイメージをプッシュするプロセスを解説します。ACRは、Azure環境でコンテナイメージを安全かつ効率的に管理するためのサービスです。この記事では、PowerShellスクリプトを用いた手動および自動化されたデプロイ手法を学びます。この知識を活用することで、開発から運用までのワークフローを最適化し、デプロイの効率と信頼性を向上させることができます。

目次

Azure Container Registryとは


Azure Container Registry(ACR)は、Azureが提供するプライベートなコンテナレジストリサービスであり、DockerイメージやOCI(Open Container Initiative)アーティファクトの保存、管理、配布を行うためのプラットフォームです。以下にACRの特徴と利点を詳しく説明します。

ACRの特徴

  • 完全マネージドサービス
    ユーザーがインフラの運用管理を行う必要がなく、Azureがバックエンドの処理をすべて管理します。
  • セキュリティとアクセス制御
    Azure Active Directory(Azure AD)を使用した厳格なアクセス制御と、イメージのセキュリティを保証するためのコンテナスキャン機能を提供します。
  • ネイティブAzure統合
    Azure Kubernetes Service(AKS)やAzure App Serviceと統合し、簡単にデプロイ可能です。

ACRを利用するメリット

  • パフォーマンスの向上
    Azureデータセンター内での高速なデプロイが可能で、ネットワーク遅延を最小限に抑えられます。
  • 可用性とスケーラビリティ
    高い可用性を持ち、スケールアップ/スケールアウトが容易なため、大規模なコンテナ運用にも対応可能です。
  • 効率的なコスト管理
    使用量に基づいた料金体系で、必要な分だけ支払うことができます。また、ストレージ最適化機能により、不要なイメージを削除してコストを削減できます。

具体的な利用例

  • CI/CDパイプラインの構築
    ACRを使用してDockerイメージをバージョン管理し、JenkinsやAzure DevOpsと統合して自動化されたパイプラインを実現します。
  • マルチクラウド環境の活用
    ACRからイメージを取り出し、他のクラウドサービスやオンプレミス環境にも展開可能です。

Azure Container Registryを活用することで、効率的かつ安全にコンテナベースのアプリケーションを管理し、デプロイプロセスを強化できます。

必要な事前準備


PowerShellを使用してAzure Container Registry(ACR)にイメージをプッシュする前に、いくつかの事前準備が必要です。以下では、必要な設定やツールについて詳しく解説します。

1. Azureアカウントの作成とサブスクリプション

  • Azureアカウントの作成
    Azure公式サイトで無料アカウントを作成します。無料クレジットが付与されるため、初期費用なしで試用できます。
  • サブスクリプションの確認
    使用するAzureサブスクリプションが有効であることを確認します。必要に応じて管理者に問い合わせるか、Azureポータルで確認してください。

2. PowerShell環境のセットアップ

  • Azure PowerShellモジュールのインストール
    以下のコマンドを使用してAzure PowerShellモジュールをインストールします。
  Install-Module -Name Az -AllowClobber -Scope CurrentUser
  • モジュールのバージョン確認
    モジュールが最新バージョンであることを確認します。
  Get-Module -Name Az -ListAvailable

3. Azure CLIのインストール(オプション)


必要に応じてAzure CLIをインストールします。CLIを併用することで、スクリプト作成の柔軟性が向上します。インストール方法はAzure CLIの公式ガイドをご参照ください。

4. Azureリソースの準備

  • リソースグループの作成
    リソースを整理するためのグループを作成します。
  New-AzResourceGroup -Name MyResourceGroup -Location "East US"
  • Azure Container Registryの作成
    ACRを作成します。
  New-AzContainerRegistry -ResourceGroupName MyResourceGroup -RegistryName MyRegistry -Sku Basic

5. Docker環境の構築

  • Dockerのインストール
    ローカルマシンにDockerをインストールし、Dockerが正しく動作することを確認します。
  • ACRとの認証設定
    Docker CLIを使用してACRにログインするための認証を設定します。以下のコマンドを使用します。
  az acr login --name MyRegistry

6. サンプルイメージの準備


Docker Hubやローカルで作成したイメージを用意します。このイメージをACRにプッシュして利用します。例:

docker pull nginx:latest

これらの準備が完了すれば、PowerShellを使ったACRへの操作を開始する準備が整います。次のステップで具体的な操作方法を学びましょう。

PowerShellでACRに接続する方法


Azure Container Registry(ACR)にPowerShellを使用して接続するためには、適切な認証を設定し、ACRを操作するためのコマンドを実行します。以下では具体的な手順を解説します。

1. Azureアカウントへのログイン


Azureアカウントにログインして、ACRへの操作権限を取得します。以下のコマンドを実行してください。

Connect-AzAccount


このコマンドを実行すると、ブラウザウィンドウが開き、ログイン資格情報の入力を求められます。正常にログインできると、利用可能なサブスクリプションが認識されます。

2. 使用するサブスクリプションの設定


Azureサブスクリプションが複数ある場合は、対象のサブスクリプションを選択します。以下のコマンドを使用します。

Set-AzContext -SubscriptionId "<SubscriptionID>"


<SubscriptionID>には、利用するサブスクリプションのIDを入力してください。

3. ACRへの認証情報の取得


Docker CLIを使用してACRにログインするには、ACRの資格情報を取得します。以下のコマンドを実行してください。

$acr = Get-AzContainerRegistry -ResourceGroupName MyResourceGroup -Name MyRegistry
$acrCredentials = Get-AzContainerRegistryCredential -ResourceGroupName $acr.ResourceGroupName -RegistryName $acr.Name

4. Docker CLIを使用したログイン


取得した認証情報を使って、Docker CLIを使用してACRにログインします。以下のコマンドを実行します。

docker login $acr.LoginServer -u $acrCredentials.Username -p $acrCredentials.Password


成功すると、Docker CLIからACRへの操作が可能になります。

5. ACRの情報を確認


ACRの詳細情報を確認するには、以下のコマンドを使用します。

Get-AzContainerRegistry -Name MyRegistry


これにより、レジストリ名、場所、SKUなどの情報を確認できます。

6. 動作確認


ACRに接続が成功しているか確認するため、以下のコマンドでログインステータスをチェックします。

az acr login --name MyRegistry


“Login Succeeded” と表示されれば、接続が正常に行われています。

次のステップ


ACRへの接続が成功したら、次はDockerイメージをビルドし、ACRにプッシュする手順を進めます。これにより、コンテナの効率的なデプロイが可能となります。

イメージをビルドしてACRにプッシュする方法


PowerShellを使用してDockerイメージをビルドし、Azure Container Registry(ACR)にプッシュする方法を解説します。これにより、ACRにコンテナイメージを登録し、アプリケーションのデプロイ準備を整えることができます。

1. Dockerファイルの作成


Dockerイメージをビルドするには、まずDockerfileを作成します。以下は、簡単なNginxサーバーを構築するDockerfileの例です。
内容を以下のようにファイルに保存します(ファイル名:Dockerfile)。

# ベースイメージを指定
FROM nginx:latest

# カスタムの設定ファイルをコピー(必要に応じて)
COPY ./html /usr/share/nginx/html

# ポート80を公開
EXPOSE 80

2. Dockerイメージのビルド


PowerShellで以下のコマンドを実行し、Dockerイメージをビルドします。

docker build -t mynginx:v1 .
  • mynginx:v1 は、イメージ名とタグを指定しています。
  • . は現在のディレクトリをコンテキストとして指定します。

ビルドが成功すると、イメージがローカルのDocker環境に保存されます。

3. イメージにタグを付ける


ACRにプッシュするために、イメージにACR用のタグを付けます。

docker tag mynginx:v1 myregistry.azurecr.io/mynginx:v1
  • myregistry.azurecr.io は、ACRのログインサーバー名を指定します。
  • mynginx:v1 は、イメージのリポジトリ名とタグです。

4. ACRにログイン


ACRにログインしていない場合、以下のコマンドでログインします。

az acr login --name MyRegistry


成功すると、”Login Succeeded” と表示されます。

5. DockerイメージをACRにプッシュ


以下のコマンドを実行して、DockerイメージをACRにプッシュします。

docker push myregistry.azurecr.io/mynginx:v1


プッシュが完了すると、イメージがACRに登録されます。

6. ACRのイメージを確認


ACRに登録されたイメージを確認するには、以下のコマンドを実行します。

az acr repository list --name MyRegistry --output table


これにより、ACRに保存されているリポジトリの一覧が表示されます。

7. 動作確認


ACRに保存されたイメージをPullし、正しく動作するか確認します。

docker pull myregistry.azurecr.io/mynginx:v1
docker run -p 8080:80 myregistry.azurecr.io/mynginx:v1


ローカルブラウザでhttp://localhost:8080にアクセスし、Nginxページが表示されれば成功です。

次のステップ


イメージのプッシュが完了したら、自動デプロイやCI/CDパイプラインの構築を進めることで、さらに効率的な運用を実現できます。

デプロイの自動化


PowerShellスクリプトを使用して、Azure Container Registry(ACR)からAzure Kubernetes Service(AKS)や他のAzureリソースへデプロイを自動化する方法を解説します。これにより、手動操作を最小限にし、効率的で一貫性のあるデプロイプロセスを実現できます。

1. 必要なツールと準備

  • Azure CLIとAzure PowerShellモジュールをインストール済みであることを確認します。
  • ACRにイメージをプッシュ済みであることを確認します。
  • AKSクラスターが作成され、kubectlコマンドが動作する環境であることを確認します。

2. PowerShellスクリプトでの自動化フロー


以下の手順を含むスクリプトを作成します。

2.1 必要な変数を定義


PowerShellスクリプトの冒頭で必要なパラメーターを定義します。

# Azureリソースの設定
$resourceGroupName = "MyResourceGroup"
$registryName = "MyRegistry"
$aksClusterName = "MyAKSCluster"
$namespace = "default"

# デプロイするイメージ
$imageName = "myregistry.azurecr.io/mynginx:v1"

2.2 ACRからAKSへのアクセス許可を設定


ACRに保存されたイメージをAKSが利用できるようにアクセス許可を設定します。

$acr = Get-AzContainerRegistry -ResourceGroupName $resourceGroupName -Name $registryName
$aks = Get-AzAks -ResourceGroupName $resourceGroupName -Name $aksClusterName

Set-AzAks -ResourceGroupName $resourceGroupName -Name $aksClusterName -AttachAcr $acr.Id

2.3 AKSコンテキストの設定


kubectlが正しいAKSクラスターを操作するように、コンテキストを設定します。

az aks get-credentials --resource-group $resourceGroupName --name $aksClusterName --overwrite-existing

2.4 Kubernetesマニフェストファイルの作成


デプロイメントとサービスを定義するYAMLファイルを作成します(例: deployment.yaml)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: myregistry.azurecr.io/mynginx:v1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: mynginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

2.5 Kubernetesリソースの作成


PowerShellからkubectlコマンドを使用してリソースを作成します。

kubectl apply -f deployment.yaml

3. 動作確認


デプロイメントとサービスの状態を確認します。

kubectl get deployments
kubectl get services

4. スクリプト全体の例


以下はスクリプト全体の例です。

# 変数定義
$resourceGroupName = "MyResourceGroup"
$registryName = "MyRegistry"
$aksClusterName = "MyAKSCluster"
$imageName = "myregistry.azurecr.io/mynginx:v1"

# ACRとAKSの接続設定
$acr = Get-AzContainerRegistry -ResourceGroupName $resourceGroupName -Name $registryName
Set-AzAks -ResourceGroupName $resourceGroupName -Name $aksClusterName -AttachAcr $acr.Id

# AKSコンテキスト設定
az aks get-credentials --resource-group $resourceGroupName --name $aksClusterName --overwrite-existing

# Kubernetesリソースの作成
kubectl apply -f deployment.yaml

# 確認
kubectl get deployments
kubectl get services

次のステップ


このスクリプトを拡張して、CI/CDパイプラインに統合することで、より高度なデプロイ自動化を実現できます。また、トラブルシューティングの手法を理解し、エラー発生時にも迅速に対応できるよう備えておきましょう。

トラブルシューティング


Azure Container Registry(ACR)やAzure Kubernetes Service(AKS)を操作中に発生する可能性のある一般的なエラーとその解決方法について解説します。これにより、スムーズな運用を維持し、問題解決能力を向上させることができます。

1. ACRへのログインエラー

問題


ACRにログインしようとすると、以下のようなエラーメッセージが表示される場合があります。

Error response from daemon: Get https://<registry>.azurecr.io/v2/: unauthorized: authentication required

原因

  • Azure CLIまたはDocker CLIが正しく認証されていない。
  • ACRへのアクセス権限が不足している。

解決策

  • Azure CLIを使用してログインします。
  az acr login --name <RegistryName>
  • 必要に応じて、ACRへのアクセス権限を設定します。
  az role assignment create --assignee <AzureADUserOrServicePrincipal> --role "AcrPull" --scope <ACRResourceId>

2. Dockerイメージのプッシュエラー

問題


DockerイメージをACRにプッシュしようとすると、以下のようなエラーメッセージが表示される場合があります。

denied: requested access to the resource is denied

原因

  • Dockerイメージに正しいタグが付与されていない。
  • ACRへのログイン情報が不足している。

解決策

  • 正しいタグを付け直します。
  docker tag <LocalImageName>:<Tag> <RegistryName>.azurecr.io/<RepositoryName>:<Tag>
  • ACRに再ログインしてからプッシュします。
  docker push <RegistryName>.azurecr.io/<RepositoryName>:<Tag>

3. AKSでのデプロイエラー

問題


Kubernetesデプロイメントの作成中に以下のエラーが発生する場合があります。

ImagePullBackOff

原因

  • AKSがACRに保存されたイメージへアクセスできない。
  • イメージ名またはタグが間違っている。

解決策

  • AKSにACRのアクセス権を付与します。
  az aks update -n <AKSClusterName> -g <ResourceGroupName> --attach-acr <RegistryName>
  • デプロイメントYAMLのイメージ名が正しいか確認します。

4. ACRリポジトリが見つからない

問題


リポジトリ一覧を取得しようとした際に、対象のリポジトリが表示されない場合があります。

原因

  • イメージがまだプッシュされていない。
  • リポジトリ名が間違っている。

解決策

  • 以下のコマンドでイメージが正しくプッシュされているか確認します。
  az acr repository list --name <RegistryName>
  • 正しいレジストリ名やリポジトリ名を確認して操作を再実行します。

5. Kubernetesリソースの作成エラー

問題


YAMLファイルを適用する際に構文エラーが発生する場合があります。

error: unable to recognize "<file>.yaml": no matches for kind "<resource>"

原因

  • YAMLファイルに構文エラーがある。
  • Kubernetesのバージョンに非対応のリソースを指定している。

解決策

  • YAMLファイルの構文を確認し、エディタやLintツールを使用して修正します。
  • Kubernetesのバージョンに対応したリソース定義を使用してください。

6. Azure CLIの一般的なエラー

問題


Azure CLIの操作中に「InvalidResourceGroup」や「ResourceNotFound」エラーが発生する。

原因

  • リソースグループまたはリソース名が間違っている。
  • サブスクリプションの設定が正しくない。

解決策

  • 現在のサブスクリプションを確認して切り替えます。
  az account show
  az account set --subscription <SubscriptionID>
  • リソースグループやリソース名が正しいか確認します。

次のステップ


トラブルシューティングに慣れることで、エラー発生時にも迅速に対応できるようになります。引き続きACRやAKSを活用し、デプロイメントプロセスの安定化を図りましょう。

まとめ


本記事では、PowerShellを使用してAzure Container Registry(ACR)にイメージをプッシュし、効率的にデプロイする方法を解説しました。ACRの基本概念から始まり、必要な準備、イメージのビルドとプッシュ、デプロイの自動化、そして一般的なトラブルシューティングの方法まで詳細に説明しました。

PowerShellを活用することで、Azureのリソース管理やコンテナデプロイの効率を飛躍的に向上させることが可能です。今回学んだ知識を基に、CI/CDパイプラインの構築や自動化スクリプトの作成に取り組むことで、運用プロセスをさらに最適化できるでしょう。

引き続きAzureのサービスを活用し、コンテナベースのアプリケーション開発を加速させてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次