1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonプログラムを Dockerコンテナ化して Azure Container Registry (ACR) にプッシュしました

Last updated at Posted at 2021-09-02

概要

手元にある Pythonプログラムをコンテナ化し、コンテナレジストリ(ACR)にプッシュする手順を簡単に説明しています

ローカル環境

macOS Big Sur 11.3
python 3.8.3
Docker version 20.10.7, build f0df350

前提条件

  1. Azure環境がすでに用意されていること(テナント/サブスクリプション)。
  2. ローカル環境に「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
1
1
1

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?