pub struct ImageDefinition {
pub base: Option<BaseImage>,
pub oci_ref: Option<String>,
pub dockerfile: Option<DockerfileSource>,
pub architecture: ImageArchitecture,
pub env: HashMap<String, String>,
pub python_version: String,
pub filesystem: ImageFilesystem,
pub steps: Vec<ImageDefinitionStep>,
}Expand description
A custom image definition: a base image plus ordered build steps, where
local-file steps still reference paths on this machine. Resolve it with
Client::resolve_image (hash + upload) or hand it to
Client::build_image_definition to also build it to ready.
Fields§
§base: Option<BaseImage>Base image to build on. Mutually exclusive with oci_ref and
dockerfile.
oci_ref: Option<String>Your own image as the root filesystem: a reference to a Debian- or
Ubuntu-based image whose first segment names a supported public
registry (docker.io, ghcr.io, public.ecr.aws, or quay.io),
with an optional :tag or @sha256:<64 hex> pin (no tag means the
latest tag). A tag is pinned for your organization once an image
has been built from it: later builds keep getting that version, even
if the tag moves upstream. BuildMode::ForceBuild looks
the tag up again and moves the pin for your whole organization. If
forced builds of the same tag overlap, the last-requested one
that succeeds decides what the tag means, no matter which build
finishes first. A
digest names exactly one image, so it never moves. The image’s ENV,
WORKDIR, and USER become the Sailbox defaults for commands you
run; its ENTRYPOINT and CMD are not run, because a Sailbox
manages its own processes. Mutually exclusive with base and
dockerfile.
dockerfile: Option<DockerfileSource>Your own Dockerfile built into the image. Every image its FROM (and
COPY --from) instructions name must live on a supported public
registry (docker.io, ghcr.io, public.ecr.aws, or quay.io; a
short name like python:3.12 means
docker.io/library/python:3.12). Each named image is pinned to the
version its tag pointed at the first time your organization used it, and
those pinned versions become part of the built image’s identity, so
rebuilding the same definition reuses the same image even after a tag
moves; a forced build looks the tags up again. A # syntax= line
can declare docker/dockerfile:1 or a release from 1.4 through
1.22.0; a file that declares anything else is rejected, and the
declared release does not change how the file is built.
Multi-stage Dockerfiles work. A RUN --mount of
type cache, secret, or ssh is rejected; tmpfs mounts work, and
bind mounts work when they read from the build context or another
build stage. Mount options must be literal text, and ONBUILD is not
supported, in the Dockerfile or in an image a FROM names. The built
image’s ENV, WORKDIR, and USER become the Sailbox defaults for
commands you run; its ENTRYPOINT and CMD are not run, because a
Sailbox manages its own processes. Mutually exclusive with base and
oci_ref.
architecture: ImageArchitectureTarget CPU architecture. Unspecified means amd64 with base and
dockerfile, and with oci_ref means whichever architecture the
registry image was built for (amd64 when it was built for both).
Setting it with oci_ref requires the image to provide that
architecture.
env: HashMap<String, String>Environment variables baked into the image.
python_version: StringExact Python version to install as python3; empty uses the builder
default. Not accepted with oci_ref or dockerfile: a pinned
interpreter would shadow the Python the image was built around.
filesystem: ImageFilesystemWritable root filesystem; unspecified preserves the ext4 default.
steps: Vec<ImageDefinitionStep>Ordered build steps.
Trait Implementations§
Source§impl Clone for ImageDefinition
impl Clone for ImageDefinition
Source§fn clone(&self) -> ImageDefinition
fn clone(&self) -> ImageDefinition
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ImageDefinition
impl Debug for ImageDefinition
Source§impl Default for ImageDefinition
impl Default for ImageDefinition
Source§fn default() -> ImageDefinition
fn default() -> ImageDefinition
Auto Trait Implementations§
impl Freeze for ImageDefinition
impl RefUnwindSafe for ImageDefinition
impl Send for ImageDefinition
impl Sync for ImageDefinition
impl Unpin for ImageDefinition
impl UnsafeUnpin for ImageDefinition
impl UnwindSafe for ImageDefinition
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request