To work with codeocean and execute programming and automatic grading tasks custom docker images are used that serve file copy/paste and logging functionality customized for codeocean. 
The images are built from the Dockerfiles in their example https://github.com/openHPI/dockerfiles repository.

The following images are used by CodeOcean:
//tabelle
[cols="2,2",options="header"]
|===
|Image | Version |
co_execenv_java | 8 |
co_execenv_julia | 1.8/1.10 |
co_execenv_node | 0.12 |
co_execenv_python | 3.4-rpi-web; 3.4; 3.7-ml; 3.8 |
co_execenv_r | 4 |
co_execenv_ruby | 2.5 |
docker_exec_phusion | |
ubuntu-base | Old ubuntu images no longer in use |
ubuntu-coffee | |
ubuntu-cpp | |
ubuntu-exec | |
ubuntu-jruby | |
ubuntu-python | |
ubuntu-sinatra | |
ubuntu-sqlite | |
|===

Supported images

- docker_exec_phusion: Base image for all execution environments
- co_execenv_<langauge>: An image used by CodeOcean for the specific programming language and version

All supported images are built for the following architectures:

- amd64
- arm64

To create own images, the Dockerfiles can be used as a template. The repository contains a `Dockerfile` for each supported language and version. The Dockerfiles are based on the `docker_exec_phusion` image and install the necessary dependencies for the respective language. The Dockerfiles also contain the necessary configuration for the CodeOcean environment.

For example the `Dockerfile` for the Java 17 image looks like this:

[source,docker]
----
FROM openhpi/docker_exec_phusion
MAINTAINER openHPI Team <openhpi-info@hpi.de>
LABEL description='This image provides a Java 17.0 environment with JUnit 5 support.'
LABEL run_command='make run'
LABEL test_command='make test CLASS_NAME="%{class_name}" FILENAME="%{filename}"'

# Get target architecture from Docker buildx
ARG TARGETARCH

# Install latest OpenJDK version 17.0
RUN install_clean openjdk-17-jdk make

# Add JUnit 5 Platform
ARG JUNIT_VERSION=1.11.0
RUN mkdir -p /usr/java/lib
RUN curl -fsSL -O --output-dir /usr/java/lib https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/$JUNIT_VERSION/junit-platform-console-standalone-$JUNIT_VERSION.jar

# Adjust Path variables
ENV JAVA_HOME /usr/lib/jvm/java-17-openjdk-$TARGETARCH
ENV JUNIT /usr/java/lib/junit-platform-console-standalone-$JUNIT_VERSION.jar
ENV CLASSPATH .:$JUNIT
----