全部產品
Search
文件中心

Serverless App Engine:製作鏡像樣本

更新時間:Jul 04, 2025

製作SAE應用鏡像的方式與您日常製作鏡像的方式沒有任何差異。如果您不熟悉如何製作鏡像,可以參考本文提供的樣本。

  1. 確保環境中已安裝並運行Docker,您可以通過執行docker --version來驗證。

  2. 進入專案所在路徑,建立名為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:app

    Node.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/
    
    # 沿用基礎鏡像中的啟動命令,無需額外設定
  3. 構建鏡像:docker build -t <鏡像名稱>:<鏡像tag> .(例如docker build -t my-app:1.0 .

  4. 將鏡像推送到鏡像倉庫。如果現有的鏡像倉庫不滿足需求,推薦使用阿里雲Container RegistryACR個人版ACR企業版

  5. 根據鏡像倉庫類型,選擇使用同帳號ACR執行個體的鏡像部署應用使用不同帳號ACR執行個體的鏡像部署應用使用非ACR執行個體的鏡像部署應用