概要
この記事 から始まる3つのステップで稼働させた一連のローカルDockerコンテナアプリのイメージを Azure Container Registry(ACR)にプッシュするまでの手順を説明します。
ローカル環境
macOS Big Sur 11.3
python 3.8.3
事前準備
この記事 を参考にして、AKS と ACR を構築していること。
コンテナイメージのプッシュ
Docker環境での動作確認
この記事 にあるように、ローカルのIoTデータ生成プログラムからのデータがGrafanaでリアルタムに表示されることを確認します。この状態のイメージを使用していきます(「docker-compose stop」の実行)。
コンテナIDの取得
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b244ceea916e confluentinc/cp-enterprise-control-center:6.0.0 "/etc/confluent/dock…" 2 hours ago Exited (143) 37 seconds ago control-center
05b3be2d1261 confluentinc/cp-ksqldb-cli:6.0.0 "/bin/sh" 2 hours ago Exited (0) 38 seconds ago ksqldb-cli
bac53178ec6a confluentinc/cp-ksqldb-server:6.0.0 "/etc/confluent/dock…" 2 hours ago Exited (143) 34 seconds ago ksqldb-server
4463b1c854a3 cp-connect-base:latest "/etc/confluent/dock…" 2 hours ago Exited (143) 32 seconds ago connect
93339b96092d confluentinc/cp-schema-registry:6.0.0 "/etc/confluent/dock…" 2 hours ago Exited (143) 30 seconds ago schema-registry
94f49390c759 confluentinc/cp-server:6.0.0 "/etc/confluent/dock…" 2 hours ago Exited (137) 18 seconds ago broker
d74cf86680bb grafana/grafana "/run.sh" 2 hours ago Exited (0) 38 seconds ago grafana
21167621d7e3 confluentinc/cp-zookeeper:6.0.0 "/etc/confluent/dock…" 2 hours ago Exited (143) 15 seconds ago zookeeper
5075946da389 rabbitmq:3.8.17-management "docker-entrypoint.s…" 2 hours ago Exited (0) 32 seconds ago rabbitmq
aaaf61e234c6 influxdb:1.8.6 "/entrypoint.sh infl…" 2 hours ago Exited (0) 36 seconds ago influxdb
ACRログインサーバーアドレスの取得
$ ACR_LOGIN_SERVER=$(az acr list --resource-group $ACR_RES_GROUP --query "[].{acrLoginServer:loginServer}" --output tsv)
$ echo $ACR_LOGIN_SERVER
acr0ituru.azurecr.io
ACR ログインサーバアドレスでのコミット
$ docker commit 5075946da389 $ACR_LOGIN_SERVER/rabbitmq:3.8.17
$ docker commit d74cf86680bb $ACR_LOGIN_SERVER/grafana:8.0.6
$ docker commit aaaf61e234c6 $ACR_LOGIN_SERVER/influxdb:1.8.6
$ docker commit 4463b1c854a3 $ACR_LOGIN_SERVER/cp-connect-base:6.0.0
$ docker commit 94f49390c759 $ACR_LOGIN_SERVER/cp-server:6.0.0
$ docker commit b244ceea916e $ACR_LOGIN_SERVER/cp-control-center:6.0.0
$ docker commit 21167621d7e3 $ACR_LOGIN_SERVER/cp-zookeeper:6.0.0
$ docker commit bac53178ec6a $ACR_LOGIN_SERVER/cp-ksqldb-server:6.0.0
$ docker commit 05b3be2d1261 $ACR_LOGIN_SERVER/cp-ksqldb-cli:6.0.0
$ docker commit 93339b96092d $ACR_LOGIN_SERVER/cp-schema-registry:6.0.0
$ docker images | grep $ACR_LOGIN_SERVER
acr0ituru.azurecr.io/cp-connect-base 6.0.0 ab7c3ded2793 7 days ago 1.66GB
acr0ituru.azurecr.io/grafana 8.0.6 7a91cc35d504 7 days ago 212MB
acr0ituru.azurecr.io/cp-schema-registry 6.0.0 651bacf2cb5c 7 days ago 1.33GB
acr0ituru.azurecr.io/cp-ksqldb-cli 6.0.0 5c113d6adf2f 7 days ago 785MB
acr0ituru.azurecr.io/cp-ksqldb-server 6.0.0 0987ef6c7751 7 days ago 1.06GB
acr0ituru.azurecr.io/cp-zookeeper 6.0.0 23253e3dbc5c 7 days ago 721MB
acr0ituru.azurecr.io/cp-control-center 6.0.0 99971d18b95d 7 days ago 995MB
acr0ituru.azurecr.io/cp-server 6.0.0 1a00ecce9821 7 days ago 1.24GB
acr0ituru.azurecr.io/influxdb 1.8.6 2ff29d3611c4 7 days ago 308MB
acr0ituru.azurecr.io/rabbitmq 3.8.17 e99b3b21637f 7 days ago 324MB
ACRへのログイン(プッシュが失敗したときに)
$ az acr login --name $ACR_NAME
Login Succeeded
イメージをACRにプッシュ
$ docker push $ACR_LOGIN_SERVER/rabbitmq:3.8.17
$ docker push $ACR_LOGIN_SERVER/grafana:8.0.6
$ docker push $ACR_LOGIN_SERVER/influxdb:1.8.6
$ docker push $ACR_LOGIN_SERVER/cp-connect-base:6.0.0
$ docker push $ACR_LOGIN_SERVER/cp-server:6.0.0
$ docker push $ACR_LOGIN_SERVER/cp-control-center:6.0.0
$ docker push $ACR_LOGIN_SERVER/cp-zookeeper:6.0.0
$ docker push $ACR_LOGIN_SERVER/cp-ksqldb-server:6.0.0
$ docker push $ACR_LOGIN_SERVER/cp-ksqldb-cli:6.0.0
$ docker push $ACR_LOGIN_SERVER/cp-schema-registry:6.0.0
イメージ一覧の表示
$ az acr repository list --name $ACR_NAME --output table
Result
----------------------------
cp-connect-base
cp-control-center
cp-ksqldb-cli
cp-ksqldb-server
cp-schema-registry
cp-server
cp-zookeeper
grafana
influxdb
rabbitmq
まとめ
これで、Dockerイメージが全てACRに登録されました。
付録
イメージ詳細の確認
$ az acr repository show --name $ACR_NAME --repository rabbitmq
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"teleportEnabled": false,
"writeEnabled": true
},
"createdTime": "2021-07-30T00:41:56.1995854Z",
"imageName": "rabbitmq",
"lastUpdateTime": "2021-07-30T00:41:56.3674178Z",
"manifestCount": 1,
"registry": "acr0ituru.azurecr.io",
"tagCount": 1
}
イメージタグの確認
az acr repository show-tags -n $ACR_NAME --repository rabbitmq --output table
Result
--------
3.8.17
イメージの削除
$ az acr repository delete --name $ACR_NAME --repository rabbitmq
Are you sure you want to delete the repository 'rabbitmq' 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 3043966295 Bytes
Webhooks 10 0 Count
番外編
イメージを ACR に 直接build する方法
例)connect のコンテナイメージを ACR に build します
$ az acr build --registry $ACR_NAME --image cp-connect-base:latest docker/
<docker/Dockerfile>
FROM confluentinc/cp-server-connect-base:6.0.0
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-rabbitmq:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-influxdb:latest
超番外編
RabbitMQ - Management Plugin による JSON を用いた一括設定
起動時に JSON ファイルを読み込んで Queue などの作成・設定を一括で行う機能が Management Plugin に備わっています。
rabbitmqに接続します。該当ディレクトリに移動します。
$ docker exec -it rabbitmq /bin/bash
root@rabbitmq:/# apt-get update
root@rabbitmq:/# apt-get install vim
root@rabbitmq:/# cd /etc/rabbitmq
「rabbitmq.conf」に以下の設定を追加します。
/etc/rabbitmq/rabbitmq.conf
management.load_definitions = /etc/rabbitmq/cp_definitions.json
設定 JSON ファイル
cp_definitions.json
{
"rabbit_version": "3.8.17",
"rabbitmq_version": "3.8.17",
"product_name": "RabbitMQ",
"product_version": "3.8.17",
"users": [
{
"name": "hogehoge",
"password_hash": "fhjanfeodvyaer;85sdZzHvqyIWg9Yqpe3vtU8s5YTXWk27e",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator",
"limits": {}
}
],
"vhosts": [
{
"name": "/"
}
],
"permissions": [
{
"user": "guest",
"vhost": "/",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"topic_permissions": [],
"parameters": [],
"global_parameters": [
{
"name": "internal_cluster_id",
"value": "rabbitmq-cluster-id-rYaWHykqgYLbTdQoLsCYdQ"
}
],
"policies": [],
"queues": [
{
"name": "IoTHub",
"vhost": "/",
"durable": false,
"auto_delete": false,
"arguments": {}
}
],
"exchanges": [],
"bindings": []
}
「rabbitmq.conf」を確認します。
root@rabbitmq:/etc/rabbitmq# cat rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
default_pass = guest
default_user = guest
management.tcp.port = 15672
management.load_definitions = /etc/rabbitmq/cp_definitions.json