pub struct ImageSpec {
pub base: Option<BaseImage>,
pub oci: Option<OciImage>,
pub dockerfile: Option<DockerfileImage>,
pub build_steps: Vec<ImageBuildStep>,
pub env: HashMap<String, String>,
pub architecture: ImageArchitecture,
pub python_version: String,
pub filesystem: ImageFilesystem,
}Expand description
A Sailbox image: a base or registry image plus ordered build steps.
Fields§
§base: Option<BaseImage>Base image to build on; mutually exclusive with oci and
dockerfile.
oci: Option<OciImage>Your own image used as the root filesystem; mutually exclusive with
base and dockerfile. Names a Debian- or Ubuntu-based image on a
supported public
registry (docker.io, ghcr.io, public.ecr.aws, or quay.io) by
tag, digest, or bare name (a bare name 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. A forced build
(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.
dockerfile: Option<DockerfileImage>Your own Dockerfile built into the image; mutually exclusive with
base and oci. 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 spec reuses the same
image even after a tag moves. A forced build
(BuildMode::ForceBuild) looks the
tags up again and builds what they point at now.
build_steps: Vec<ImageBuildStep>Ordered build steps applied on top of the image source.
env: HashMap<String, String>Environment variables baked into the image.
architecture: ImageArchitectureTarget CPU architecture. Unset means amd64 with base and
dockerfile, and with oci means whichever architecture the registry
image was built for (amd64 when it was built for both). Setting it
with oci requires the image to provide that architecture.
python_version: StringExact Python version to install as python3; empty uses the builder
default. Not accepted with oci or dockerfile: a pinned
interpreter would shadow the Python the image was built around.
filesystem: ImageFilesystemWritable root filesystem; unspecified preserves the ext4 default.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for ImageSpec
impl<'de> Deserialize<'de> for ImageSpec
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl StructuralPartialEq for ImageSpec
Auto Trait Implementations§
impl Freeze for ImageSpec
impl RefUnwindSafe for ImageSpec
impl Send for ImageSpec
impl Sync for ImageSpec
impl Unpin for ImageSpec
impl UnsafeUnpin for ImageSpec
impl UnwindSafe for ImageSpec
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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