Morph allows you to customize the runtime environment on Morph Cloud by editing the Dockerfile in your project.

Default Dockerfile Structure

The Dockerfile generated by the morph new command is structured as follows:

The reserved word MORPH_TASK_ROOT is a required environment variable for pip install to function correctly. Unless you have a specific reason, do not modify it.

# Base image for Morph Cloud
FROM public.ecr.aws/i1l4z0u0/morph-data:python3.9

# Set working directory
WORKDIR /var/task

# Install Python dependencies with poetry
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt --target "${MORPH_TASK_ROOT}"

# Copy source code and dependencies
COPY . .

# Command to run the Lambda function
CMD ["python", ".morph/core/morph/api/app.py"]

Adding Packages

You can add any OS-level packages you need by updating your project’s Dockerfile. Morph Cloud base images are built on Debian Linux. Package installation can be done using the apt-get command.

For example, to install the curl package using apt-get:

To reduce the final image size, we recommend running apt-get clean after installing packages to remove unnecessary files.

# Base image for Morph Cloud
FROM public.ecr.aws/i1l4z0u0/morph-data:python3.9

# Set working directory
WORKDIR /var/task

# Install OS-level dependencies
RUN apt-get update && apt-get install -y \
    curl \
    && apt-get clean

Changing the Python Version

When you create a project with the morph new command, you can choose from Python 3.9, 3.10, 3.11, or 3.12.

The version you select is reflected in the automatically generated configuration files so that the deployed application uses the same Python version.

morph new my_project

# Follow the interactive prompt to choose a Python version

The chosen Python version is also reflected in the project’s configuration files (like the Dockerfile), which you can further customize as needed.

Changing the Python Version After Deployment

If you need to change the Python version for your deployed environment later, update the base image tag in your project’s Dockerfile and redeploy.

Example: Using the Python 3.12 image

FROM public.ecr.aws/i1l4z0u0/morph-cloud:python3.12

-- truncated --

In this way, you can switch from python3.9 to any other version supported by Morph.