LoginSignup
0
2

More than 5 years have passed since last update.

Azure Container Registry Buildで作ったイメージをContainer Instancesで起動させる

Posted at

Build 2018でACR Buildがプレビューリリースされたので試しました。
ついでに作ったイメージをContainer Instancesで起動させます。

ACR Buildとは?

Azure Container Registryは、Dockerイメージを格納する為のプライベートレジストリです。
Dockerイメージを格納するためのものなので、どこか別の場所でDockerfileをビルドする必要がありました。
今回のリリースで、Azure CLIさえあれば、手元でdocker buildコマンドを実行する必要がなくなります。

ACR作成

2018年5月時点でBuild機能が使えるリージョンは「米国東部」「ヨーロッパ西部」のみなのでどちらかで作成します。

  • [リソースの作成]から「Container Registry」を選択します。
    image.png

  • 管理者ユーザは有効化してください。SKUは最も安いBasicでよいです。
    image.png

Dockerfile準備

ビルド対象のDockerfileを作っていきます。作成はCloud Shell上で行います。

  • Cloud Shell Bashを選択します。手順は公式ページ参照。
    Cloud Shell クイックスタート

  • 場所はどこでもいいんですが、File Storage上にDockerfileを作ることにします。Cloud Shellで以下のコマンドを実行します。

cd clouddrive
mkdir test
cd test
vi Dockerfile
  • 今回はAWS CLIを実行するコンテナを作って、Azure Container InstancesからAWS EC2を操作してみたいと思います。
  • 以下のDockerfileを作って保存します。
FROM alpine:latest

RUN apk update && \
    apk add python py-pip jq && \
    pip install awscli

ACR Build実行

  • az acr buildコマンドでイメージをビルドして、ACRにPushします。
az acr build --registry kwhracrtest --image awscli:v1.0 .

※Cloud Shellではなくて自分でインストールしたAzure CLIを利用している場合は、az acr buildオプションが存在しないかもしれません。その場合は最新のAzure CLIをインストールしてください。

  • ポータルのACR画面に戻り、[リポジトリ]を選択すると、先程ビルドしたイメージが格納されていることが分かります。 image.png

Container Instancesで実行する

それではこのACRに格納されたDockerイメージを使って、実際にコンテナを起動してみます。
今回試すのでAWS CLIなので、EC2を起動してみたいと思います。

  • まずはACRからのイメージPullに必要なACR管理者ユーザ名とパスワードを控えておきます。ポータルのACRから[アクセスキー]を選択してください。
    image.png

  • ユーザ名とパスワードが表示されるので控えておきます。
    image.png

  • 今回はAWS CLIを使うので、EC2起動権限のあるIAMのアクセスキー、シークレットキーを事前に入手しておいてください。また、起動対象EC2のインスタンスIDも入手しておいてください。

  • Cloud Shellで以下のコマンドを実行します。

az container create --name kwhrawscli \
    --image kwhracrtest.azurecr.io/awscli:v1.0 \
    --cpu 1 \
    --memory 1 \
    --registry-login-server kwhracrtest.azurecr.io \
    --registry-username kwhracrtest \
    --registry-password [Your ACR Password] \
    --ip-address public \
    -g kwhracrtest \
    --restart-policy Never \
    -e AWS_ACCESS_KEY_ID=[Your IAM AccessKey] \
       AWS_DEFAULT_REGION=ap-northeast-1 \
       AWS_SECRET_ACCESS_KEY=[Your IAM SecretKey] \
    --command-line \
      "aws ec2 start-instances --instance-ids [Your EC2 Ids]"

結果確認

  • Azureポータルからコンテナーインスタンスを選択します。
    image.png

  • 先程実行したコンテナーインスタンスが作られているかと思いますので、それを選択します。

  • [設定]-[コンテナー]の順に選択します。
    image.png

  • 結果が表示されています。ACRからイメージをPull→コンテナ作成→コンテナ起動→コンテナ破棄の順に動いていることが分かります。
    image.png

  • コンテナの状態が「Terminated」になっているのは、今回作ったコンテナイメージが実行後すぐに破棄される作りになっているからです。「Terminated」になっている間は課金されません。
    image.png

  • AWS側を見てみても対象のインスタンスが無事起動していました。
    image.png

Container Instancesの料金は?

コンテナー実行時間に対して秒単位で課金されるようです。
Container Instances料金

今回の実行でいくら掛かったのか計算してみたいと思います。

イベントを見てみると、Pulling/Pulled/Created/Started/Killingと5つのステップが実行されており、それぞれ1秒で完了しています。
つまり実行時間は5秒となります。

az container createコマンドで、vCPU 1、メモリ 1GB と指定して実行しました。

以上より、条件式に当てはめると以下のような料金になります。

メモリ使用時間
1(コンテナーグループ) * 5(秒) * 1(GB) * 0.00056(円)
= 0.0028 円

vCPU使用時間
1(コンテナーグループ) * 5(秒) * 1(vCPU) * 0.001456(円)
= 0.00728 円

課金合計
0.0028 + 0.00728
= 0.01008 円

安いですね。
今回のケースでは問題ないですが、vCPU/メモリをそれなりのスペックで起動しっぱなしにした場合は、結構な金額になってしまうので注意が必要です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2