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 --versionkomutunu ç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 buildgibi derleme adımınızıdocker buildkomutunu çalıştırmadan önce tamamlayın.distdizininin 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 .
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 |