github.com/rkt/rkt@v1.30.1-0.20200224141603-171c416fac02/Documentation/app-container.md (about) 1 ## App Container basics 2 3 [App Container][appc-repo] (appc) is an open specification that defines several aspects of how to run applications in containers: an image format, runtime environment, and discovery protocol. 4 5 rkt's native [image format](#aci) and [runtime environment](#pods) are those defined by the [specification][appc-spec]. 6 7 _Note that as of late 2016, appc is [no longer being actively developed, other than minor tweaks](https://github.com/appc/spec#-disclaimer-). However, appc is fully functional and stable and will continue to be supported. Future versions of rkt might gain [native support of OCI formats](https://github.com/rkt/rkt/projects/4)._ 8 9 ## ACI 10 11 The image format defined by appc and used in rkt is the [_Application Container Image_][appc-aci], or ACI. 12 An ACI is a simple tarball bundle of a rootfs (containing all the files needed to execute an application) and an _Image Manifest_, which defines things like default execution parameters and default resource constraints. 13 ACIs can be built with tools like [`acbuild`][acbuild], [`actool`][actool], or [`goaci`][goaci]. 14 Docker images can be converted to ACI using [`docker2aci`][docker2aci], although rkt will [do this automatically][running-docker-images]. 15 16 Most parameters defined in an image can be overridden at runtime by rkt. For example, the `rkt run` command allows users to supply custom exec arguments to an image. 17 18 ## Pods 19 20 appc defines the [_pod_][appc-pods] as the basic unit of execution. 21 A pod is a grouping of one or more app images (ACIs), with some additional metadata optionally applied to the pod as a whole - for example, a resource constraint can be applied at the pod level and then forms an "outer bound" for all the applications in the pod. 22 The images in a pod execute with a shared context, including networking. 23 24 A pod in rkt is conceptually identical to a pod [as defined in Kubernetes][k8s-pods]. 25 26 ## Validating rkt as an appc implementation 27 28 rkt implements the two runtime components of the appc specification: the [Application Container Executor (ACE)][appc-ace] and the [Metadata Service][appc-meta]. 29 It also uses schema and code from the upstream [appc/spec][appc-spec] repo to manipulate ACIs, work with image and pod manifests, and perform image discovery. 30 31 To validate that `rkt` successfully implements the ACE part of the spec, use the App Container [validation ACIs][appc-val]: 32 33 ``` 34 # rkt metadata-service & # Make sure metadata service is running 35 # rkt --insecure-options=image run \ 36 --mds-register \ 37 --volume=database,kind=host,source=/tmp \ 38 https://github.com/appc/spec/releases/download/v0.8.11/ace-validator-main.aci \ 39 https://github.com/appc/spec/releases/download/v0.8.11/ace-validator-sidekick.aci 40 ``` 41 42 [acbuild]: https://github.com/containers/build 43 [actool]: https://github.com/appc/spec#building-acis 44 [appc-repo]: https://github.com/appc/spec/ 45 [appc-spec]: https://github.com/appc/spec/blob/master/SPEC.md 46 [appc-aci]: https://github.com/appc/spec/blob/master/spec/aci.md#app-container-image 47 [appc-pods]: https://github.com/appc/spec/blob/master/spec/pods.md#app-container-pods-pods 48 [appc-ace]: https://github.com/appc/spec/blob/master/spec/ace.md#app-container-executor 49 [appc-meta]: https://github.com/appc/spec/blob/master/spec/ace.md#app-container-metadata-service 50 [appc-val]: https://github.com/appc/spec/blob/master/README.md#validating-app-container-executors-aces 51 [docker2aci]: https://github.com/appc/docker2aci 52 [goaci]: https://github.com/appc/goaci 53 [k8s-pods]: https://kubernetes.io/docs/concepts/workloads/pods/pod/ 54 [running-docker-images]: running-docker-images.md