本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
SAE底層基于Kubernetes,因此對于可以執行docker run
命令的鏡像或者能部署到Kubernetes的鏡像,都可以直接在SAE中運行。本文介紹在SAE中運行鏡像的主要考慮方面,包括如何選擇鏡像服務、鏡像倉庫、設置鏡像Tag與部署鏡像,以及如何查看修改鏡像啟動命令與配置文件等。
在SAE上部署無狀態的服務
雖然SAE在理論上能部署任意鏡像,但還是推薦在SAE部署無狀態的鏡像服務,主要原因如下:
網絡層面:SAE中的容器隨時可以被銷毀(主動部署觸發或者底層物理機騰挪觸發等),并拉起新的容器(IP發生變化)。因此,如果您的服務強依賴于容器的固定IP或者容器的順序,就不適合部署在SAE,或者只能部署一個單容器用作簡單的測試,不用于生產環境。如果是對外需要固定IP,可以通過綁定私網或者公網SLB解決。
持久化存儲層面:因為容器隨時可以被銷毀,拉起新的容器,之前容器上存儲的數據都會丟失,所以如果只是部署單個容器則需要將持久化的目錄掛載到NAS。具體操作,請參見設置NAS存儲;如果是部署多個有狀態的容器加上需要共享存儲,則無法在SAE部署。
若在SAE上部署有狀態服務,您需要自行驗證服務的高可用和容災能力,SAE不承諾SLA。
選擇鏡像類型
鏡像倉庫
ACR鏡像倉庫(推薦)
推薦采用阿里云容器鏡像服務ACR,分個人版實例與企業版實例。更多信息,請參見個人版和企業版。如果您采用ACR,那么在SAE可以直接選擇您同一個阿里云賬號內的鏡像部署。
Docker Hub鏡像倉庫
部分用戶可能需要直接采用Docker Hub中的鏡像,以nginx鏡像為例,如果您期望部署nginx 1.23.1版本的鏡像,則在SAE的公有鏡像頁簽內直接填入該鏡像地址。
鏡像地址如下:
將完整鏡像地址填入SAE:
重要SAE默認部署在VPC網絡內,拉取公網鏡像需要能訪問公網,則需要在私網內開通NAT來訪問公網。
自建鏡像倉庫
對于自建鏡像倉庫的情況,如果您想要拉取鏡像并配置在公有鏡像頁簽內,需要確保該鏡像能夠公網公開訪問,并且限制SAE的出口IP。請加入釘群(釘群號:32874633),聯系阿里云研發團隊獲取SAE的出口IP。
鏡像Tag
開發者可能會因為方便而直接使用latest
版本的鏡像部署,包括每次打包新版代碼也會直接覆蓋latest
版本的鏡像,但是在SAE中如果使用latest
版本的鏡像會遇到無法回滾、無法拉取到最新版本的鏡像等問題,因此建議您在SAE中部署有版本意義的鏡像Tag,例如時間戳。
部署docker run
的鏡像
docker run
的參數和SAE的支持如下:
| SAE支持 |
| 無需設置該參數,在SAE中天然作為一個獨立容器運行。 |
| 無需設置該參數,SAE有Webshell能力可以直接進入容器。 |
| 無需設置該參數,SAE容器端口即為進程端口。 |
| 不支持設置或修改,SAE會為每個容器分配唯一的 |
| 在SAE中可以通過掛載/etc/resolv.conf文件配置DNS。 |
| 在SAE控制臺配置環境變量即可。具體操作,請參見設置環境變量。 |
| 無需設置該參數,SAE使用阿里云VPC網絡。 |
| |
| 在SAE中可以掛載NAS、OSS、ConfigMap。 |
查看鏡像的啟動命令
方式一:docker image inspect
docker image inspect nginx:1.23.1 [ { "Container": "5f19bc2cd794cd60ec845cbed7a60c85003dc56f26ee807f9eea2480bc46****", "ContainerConfig": { ... "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"nginx\" \"-g\" \"daemon off;\"]" ], "Entrypoint": [ "/docker-entrypoint.sh" ], ... }, "Config": { ... "Cmd": [ "nginx", "-g", "daemon off;" ], "Entrypoint": [ "/docker-entrypoint.sh" ], }, } ]
方式二:查看文檔
通常鏡像文檔中,可以看到當前鏡像的啟動命令,以nginx1.23.1版本的鏡像為例。
關于鏡像中的Entrypoint和CMD設置組合的實際運行效果,請參見官方說明文檔。
在SAE中修改鏡像的啟動命令
如果鏡像有公開文檔,建議您先閱讀文檔。當前很多鏡像都提供了可配置的環境變量,因此無需修改鏡像啟動命令。以nginx鏡像為例,支持的環境變量如下:
如果開放的環境變量較少,或者您有一些定制需求,確實需要修改鏡像的啟動命令(比如增加一些參數),那么通過底層基于Kubernetes的SAE,可以設置Command和Args來完全覆蓋鏡像的啟動命令。具體操作,請參見設置鏡像部署應用的啟動命令。
Nginx
PHP(執行多個命令)
修改鏡像內的配置文件
除了修改鏡像的啟動命令,還有部分場景是修改鏡像內的配置文件,比如典型的就是nginx.conf
。可以使用SAE的注入配置信息能力,后續修改配置文件后,重新部署應用即可。更多信息,請參見注入配置信息。
調試鏡像
部署鏡像的過程中可能會出現一直無法啟動或者啟動以后不符合預期等問題,請參見常見問題索引嘗試解決。如果仍然無法解決問題,請加入釘群(釘群號:32874633),聯系阿里云研發團隊。