概要
手元にある Pythonプログラムをコンテナ化し、コンテナレジストリ(ACR)にプッシュする手順を簡単に説明しています
ローカル環境
macOS Big Sur 11.3
python 3.8.3
Docker version 20.10.7, build f0df350
前提条件
- Azure環境がすでに用意されていること(テナント/サブスクリプション)。
- ローカル環境に「azure cli」がインストールされていること。
事前準備
- ローカルの環境変数に以下を定義しておきます。
- ACR_NAME=acr0ituru
- ACR_RES_GROUP=rg_ituru_acr
Azure にログイン
azure cli バージョンの確認
$ az version
{
"azure-cli": "2.26.1",
"azure-cli-core": "2.26.1",
"azure-cli-telemetry": "1.0.6",
"extensions": {
"azure-iot": "0.10.13"
}
}
使用するテナントのAzure環境へのログイン
$ az login --tenant <tenant_id>
使用サブスクリプションを定義します
$ az account set --subscription '<サブスクリプション名>'
Azure Container Registry
ACR リソースグループの作成
$ az group create --resource-group $ACR_RES_GROUP --location japaneast
ACRのレジストリ作成
$ az acr create --resource-group $ACR_RES_GROUP --name $ACR_NAME --sku Standard --location japaneast
ACRログインサーバーアドレスの取得
$ ACR_LOGIN_SERVER=$(az acr list --resource-group $ACR_RES_GROUP --query "[].{acrLoginServer:loginServer}" --output tsv)
$ echo $ACR_LOGIN_SERVER
acr0ituru.azurecr.io
コンテナイメージの作成
作業ディレクトリ
$ tree
.
├── Dockerfile
├── opt
│ └── IoTSampleData-v5.py
└── requirements.txt
DockerFile
- ベースとなるイメージは slim を定義し、OSで必要な環境設定とネットワーク関連ツールを定義しておきます
- コンテナ化したい Python プログラムを optディレクトリ配下に配置しておき、Pythonプログラムに必要なライブラリを requirements.txt に定義しておきます
FROM python:3.8.3-slim
USER root
RUN apt-get update
RUN apt-get -y install locales && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim less
RUN apt-get install -y dnsutils iputils-ping net-tools procps netcat
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install -r requirements.txt
WORKDIR /opt/app
COPY ./opt/*.py /opt/app/.
requirements.txt
faker
kafka-python
pika
Docker イメージの作成
$ docker image build -t iotdatagen:5.0 .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
iotdatagen 5.0 7f1f883907a5 33 seconds ago 322MB
コンテナイメージのプッシュ
ACRへのログイン
$ az acr login --name $ACR_NAME
Login Succeeded
イメージをACRにプッシュ
$ docker tag iotdatagen:5.0 $ACR_LOGIN_SERVER/iotdatagen:5.0
$ docker push $ACR_LOGIN_SERVER/iotdatagen:5.0
イメージ詳細の確認
$ az acr repository show --name $ACR_NAME --repository iotdatagen
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"teleportEnabled": false,
"writeEnabled": true
},
"createdTime": "2021-09-02T01:16:44.2425619Z",
"imageName": "iotdatagen",
"lastUpdateTime": "2021-09-02T01:16:44.3255467Z",
"manifestCount": 1,
"registry": "acr0ituru.azurecr.io",
"tagCount": 1
}
イメージタグの確認
az acr repository show-tags -n $ACR_NAME --repository iotdatagen --output table
Result
--------
5.0
イメージ一覧の表示
$ az acr repository list --name $ACR_NAME --output table
まとめ
これで、Pythonプログラムをコンテナ化し、ACRに登録できることを確認しました
付録
イメージの削除
$ az acr repository delete --name $ACR_NAME --repository iotdatagen
Are you sure you want to delete the repository 'iotdatagen' and all images under it? (y/n): y
レジストリ サイズの管理
$ az acr show-usage --resource-group $ACR_RES_GROUP --name $ACR_NAME --output table
NAME LIMIT CURRENT VALUE UNIT
-------- ------------ --------------- ------
Size 107374182400 3165990677 Bytes
Webhooks 10 0 Count