diff --git a/pages/serverless-functions/faq.mdx b/pages/serverless-functions/faq.mdx
index 1e5ee878bd..c0a26fb89f 100644
--- a/pages/serverless-functions/faq.mdx
+++ b/pages/serverless-functions/faq.mdx
@@ -39,6 +39,10 @@ Serverless Functions namespaces and Container Registry namespaces observe the fo
Scaling in Serverless Containers and Serverless Functions is handled automatically by the platform. When demand increases - more requests or events - the platform creates additional instances to handle the load. When demand decreases, instances that are not used anymore are removed. This ensures optimal performance without manual intervention.
+### How to migrate from Serverless Functions to Serverless Containers?
+
+Serverless Functions offers several runtimes and versions, in some cases more control is required or specific dependencies needs some runtime tuning, for these cases please read [How to migrate from Functions to Containers](/serverless-functions/how-to/migrate-to-serverless-containers.mdx).
+
## Offering and availability
### What runtimes are available on Serverless Functions?
diff --git a/pages/serverless-functions/how-to/migrate-functions-to-containers.mdx b/pages/serverless-functions/how-to/migrate-functions-to-containers.mdx
new file mode 100644
index 0000000000..5068a2368e
--- /dev/null
+++ b/pages/serverless-functions/how-to/migrate-functions-to-containers.mdx
@@ -0,0 +1,256 @@
+---
+meta:
+ title: How to move from Serverless Functions to Serverless Containers
+ description: Learn how to migrate your workloads from Scaleway Serverless Functions to Serverless Containers for greater control and flexibility.
+ dates:
+ validation: 2025-11-25
+ posted: 2025-11-25
+---
+import Requirements from '@macros/iam/requirements.mdx'
+
+
+Serverless Functions and Serverless Containers share the same architecture (based on Knative).
+When you deploy a Function, Scaleway simply injects your code into a pre-built container image.
+
+Migrating to Serverless Containers just means you take control of that container image creation yourself.
+
+
+
+## Understanding the differences
+
+Scaleway Serverless Functions allow you to quickly deploy snippets of code without worrying about anything but the business logic.
+
+* **Best for:** Webhooks, lightweight APIs, and glue code.
+* **Key benefit:** "Zero config" deployment—just paste your code and go.
+
+However, as your application grows, you face limitations regarding dependency management (e.g., needing system-level libraries like ffmpeg or specific C extensions), or complex build pipelines.
+
+This is where Serverless Containers can be more adapted.
+
+**Moving to Containers means:**
+
+* You take control of the "wrapping": Instead of Scaleway wrapping your code, you write a Dockerfile.
+* You gain flexibility: You can install any system library, use any language version, and control the exact OS environment.
+* Better portability: A containerized app can run on Scaleway, your local machine, or any other cloud provider without changing the code.
+
+## When to migrate to Serverless Containers?
+
+While Functions are excellent for "zero-config" deployments, Serverless Containers are the recommended choice when your project requirements expand.
+
+Consider migrating if:
+
+* **You need custom system dependencies:** Functions run in a managed environment. If your code requires specific system libraries (e.g., `ffmpeg`, `ImageMagick`, custom C-bindings) that are not present in the standard runtime, containers allow you to install them via the Dockerfile.
+
+* **You need full portability:** A Docker container is the industry standard for shipping code. By containerizing your application, you ensure it can run anywhere: on your local machine, on various Scaleway products, on Kubernetes clusters, or any other cloud provider, without changing a single line of code.
+
+* **You need a specific language version:** Serverless Functions support a specific list of runtimes (e.g., Node 22, Python 3.13). If you need an older version, a beta version, or a completely different language (like Java, Ruby, or .NET), Serverless Containers are the solution.
+
+* **You have a complex build pipeline:** If your application requires a compilation step, complex asset building, or private package managers, defining these steps in a `Dockerfile` gives you granular control over the build process.
+
+## Containerize your Serverless Function
+
+The main step in migrating is creating a `Dockerfile` that replicates the runtime environment your function was using.
+
+Below are standard `Dockerfile` templates for the main Serverless Functions runtimes. You can add this file to the root of your project (where your `handler` or `index` file is located).
+
+
+ Scaleway Serverless Containers inject a `PORT` environment variable (defaulting to `8080`). Your application must listen on this port to receive traffic.
+
+
+
+
+ Use this Dockerfile to migrate from the **Node.js 22** runtime.
+
+ ```dockerfile
+ # Use the official Node.js 22 Alpine image for a small footprint
+ FROM node:22-alpine
+
+ # Set the working directory
+ WORKDIR /usr/src/app
+
+ # Copy package files first to leverage Docker cache
+ COPY package*.json ./
+
+ # Install production dependencies
+ RUN npm ci --only=production
+
+ # Copy the rest of your application code
+ COPY . .
+
+ # Serverless Containers inject the PORT env var (default 8080)
+ ENV PORT 8080
+ EXPOSE 8080
+
+ # Start the application
+ CMD [ "node", "index.js" ]
+ ```
+
+
+
+ Use this Dockerfile to migrate from the **Python 3.13** runtime. We recommend using a WSGI server like Gunicorn for production.
+
+ ```dockerfile
+ # Use the official Python 3.13 slim image
+ FROM python:3.13-slim
+
+ WORKDIR /app
+
+ # Copy requirements and install dependencies
+ COPY requirements.txt .
+ RUN pip install --no-cache-dir -r requirements.txt
+
+ # Copy application code
+ COPY . .
+
+ # Define the default port
+ ENV PORT 8080
+ EXPOSE 8080
+
+ # Run the application using Gunicorn
+ # Replace 'main:app' with 'your_filename:your_flask_object'
+ CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
+ ```
+
+
+
+ Use this Dockerfile to migrate from the **Go 1.24** runtime. This uses a multi-stage build to keep the final image lightweight.
+
+ ```dockerfile
+ # --- Build Stage ---
+ FROM golang:1.24-alpine AS builder
+
+ WORKDIR /app
+
+ # Copy module files and download dependencies
+ COPY go.mod go.sum ./
+ RUN go mod download
+
+ # Copy source code
+ COPY . .
+
+ # Build the binary
+ RUN CGO_ENABLED=0 GOOS=linux go build -o my-function .
+
+ # --- Run Stage ---
+ FROM alpine:latest
+
+ WORKDIR /root/
+
+ # Copy the binary from the builder
+ COPY --from=builder /app/my-function .
+
+ # Install certificates for HTTPS calls
+ RUN apk --no-cache add ca-certificates
+
+ ENV PORT 8080
+ EXPOSE 8080
+
+ CMD ["./my-function"]
+ ```
+
+
+
+ Use this Dockerfile to migrate from the **Rust 1.74** runtime.
+
+ ```dockerfile
+ # --- Build Stage ---
+ FROM rust:1.85-slim as builder
+
+ WORKDIR /usr/src/app
+
+ # Create a new empty shell project
+ RUN USER=root cargo new --bin my-app
+ WORKDIR /usr/src/app/my-app
+
+ # Copy manifests
+ COPY Cargo.toml Cargo.lock ./
+
+ # Build only the dependencies to cache them
+ RUN cargo build --release
+
+ # Remove the dummy source
+ RUN rm src/*.rs
+
+ # Copy your actual source code
+ COPY ./src ./src
+
+ # Build for release
+ RUN rm ./target/release/deps/my_app*
+ RUN cargo build --release
+
+ # --- Run Stage ---
+ FROM debian:bookworm-slim
+
+ # Install OpenSSL if required
+ RUN apt-get update && apt-get install -y libssl-dev ca-certificates && rm -rf /var/lib/apt/lists/*
+
+ COPY --from=builder /usr/src/app/my-app/target/release/my-app /usr/local/bin/my-app
+
+ ENV PORT 8080
+ EXPOSE 8080
+
+ CMD ["my-app"]
+ ```
+
+
+
+ Use this Dockerfile to migrate from the **PHP 8.4** runtime.
+
+ ```dockerfile
+ # Use the official PHP 8.4 Apache image
+ FROM php:8.4-apache
+
+ WORKDIR /var/www/html
+
+ # Copy application source
+ COPY . .
+
+ # Configure Apache to listen on the Scaleway PORT env var
+ RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf
+
+ # Install required extensions (Example)
+ # RUN docker-php-ext-install pdo pdo_mysql
+
+ ENV PORT 8080
+ EXPOSE 8080
+
+ CMD ["apache2-foreground"]
+ ```
+
+
+
+## Build and push the image
+
+Once your `Dockerfile` is ready, you need to build the image and push it to your Scaleway Container Registry.
+
+1. Log in to your registry:
+ ```bash
+ docker login rg.fr-par.scw.cloud/your-namespace -u nologin --password-stdin <<< "$SCW_SECRET_KEY"
+ ```
+2. Build the image:
+ ```bash
+ docker build -t my-migrated-function:latest .
+ ```
+3. Tag and push the image:
+ ```bash
+ docker tag my-migrated-function:latest rg.fr-par.scw.cloud/your-namespace/my-migrated-function:latest
+ docker push
+ ```
+
+Refer to the [dedicated documentation](/serverless-containers/how-to/build-push-container-image/) for more information on how to build and push images to the Scaleway Container Registry.
+
+## Deploy to Serverless Containers
+
+1. Navigate to **Serverless Containers** in the [Scaleway console](https://console.scaleway.com).
+2. Click **Deploy container**.
+3. Select **Scaleway Container Registry** and choose the image you just pushed (`my-migrated-function`).
+4. Set the **Port** to `8080` (or match the `PORT` environment variable in your Dockerfile).
+5. Set the same resources (vCPU/RAM) and scaling parameters (min/max scale) as your original function.
+6. Click **Deploy**.
+
+Your code is now running as a Serverless Container, giving you the freedom to modify the OS, install binaries, and manage complex dependencies exactly as you need.
+
+## Additional content
+
+For advanced usage, such as larger projects with dependencies, automation, and more, check out our [GitHub repository](https://github.com/scaleway/serverless-examples) for more examples.
+
diff --git a/pages/serverless-functions/reference-content/functions-runtimes.mdx b/pages/serverless-functions/reference-content/functions-runtimes.mdx
index 98805184bd..f72aae6420 100644
--- a/pages/serverless-functions/reference-content/functions-runtimes.mdx
+++ b/pages/serverless-functions/reference-content/functions-runtimes.mdx
@@ -15,6 +15,10 @@ We currently support five languages:
* PHP
* Rust
+
+ For more flexible runtime management and dependencies, check [How to migrate from Functions to Containers](/serverless-functions/how-to/migrate-to-serverless-containers.mdx).
+
+
## Runtime lifecycle
New runtimes are added periodically, based on user demand.
@@ -192,4 +196,3 @@ Supported PHP extensions for the [PHP 8.4](https://www.php.net/ChangeLog-8.php#P
| xmldiff | ✓ | xmlreader | ✓ | xmlrpc | ✓ | xmlwriter | ✓ |
| xsl | ✓ | yac | ✓ | yaml | ✓ | Zend OPcache | ✓ |
| zephir_parser | ✓ | zip | ✓ | zlib | ✓ | zstd | ✓ |
-