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

简要概括

image.png

本地环境

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
bannerAds