Overview
The new docker package, to be introduced in the Europa release at universe.dagger.io/docker, will be the primary API for using Docker containers, and as such will play an important role in our overall developer experience. Its overall design is complete, but implementation is not. No doubt there will be some last minute questions on the design along the way, too.
This issue tracks remaining work to call the docker package complete.
Use cases
Below is a list of use cases for Docker containers in Dagger, the relevant package, and progress status.
| Use case |
Package |
Design status |
Tests status |
| Build images with a Dockerfile |
docker |
🚧 |
❌ |
| Build images with CUE |
docker |
🚧 |
❌ |
| Push and pull images |
docker |
✅ |
❌ |
| Run ephemeral containers as part of a CICD pipeline (with or without external engine) |
docker |
🚧 |
❌ |
| Run Docker Compose commands (with or without external engine) |
docker/compose |
❌ |
❌ |
| Run persistent containers on an external Docker engine |
docker/client |
❌ |
❌ |
| Run arbitrary commands on an external Docker engine |
docker/client |
❌ |
❌ |
High-level design
docker
The purpose of universe.dagger.io/docker is to offer a modern API for the most common uses of Docker containers in the context of CICD:
- Build images, with or without Dockerfiles
- Push and pull images
- Run ephemeral containers for the duration of the pipeline
An external Docker engine is not required by default, but it should be supported as an opt-in whenever useful and practical. When supporting an external engine for an operation, remember that full Docker engine API compatibility is not a goal: there is a separate package, docker/client for that purpose.
docker/client
The purpose of universe.dagger.io/docker/client is to implement a client to the Docker engine API with maximum compatibility, and maximum familiarity for users of the docker CLI.
docker/compose
The purpose of universe.dagger.io/docker/compose is to support running a Docker Compose project, as well as other common Docker Compose operations.
Overview
The new
dockerpackage, to be introduced in the Europa release atuniverse.dagger.io/docker, will be the primary API for using Docker containers, and as such will play an important role in our overall developer experience. Its overall design is complete, but implementation is not. No doubt there will be some last minute questions on the design along the way, too.This issue tracks remaining work to call the
dockerpackage complete.Use cases
Below is a list of use cases for Docker containers in Dagger, the relevant package, and progress status.
dockerdockerdockerdockerdocker/composedocker/clientdocker/clientHigh-level design
dockerThe purpose of
universe.dagger.io/dockeris to offer a modern API for the most common uses of Docker containers in the context of CICD:An external Docker engine is not required by default, but it should be supported as an opt-in whenever useful and practical. When supporting an external engine for an operation, remember that full Docker engine API compatibility is not a goal: there is a separate package,
docker/clientfor that purpose.docker/clientThe purpose of
universe.dagger.io/docker/clientis to implement a client to the Docker engine API with maximum compatibility, and maximum familiarity for users of thedockerCLI.docker/composeThe purpose of
universe.dagger.io/docker/composeis to support running a Docker Compose project, as well as other common Docker Compose operations.