我试着将本地的 Docker 镜像推送到 Azure 容器注册表(ACR)中
简要概括

本地环境
macOS Big Sur 11.3: 苹果操作系统的最新版本,代号为Big Sur 11.3。
python 3.8.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
显示图像列表
(Shì
$ 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的方法
将连接的容器映像构建到 ACR。
$ 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文件并批量创建和设置队列等功能。
我要连接到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」中添加以下配置。
management.load_definitions = /etc/rabbitmq/cp_definitions.json
设置 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