- Prerequisites
- Create a base Dockerfile
- Add support for arbitrary user IDs
- Build the custom workspace image
- Push the custom workspace image to the GitLab Container Registry
- Use the custom workspace image in GitLab
Tutorial: Create a custom workspace image that supports arbitrary user IDs
-
Introduced in GitLab 15.11 with a flag named
remote_development_feature_flag
. Disabled by default. - Enabled on GitLab.com and self-managed in GitLab 16.0.
remote_development_feature_flag
. On GitLab.com, this feature is available. The feature is not ready for production use.In this tutorial, you’ll learn how to create a custom workspace image that supports arbitrary user IDs. You can then use this custom image with any workspace you create in GitLab.
To create a custom workspace image that supports arbitrary user IDs, you’ll:
- Create a base Dockerfile.
- Add support for arbitrary user IDs.
- Build the custom workspace image.
- Push the custom workspace image to the GitLab Container Registry.
- Use the custom workspace image in GitLab.
Prerequisites
- A GitLab account with permission to create and push container images to the GitLab Container Registry
- Docker installation
Create a base Dockerfile
To create a base Dockerfile for the container image, let’s use the Python 3.11-slim-bullseye
image from Docker Hub:
FROM python:3.11-slim-bullseye
Next, you’ll modify this base image.
Add support for arbitrary user IDs
To add support for arbitrary user IDs to the base image, let’s:
- Add a new
gitlab-workspaces
user with a5001
user ID. - Set the necessary directory permissions.
RUN useradd -l -u 5001 -G sudo -md /home/gitlab-workspaces -s /bin/bash -p gitlab-workspaces gitlab-workspaces
ENV HOME=/home/gitlab-workspaces
WORKDIR $HOME
RUN mkdir -p /home/gitlab-workspaces && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home
USER 5001
Now that the image supports arbitrary user IDs, it’s time to build the custom workspace image.
Build the custom workspace image
To build the custom workspace image, run this command:
docker build -t my-gitlab-workspace .
When the build is complete, you can test the image locally:
docker run -ti my-gitlab-workspace sh
You should now be able to run commands as the gitlab-workspaces
user.
Push the custom workspace image to the GitLab Container Registry
To push the custom workspace image to the GitLab Container Registry:
-
Sign in to your GitLab account:
docker login registry.gitlab.com
-
Tag the image with the GitLab Container Registry URL:
docker tag my-gitlab-workspace registry.gitlab.com/your-namespace/my-gitlab-workspace:latest
-
Push the image to the GitLab Container Registry:
docker push registry.gitlab.com/your-namespace/my-gitlab-workspace:latest
Now that you’ve pushed the custom workspace image to the GitLab Container Registry, you can use the image in GitLab.
Use the custom workspace image in GitLab
To use the custom workspace image in GitLab, in your project’s .devfile.yaml
, update the container image:
schemaVersion: 2.2.0
components:
- name: tooling-container
attributes:
gl/inject-editor: true
container:
image: registry.gitlab.com/your-namespace/my-gitlab-workspace:latest
You’re all set! You can now use this custom image with any workspace you create in GitLab.