blob: 32b99feb291ff0e3827e5bd5d1361493e21606aa [file] [view]
Containers
==========
Aurora supports several containerizers, notably the Mesos containerizer and the Docker
containerizer. The Mesos containerizer uses native OS features directly to provide isolation between
containers, while the Docker containerizer delegates container management to the Docker engine.
The support for launching container images via both containerizers has to be
[enabled by a cluster operator](../operations/configuration.md#containers).
Mesos Containerizer
-------------------
The Mesos containerizer is the native Mesos containerizer solution. It allows tasks to be
run with an array of [pluggable isolators](resource-isolation.md) and can launch tasks using
[Docker](https://github.com/docker/docker/blob/master/image/spec/v1.md) images,
[AppC](https://github.com/appc/spec/blob/master/SPEC.md) images, or directly on the agent host
filesystem.
The following example (available in our [Vagrant environment](../getting-started/vagrant.md))
launches a hello world example within a `debian/jessie` Docker image:
$ cat /vagrant/examples/jobs/hello_docker_image.aurora
hello_loop = Process(
name = 'hello',
cmdline = """
while true; do
echo hello world
sleep 10
done
""")
task = Task(
processes = [hello_loop],
resources = Resources(cpu=1, ram=1*MB, disk=8*MB)
)
jobs = [
Service(
cluster = 'devcluster',
environment = 'devel',
role = 'www-data',
name = 'hello_docker_image',
task = task,
container = Mesos(image=DockerImage(name='debian', tag='jessie'))
)
]
Docker and Appc images are designated using an appropriate `image` property of the `Mesos`
configuration object. If either `container` or `image` is left unspecified, the host filesystem
will be used. Further details of how to specify images can be found in the
[Reference Documentation](../reference/configuration.md#mesos-object).
By default, Aurora launches processes as the Linux user named like the used role (e.g. `www-data`
in the example above). This user has to exist on the host filesystem. If it does not exist within
the container image, it will be created automatically. Otherwise, this user and its primary group
has to exist in the image with matching uid/gid.
For more information on the Mesos containerizer filesystem, namespace, and isolator features, visit
[Mesos Containerizer](http://mesos.apache.org/documentation/latest/mesos-containerizer/) and
[Mesos Container Images](http://mesos.apache.org/documentation/latest/container-image/).
Docker Containerizer
--------------------
The Docker containerizer launches container images using the Docker engine. It may often provide
more advanced features than the native Mesos containerizer, but has to be installed separately to
Mesos on each agent host.
Starting with the 0.17.0 release, `image` can be specified with a `{{docker.image[name][tag]}}` binder so that
the tag can be resolved to a concrete image digest. This ensures that the job always uses the same image
across restarts, even if the version identified by the tag has been updated, guaranteeing that only job
updates can mutate configuration.
Example (available in the [Vagrant environment](../getting-started/vagrant.md)):
$ cat /vagrant/examples/jobs/hello_docker_engine.aurora
hello_loop = Process(
name = 'hello',
cmdline = """
while true; do
echo hello world
sleep 10
done
""")
task = Task(
processes = [hello_loop],
resources = Resources(cpu=1, ram=1*MB, disk=8*MB)
)
jobs = [
Service(
cluster = 'devcluster',
environment = 'devel',
role = 'www-data',
name = 'hello_docker',
task = task,
container = Docker(image = 'python:2.7')
), Service(
cluster = 'devcluster',
environment = 'devel',
role = 'www-data',
name = 'hello_docker_engine_binding',
task = task,
container = Docker(image = '{{docker.image[library/python][2.7]}}')
)
]
Note, this feature requires a v2 Docker registry. If using a private Docker registry its url
must be specified in the `clusters.json` configuration file under the key `docker_registry`.
If not specified `docker_registry` defaults to `https://registry-1.docker.io` (Docker Hub).
Example:
# clusters.json
[{
"name": "devcluster",
...
"docker_registry": "https://registry.example.com"
}]
Details of how to use Docker via the Docker engine can be found in the
[Reference Documentation](../reference/configuration.md#docker-object). Please note that in order to
correctly execute processes inside a job, the Docker container must have Python 2.7 and potentitally
further Mesos dependencies installed. This limitation does not hold for Docker containers used via
the Mesos containerizer.
For more information on launching Docker containers through the Docker containerizer, visit
[Docker Containerizer](http://mesos.apache.org/documentation/latest/docker-containerizer/)