如何利用在Azure上的Azure Web App部署一個Docker容器

前言

相信在看這篇文章之前,已經先看過這篇文章了。從前一篇文章,我們可以得知該如何利用Azure Web App上部署的方法把我們的專案部署上去。

可是,這個沒辦法滿足下列的要求

  • 以PHP環境來說,預設在Azure Web App上的環境是PHP + Apache,那如果我們要PHP + Nginx呢?
  • Azure Web App部署上去會觸發Azure所客製的部署引擎Kudu,若不熟悉腳本語言,還需要再花額外的時間去學習

為了要解決上述的問題,Azure Web App提供另一項的部署方式,那就是用Docker container方式,透過編寫的Dockerfile或docker-compose.yml方式,Azure Web App會在部署的時候讀取它們並部署成一個container,即是一個容器為一個Web App Service的概念。

本文章,就是要使用Azure Web App並透過載入Docker 映像來達到部署Web App Service。

登入Azure portal

首先,先登入Azure portal,Web方式管理Azure雲端運算平台的服務。

接著,在利用Docker container部署一個Azure Web App之前,需要將我們需要用到的Docker 映像發怖到網路上的平台,因為Azure Web App用Docker容器部署的時候,可以接受以下幾種方式:

  • 從外部Docker Hub載入
  • 從Azure Container Registry載入
  • 快速入門
  • 私人存放Docker映像檔server

本章節中,我們只使用「Azure Container Registry」這種方式載入我們所需要的Docker映像檔。原因是因為:

  • 我們需要建立一個Docker私人映像檔
  • 客製化Docker映像,因此快速入門所預設好的映像不適合這次的文章要求
  • 我們沒有私人存放Docker映像檔的server,因此此方法也不適合
  • Azure Container登錄,就是在Azure雲端運算平台上面建立一個私人的Docker Hub,透過它可以在Azure Web App部署的時候指定來源的Docker映像,進而達到部署的效果

我們在上圖中的「搜尋資源,服務及文件的地方」輸入「容器登錄」就可以得到如下的截圖:

因為我在之前有建立一個Docker容器登錄的位址,因此截圖上有出現在清單中,接著按下「新增」,就會看到下面的截圖:

就先取好自己的Docker container Registry名字,還有其他選項,如下圖所示:

都確認之後,接著按下「建立」的按鈕,就會開始建立Azure Container Registry位置了。

建立完成之後,在清單中就會看到剛剛建立的Azure Container Registry了。

點擊剛剛所建立好的容器登錄。

就會看到這樣的截圖如下:

點擊「存取金鑰」並把管理使用者「啟用」,這樣就可以允許Azure Web App在部署的時候去存取此Azure Container Registry上的Docker映像了。

接著,打開終端機,假設已經把「az」安裝好了(若沒有安裝,請先讀這篇文章),我們可以輸入如下的指令進行登入:


az acr login --name=your-acr-name

登入成功後,會出現下列的訊息


Login Succeeded

接下來,就可以把本地建置好的Docker映像發怖到我們先前所建立好的Azure Container Registry了

我們先標記目前的Docker映像的版本,這樣在Azure Container Registry上選擇版本的時候更加容易,可以利用下面的指令來達成


docker tag database-adminer your-acr-name.azurecr.io/database-adminer:v1

database-adminer是我在本地端Docker映像檔的名稱,而「your-acr-name」是之前步驟建立Azure Container Registry的名稱。

建立好標籤之後,接著再用下面的指令將本地端的Docker映像傳輸到先前所建立的Azure Container Registry。


docker push multidbp.azurecr.io/database-adminer:v1

都建立完成之後,回到Azure Container Registry頁面並點選「存放庫」可以發現剛剛所建立的Docker映像已經在上面了,如下截圖:

接著點選進去,就可以看到目前推送上去所有的的標籤清單了

我們完成了Docker映像的推送後,接下來可以用Azure Web App部署了

首先,我們先進到如下圖的「Azure Web應用程式」頁面並再新增一個新的Web應用程式,選擇相關的選項如下圖:

在圖中我們可以得知,我們取一個Web App名字叫做「database-adminer-docker」並把部署方式選擇「Docker映像」,其他選項都用與之前文章相同即可。接著點選「下一步:Docker」,就會到下面的截圖:

我們選擇「單一容器」,映像來源選擇「Azure Container Registry」,接著選擇登錄容器的名稱,映像以及標籤版本,啟動命令留下空白,這裡是因人而異,原因是因為我們在「Dockerfile」裡面已經有明確的指定要執行的指令,因此不需要再額外輸入需要執行指令。

接著就「下一步 標籤」再接著按「下一步 檢閱及建立」,最後就按下「建立」,如下截圖。

接著就跑起來了,如下截圖:

參考資料

  • https://docs.microsoft.com/zh-tw/azure/app-service/containers/tutorial-custom-docker-image
  • https://blog.miniasp.com/post/2015/05/04/Intro-Azure-Web-App-Kudu-engine
  • 文章所使用到的專案:https://github.com/peter279k/database-adminer