Container
A Container resource lets you create and configure Docker containers that make up your lab environment. Containers provide the compute layer of your sandbox, allowing you to run applications, services, and tools that participants will use during hands-on exercises.
Through the UI, you can define container settings such as the image, startup commands, exposed ports, and environment variables, all without needing to write configuration files. You can also connect containers to networks, manage how they interact within the lab, and make them accessible through terminal tabs for users to interact with directly.
Containers make it easy to design flexible, interactive environments that replicate real-world systems and support a wide range of lab scenarios.
Creating a Container resource
Section titled “Creating a Container resource”Container resources can be created in the Sandbox tab. To create a new Container resource, navigate to the Sandbox tab and click the + button. Select Container from the dropdown menu.
Start by naming the container. Note that this is an internal name. You can assign a variety of settings to your container, but you also have the option to use a preset. Presets are pre-configured images for common container setups that can help you get started quickly. You can choose a preset from the Select preset dropdown menu:
Alternatively, you can select your own public or private image. By selecting “Add a new public or private image on GCP” you can add a custom image in the input.
Editing a container resource
Section titled “Editing a container resource”To edit a container resource, you can select it from the list of existing sandboxes in the Sandbox tab. Click on the container you want to edit, make your changes in the configuration panel, and then click Add changes to save your updates. See Editing & Publishing for how changes are reviewed and published.
Form sections
Section titled “Form sections”The container form is organized into collapsible sections. The Image and Resources sections are expanded by default. All other sections are collapsed and can be expanded by clicking on them.
1. Image (expanded by default)
Section titled “1. Image (expanded by default)”| Field | Required? | Default | Description |
|---|---|---|---|
| Image | ✓ | Docker image for the container |
Selecting a custom image, rather than a preset, also reveals Username and Password fields for pulling from a private registry.
2. Network (collapsed, optional)
Section titled “2. Network (collapsed, optional)”You can attach a container to one or more networks. Each attachment has its own set of fields:
| Field | Required? | Default | Description |
|---|---|---|---|
| ID | ✓ | Select the network to attach the container to | |
| IP Address | Static IP address for the container on that network | ||
| Aliases | Alternate names for the container on that network |
3. Resources (expanded by default)
Section titled “3. Resources (expanded by default)”| Field | Required? | Default | Description |
|---|---|---|---|
| CPU Limit | 1000 |
CPU limit for the container | |
| Memory Limit | 256 |
Memory limit in MB | |
| Disk Limit | Disk space limit in MB | ||
| CPU Pinning | Pin the container to one or more CPU cores | ||
| GPU Driver | GPU driver for the container | ||
| GPU Device IDs | GPU device IDs for the container | ||
| Max Restart Count | Maximum restart attempts (-1 for unlimited, 0 to disable restarts) |
4. Entrypoint & Command (collapsed)
Section titled “4. Entrypoint & Command (collapsed)”| Field | Required? | Default | Description |
|---|---|---|---|
| Entrypoint | Override the default entrypoint | ||
| Command | Command to run in the container |
This section also includes a Run As group to override the user and group the container runs as:
| Field | Required? | Default | Description |
|---|---|---|---|
| User | Username or user ID to run the container as | ||
| Group | Group name or group ID to run the container as |
Leave both fields empty to use the default user defined in the container image.
5. Environment Variables (collapsed)
Section titled “5. Environment Variables (collapsed)”| Field | Required? | Default | Description |
|---|---|---|---|
| Environment Variables | Key-value pairs for environment variables |
6. Labels (collapsed)
Section titled “6. Labels (collapsed)”| Field | Required? | Default | Description |
|---|---|---|---|
| Labels | Key-value pairs set on the container |
7. DNS Servers (collapsed)
Section titled “7. DNS Servers (collapsed)”| Field | Required? | Default | Description |
|---|---|---|---|
| DNS Servers | Custom DNS servers for the container |
8. Port (collapsed)
Section titled “8. Port (collapsed)”Each port entry supports the following fields:
| Field | Required? | Default | Description |
|---|---|---|---|
| Local Port | ✓ | Port the app listens on inside the container | |
| Host Port | Optional host port to bind | ||
| Protocol | tcp |
Protocol type: tcp or udp |
9. Port Range (collapsed)
Section titled “9. Port Range (collapsed)”| Field | Required? | Default | Description |
|---|---|---|---|
| Range | ✓ | Consecutive port range to expose (e.g. 8080-8090) |
|
| Enable Host | false |
Expose the port range on the host | |
| Protocol | tcp |
Protocol type: tcp or udp |
10. Volume (collapsed)
Section titled “10. Volume (collapsed)”| Field | Required? | Default | Description |
|---|---|---|---|
| Source | ✓ | Source path on the host machine | |
| Destination | ✓ | Destination path inside the container | |
| Type | Mount type: bind, volume, or tmpfs |
||
| Read Only | false |
Mount the volume as read-only | |
| Bind Propagation | Propagation mode for bind mounts: shared, private, slave, rslave, or rprivate |
||
| SELinux Relabel | SELinux relabeling mode: shared or private |
11. Health Check (collapsed, optional)
Section titled “11. Health Check (collapsed, optional)”| Field | Required? | Default | Description |
|---|---|---|---|
| Timeout | 30s |
Health check timeout |
You can add any number of HTTP, TCP, and Exec health checks. Each type is its own list, so a container can have several checks of the same type at once.
HTTP
| Field | Required? | Default | Description |
|---|---|---|---|
| Address | ✓ | Healthcheck URL | |
| Method | GET |
HTTP method | |
| Body | Request body | ||
| Headers | HTTP headers | ||
| Success Codes | 200 |
Expected success codes |
TCP
| Field | Required? | Default | Description |
|---|---|---|---|
| Address | ✓ | Healthcheck address |
Exec
| Field | Required? | Default | Description |
|---|---|---|---|
| Command | Healthcheck command | ||
| Script | Healthcheck script | ||
| Exit Code | 0 |
Expected exit code |
12. Capabilities (collapsed, optional)
Section titled “12. Capabilities (collapsed, optional)”| Field | Required? | Default | Description |
|---|---|---|---|
| Privileged | Run the container in privileged mode | ||
| Add | Add Linux capabilities to the container | ||
| Drop | Drop Linux capabilities from the container |
Summary
Section titled “Summary”The Container resource serves as the core compute component of your sandbox, enabling you to run the applications, services, and tools used in hands-on labs. You can easily create and configure containers through the UI by choosing a preset image or defining your own, setting startup commands, ports, and environment variables, all without writing configuration files.
For more granular control, containers can also be fine-tuned using advanced configuration options such as volumes, health checks, networks, and resource limits.
Overall, container resources make it simple to build flexible, interactive environments that closely replicate real-world systems and provide an engaging learning experience.
