An image is the consistent base for a set of environments. Images contain the language versions, tooling, and other dependencies needed to work on a project. A user should be able to create an environment from an image and immediately start contributing to the project that it's defined for.

Images are docker images that have been imported into the platform from a registry that you've hooked into Coder Enterprise. The Dockerfile for these images can be source controlled in your project's repository to provide your organization with development environments as code.

An image consists of a series of image tags that correspond to different versions of the image.

Best Practices for Structuring Your Organization's Image Hierarchy

All docker images are based on a base image. These base images act as parents in an image hierarchy structure. Any image that extends one of these base images with customizations are considered descendants of the base image. These descendant images contain all of the original tooling and configuration that were originally installed into the parent base image along with their own installed customizations.

With Coder Enterprise, your organization can structure your image hierarchy in any way you desire. However, as a guideline, we've seen organizations have great success by defining a set of organization wide base images that all project images are created from.

These base images should extend common open source base images, but can contain security patches, organization wide utilities and configuration that project images will get by default when extending off of them. The project images can then add their own dependencies and requirements while gaining all of the benefits and customizations of the organization's base image.

Extending Base Images

To add additional tooling and configuration to an image, you can extend any base images using a Dockerfile and setting the FROM to point to the specific base image you want to extend. For example, if you wanted to extend an ubuntu base image, your Dockerfile's FROM would look like the following:

FROM ubuntu:disco

After extending the base image, your custom image should be pushed up to the docker registry that your cemanager is hooked into.

Import an Image

Any image that has been pushed to a registry that you've hooked into Coder Enterprise can be imported into the platform.

Image Requirements

There are a few requirements for a base image:

  • bash
  • curl
  • GLIBC version 2.17 or later

To import an image, navigate to the Images page and select the Import Image button in the upper right hand corner of the page. Select the registry where the image is hosted and the repo name where the image can be pulled from. By default this will import the image's latest tag.

Image Tags

An Image Tag is a single version of an image. Each image can have many tags that are published in a registry.

Importing a Specific Tag

To import a specific tag into your Coder Enterprise deployment, go to the Images page, select the image you want to add a specific tag for, and select the Add Tag button. Put in the tag name you'd like to import and then select Import.

Accepting Updates

The end developer is in charge of their environment. When they're outdated, a visual indicator appears in the dashboard so they're constantly nudged to update.

Read more about environments.

Tracking Updates

One can see the environments on each image tag while listing or inspecting an image's tags. This helps the team understand divergence in real time, and allows teammates to nudge eachother to update.

User and Team Management

Individual users or an entire team can be given access to an image as readers or writers. A writer can update the image description, add tags, and delete the image.

Granting and Revoking Permissions

To grant or revoke permissions for an image, navigate to the Images page and select the image you'd like to modify permissions for. Select the Permissions tab underneath the image name on the Image page.

To add a team, select the Add Team button, choose the team(s) to grant access to, select whether they should be readers or writers, and then select Add.

To add a user, select the Add User button, choose the user(s) to grant access to, select whether they should be readers or writers, and then select Add.

To revoke access to a user or team, click the Remove button next to the user or team.

Table of Contents