Support loading artifacts into a Docker Engine
This adds support to loading artifacts (e.g. docker.#Build,
os.#Container, ...) into any arbitrary docker engine (through a
dagger.#Stream for UNIX sockets or SSH for a remote engine)
Implementation:
- Add op.#SaveImage which serializes an artifact into an arbitrary path
(docker tarball format)
- Add docker.#Load which uses op.#SaveImage to serialize to disk and
executes `docker load` to load it back
Caveats: Because we're doing this in userspace rather than letting
dagger itself load the image, the performance is pretty bad.
The buildkit API is meant for streaming (get a stream of a docker image
pipe it into docker load). Because of userspace, we have to load the
entire docker image into memory, then serialize it in a single WriteFile
LLB operation.
Example:
```cue
package main
import (
"alpha.dagger.io/dagger"
"alpha.dagger.io/docker"
)
source: dagger.#Input & dagger.#Artifact
dockersocket: dagger.#Input & dagger.#Stream
build: docker.#Build & {
"source": source
}
load: docker.#Load & {
source: build
tag: "testimage"
socket: dockersocket
}
```
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
@@ -40,6 +40,26 @@ A container image that can run any docker command
|
||||
|
||||
_No output._
|
||||
|
||||
## docker.#Load
|
||||
|
||||
Load a docker image into a docker engine
|
||||
|
||||
### docker.#Load Inputs
|
||||
|
||||
| Name | Type | Description |
|
||||
| ------------- |:-------------: |:-------------: |
|
||||
|*tag* | `string` |Name and optionally a tag in the 'name:tag' format |
|
||||
|*source* | `dagger.#Artifact` |Image source |
|
||||
|*load.command* | `"docker load -i /src/image.tar"` |Command to execute |
|
||||
|*load.registries* | `[]` |Image registries |
|
||||
|
||||
### docker.#Load Outputs
|
||||
|
||||
| Name | Type | Description |
|
||||
| ------------- |:-------------: |:-------------: |
|
||||
|*ref* | `string` |Image ref |
|
||||
|*digest* | `string` |Image digest |
|
||||
|
||||
## docker.#Pull
|
||||
|
||||
Pull a docker container
|
||||
|
||||
Reference in New Issue
Block a user