製作SAE應用鏡像的方式與您日常製作鏡像的方式沒有任何差異。如果您不熟悉如何製作鏡像,可以參考本文提供的樣本。
確保環境中已安裝並運行Docker,您可以通過執行
docker --version來驗證。進入專案所在路徑,建立名為
Dockerfile的檔案。不同語言的Dockerfile樣本如下。Java
假設目錄結構如下:
. ├── Dockerfile # 建立的Dockerfile檔案 ├── target │ ├── my-app.jar # 打包專案時產生的JAR包 ├── src # 構建鏡像僅與Dockerfile和jar包有關,與源碼和其他設定檔無關。 │ ├── ... ├── pom.xml則Dockerfile內容如下:
# 指定基礎鏡像,以openjdk 8為例 FROM openjdk:8-jdk-alpine # 將本地的jar包拷貝到鏡像中 COPY ./target/my-app.jar / # 設定啟動命令 ENTRYPOINT ["java", "-jar", "/my-app.jar"]PHP
假設目錄結構如下:
. ├── Dockerfile # 建立的Dockerfile檔案 ├── entrypoint.sh # 建立的容器啟動指令碼 ├── php │ ├── index.php │ └── phpinfo.php ├── nginx │ ├── nginx.conf │ ├── conf.d │ | ├── default.conf │ ├── fastcgi_params │ ├── ...則Dockerfile內容如下:
# 指定基礎鏡像,以PHP-FPM鏡像為例 FROM php:8.2-fpm-alpine # 安裝Nginx RUN apk add --no-cache nginx # 將 Nginx 設定檔複製到容器 COPY nginx/ /etc/nginx/ # 將 PHP 檔案複製到工作目錄 COPY php/ /var/www/html/ # 將本地啟動指令碼複製到鏡像,容器啟動時執行啟動指令碼 COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]啟動指令碼entrypoint.sh內容如下:
#!/bin/sh # 啟動 PHP-FPM 後台運行 php-fpm -D # 檢查 PHP-FPM 是否啟動成功 if ! pgrep "php-fpm" >/dev/null then echo "PHP-FPM failed to start!" exit 1 fi # 前台運行 Nginx nginx -g "daemon off;"Python
假設目錄結構如下:
. ├── Dockerfile # 建立的Dockerfile檔案 ├── entrypoint.sh # 建立的容器啟動指令碼 ├── my_app │ ├── requirements.txt │ ├── main.py │ ├── my_package │ | ├── __init__.py │ | ├── ...則Dockerfile內容如下:
# 指定基礎鏡像,以Python 3.9鏡像為例 FROM python:3.9 # 將本地python代碼複製到鏡像 RUN mkdir -p /my_app COPY my_app/ /my_app/ # 根據requirements.txt在鏡像中安裝依賴。 RUN pip install -r /my_app/requirements.txt # 將本地啟動指令碼複製到鏡像,容器啟動時執行啟動指令碼 COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]啟動指令碼entrypoint.sh內容如下:
#!/bin/sh # 本樣本通過Gunicorn啟動my_app/main.py中的app,app是一個Flask執行個體。其中,Flask、Gunicorn通過requirements.txt指定。 gunicorn -w 3 -b 0.0.0.0:8080 my_app.main:appNode.js
以通過Nginx部署前端專案為例,假設目錄結構如下:
. |- Dockerfile # 建立的Dockerfile檔案 |- nginx-conf # 存放Nginx設定檔 | |- nginx.conf | |- conf.d | | |- default.conf | |- ... |- package.json |- src | |- ... |- dist # 存放專案構建後產生的靜態資源檔案 | |- index.html | |- static | | |- ...則Dockerfile內容如下:
# 指定基礎鏡像 FROM nginx:1.22 # 複製本地的靜態資源檔案到容器環境的指定路徑 COPY ./dist /usr/share/nginx/html/ # 複製本地的Nginx設定檔到容器環境的指定路徑 COPY ./nginx-conf /etc/nginx/ # 沿用基礎鏡像中的啟動命令,無需額外設定構建鏡像:
docker build -t <鏡像名稱>:<鏡像tag> .(例如docker build -t my-app:1.0 .)將鏡像推送到鏡像倉庫。如果現有的鏡像倉庫不滿足需求,推薦使用阿里雲Container RegistryACR個人版或ACR企業版。
根據鏡像倉庫類型,選擇使用同帳號ACR執行個體的鏡像部署應用、使用不同帳號ACR執行個體的鏡像部署應用或使用非ACR執行個體的鏡像部署應用。