---
# System prepended metadata

title: Azure Registry Container

---

# Azure Registry Container

## 前言
對於docker有了初步的認識後，接著我們又會遇到一些困難，image一個一個建立，那麼多的image要怎麼管理啊？又或是當我真的要部署網站的時候，要從哪裡去抓，總是不可能要一直開著電腦的docker環境吧？這時候Registry就出現啦！


## 什麼是Regristry?
Regristry簡單來說就是一個存放image的資料庫，為了方便管理以及落實DevOps，當然也可以讓CI/CD變得更加容易。

### 為什麼需要？
舉個例子，當你寫好一個支程式，使用docker build在本地端建立一個image，如果別人要run你寫好的image怎麼辦？如果對方又到github 上下載程式碼在自己docker build一次，不就浪費的docker的本意嗎
這時候Regristry就非常重要了，我們可以選擇使用docker push將image上傳到docker hub，因為docker執行的時候會先去docker hub找有沒有對應的image沒有才會去本地端找，如此一來，就算很多人要一起開發系統，或是遠端server要部署網站，都可以借助Regristry的幫助，達到更高的開發效率。
![](https://hackmd.io/_uploads/HJUV1ru-T.png)



### 常見的雲端Registry
- DockerHub
- Google Container Registry (GCR)
- AWS Elastic Container Registry (ECR)
- Azure Container Registry (ACR)

### DockerHub不好嗎？
當然沒有問題，DockerHub就像是docker的github可以放很多的image，不過預設都是public需要付費才能解鎖privacy，如果你的image是公司要用的又或是不想要給大家看到，還是需要付費才行。

此外安全性上，三家雲端廠商會有更好安全性還有使用者訪問的權限控制，可以更加方便管控誰可以push和pull不同的image，以私人的image來說，同樣都是要花錢，個人是覺得購買這些雲端服務的Container Registry 會更好一些啦ＸＤ


## 實作
本篇主要教大家的實作是建立Microsoft底下的Azure Container Registry，並推送image上去

1. 第一步當然是登入Azure portal介面，選擇container registry
![](https://hackmd.io/_uploads/SJIz4SO-p.png)

2. 只要輸入registry名稱和選擇group基本上就可以了，如果有特殊需求的話可以選擇不同的pricing plan，最後按下create
![](https://hackmd.io/_uploads/rkdwVHdZp.png)

3. 接著就可以看到建立好的畫面，會看到standard就有100G的容量，點擊右下角的Repositories
![](https://hackmd.io/_uploads/rJJ9SSuba.png)

4. 進入Repo後會看到空空如也的資料庫
![](https://hackmd.io/_uploads/Sy2RHrObT.png)

5. 點擊Access Key，將Admin user打勾，就會出現下方兩組密碼，這個密碼之後登入上傳會用到

![](https://hackmd.io/_uploads/SJdu_SuZp.png)


6. 安裝[Azure-cli](https://learn.microsoft.com/zh-tw/cli/azure/install-azure-cli)，請到網站上下載對應作業系統的檔案，之後上傳的指令都是在azure-cli底下的指令所以一定要先安裝

7. 接著打開寫好的程式碼，建立image，我使用
    > docker build -t acrtest . 

    建立一個名為acrtest的image
    ![](https://hackmd.io/_uploads/H12DDHO-p.png)


8. 建立好之後在終端機按照順序輸入
    ```bash=
    #登入azure
      az login 
    #登入acr 如果需要密碼就輸入第五步驟得到的密碼
      az acr login --name <registry-name>
    #標記印象檔 docker tag <image-name> <login-server>/<image-name>:tag
      docker tag acrtest reactdemotest.azurecr.io/arctest:latest
    #推送上Registry
      docker push reactdemotest.azurecr.io/arctest:latest 
    ```
    ![](https://hackmd.io/_uploads/SyBBeLOZp.png)


9. 最後回到ACR檢查image有沒有推送成功，就大功告成啦～
 ![](https://hackmd.io/_uploads/rkdDg8O-T.png)


## 總結
ACR除了可以跨環境 (包括 Azure Kubernetes Service 和 Azure Red Hat OpenShift) 和跨 Azure 服務 (例如 App Service、Machine Learning 及 Batch) 來連線。還有許多不同的功能，包括人員的權限控制，或是在registry中建立不同的repo以便管理等等，想要學習更多可以直接參考[官方的文件](https://learn.microsoft.com/zh-tw/azure/container-registry/container-registry-concepts)

總之快點投入ACR的懷抱吧！
![](https://hackmd.io/_uploads/Skzf1UO-a.png)

## 參考
- [官方文件](https://azure.microsoft.com/zh-tw/products/container-registry)
- [快速入門：使用 Azure 入口網站建立 Azure Container Registry](https://learn.microsoft.com/zh-tw/azure/container-registry/container-registry-get-started-portal?tabs=azure-cli)
- [開始使用 Azure CLI](https://learn.microsoft.com/zh-tw/cli/azure/get-started-with-azure-cli)
- [100 Days of Cloud – Day 85: Security for Azure Containers](https://michaeldurkan.com/2022/05/07/100daysofcloud-day85-securityforazurecontainers/)
