Tüm Ürünler
Search
Belge Merkezi

Serverless App Engine:Görüntü oluşturma örneği

Son Güncelleme:Oct 06, 2026

SAE uygulamaları konteyner görüntüsü olarak çalıştırır. Mevcut bir görüntünüz yoksa aşağıdaki adımları izleyerek bir görüntü oluşturup bunu bir görüntü deposuna gönderebilirsiniz.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Docker yüklü ve çalışıyor olmalıdır. Doğrulama için docker --version komutunu çalıştırın.

  • Derlenmiş bir yapıt (JAR, PHP dosyaları, Python uygulaması veya statik varlıklar) içeren bir proje dizini.

Konteyner görüntüsü oluşturma ve gönderme

1. Adım: Dockerfile oluşturma

Proje dizininize gidin ve Dockerfile adında bir dosya oluşturun. Aşağıdaki örnekler Java, PHP, Python ve Node.js uygulamalarını kapsar.

Java

Dizin yapısı:

.
├── Dockerfile
├── target
│   └── my-app.jar        # Compiled JAR — only this and the Dockerfile are needed to build the image
├── src
│   └── ...
└── pom.xml

Dockerfile:

# Use an Alpine-based OpenJDK 8 image — Alpine keeps the image size small
FROM openjdk:8-jdk-alpine

# Copy the compiled JAR into the image root
COPY ./target/my-app.jar /

# Start the application when the container launches
ENTRYPOINT ["java", "-jar", "/my-app.jar"]
İpucu: Üretim ortamındaki Java uygulamaları için son görüntüyü hafif tutmak üzere çok aşamalı derlemeyi kullanabilirsiniz: Bir JDK aşamasında derleme yapıp yalnızca JAR dosyasını JRE içeren bir çalışma zamanı aşamasına kopyalayın.

PHP

Dizin yapısı:

.
├── Dockerfile
├── entrypoint.sh          # Startup script that launches PHP-FPM and Nginx
├── php
│   ├── index.php
│   └── phpinfo.php
├── nginx
│   ├── nginx.conf
│   ├── conf.d
│   │   └── default.conf
│   ├── fastcgi_params
│   └── ...

Dockerfile:

# Use an Alpine-based PHP-FPM image — PHP-FPM handles PHP processing, Nginx handles HTTP
FROM php:8.2-fpm-alpine

# Install Nginx into the same container to serve as the HTTP frontend
RUN apk add --no-cache nginx

# Copy Nginx configuration files
COPY nginx/ /etc/nginx/

# Copy PHP application files to the web root
COPY php/ /var/www/html/

# Copy and enable the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Başlangıç betiği (entrypoint.sh):

#!/bin/sh

# Start PHP-FPM in the background so Nginx can forward PHP requests to it
php-fpm -D

# Verify PHP-FPM started successfully before launching Nginx
if ! pgrep "php-fpm" >/dev/null
then
    echo "PHP-FPM failed to start!"
    exit 1
fi

# Run Nginx in the foreground — the container stays alive as long as Nginx runs
nginx -g "daemon off;"

Python

Dizin yapısı:

.
├── Dockerfile
├── entrypoint.sh
├── my_app
│   ├── requirements.txt
│   ├── main.py
│   └── my_package
│       ├── __init__.py
│       └── ...

Dockerfile:

# Use the official Python 3.9 image
FROM python:3.9

# Copy the application code into the image
RUN mkdir -p /my_app
COPY my_app/ /my_app/

# Install Python dependencies declared in requirements.txt
RUN pip install -r /my_app/requirements.txt

# Copy and enable the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Başlangıç betiği (entrypoint.sh):

#!/bin/sh

# Start the Flask app using Gunicorn with 3 worker processes, listening on port 8080
# Flask and Gunicorn are declared as dependencies in requirements.txt
gunicorn -w 3 -b 0.0.0.0:8080 my_app.main:app

Node.js

Bu örnek, statik varlıkların Nginx tarafından sunulduğu bir ön uç projesini kapsar.

Dizin yapısı:

.
├── Dockerfile
├── nginx-conf
│   ├── nginx.conf
│   ├── conf.d
│   │   └── default.conf
│   └── ...
├── package.json
├── src
│   └── ...
└── dist                   # Static files generated by your build step (e.g., npm run build)
    ├── index.html
    └── static
        └── ...

Dockerfile:

# Use Nginx 1.22 as the base image — it provides the startup command, so no ENTRYPOINT is needed
FROM nginx:1.22

# Copy the built static files to Nginx's default serving directory
COPY ./dist /usr/share/nginx/html/

# Copy your Nginx configuration files
COPY ./nginx-conf /etc/nginx/
npm run build gibi derleme adımınızı docker build komutunu çalıştırmadan önce tamamlayın. dist dizininin proje kök dizininde mevcut olması gerekir.

2. Adım: Görüntüyü oluşturma

docker build -t <image-name>:<image-tag> .

Örnek:

docker build -t my-app:1.0 .
Önemli

API anahtarları, parolalar veya erişim kimlik bilgileri gibi gizli bilgileri Dockerfile içinde ENV veya ARG kullanarak sabit kodlamayın. Derleme bağımsız değişkenleri aracılığıyla iletilen değerler görüntü geçmişinde görünebilir.

3. Adım: Görüntüyü bir depoya gönderme

Görüntüyü SAE'nin erişebileceği bir görüntü deposuna gönderin. Böyle bir deponuz yoksa Alibaba Cloud Container Registry (ACR) kullanabilirsiniz:

4. Adım: SAE'ye dağıtma

Görüntünüzün saklandığı yere göre dağıtım yöntemini seçin:

Senaryo Yöntem
Görüntü, aynı Alibaba Cloud hesabı altındaki ACR'de bulunuyor Aynı hesapta bulunan ACR görüntülerini kullanarak dağıtma
Görüntü, farklı bir Alibaba Cloud hesabı altındaki ACR'de bulunuyor Hesaplar arası ACR görüntülerini kullanarak dağıtma
Görüntü, ACR dışı bir depoda bulunuyor ACR dışı bir depodaki görüntüleri kullanarak dağıtma