3.5 KiB
CCP Docker images guide
This guide covers CCP specific requirements for defining Docker images.
Docker files location
All docker files should be located in
docker/<component_name>
directory, for example:
docker/horizon
docker/keystone
The docker directory may contain multiple components.
Docker directory structure
Each docker directory should contain a Dockerfile.j2
file. Dockerfile.j2 is a file which contains Docker build instructions
in a Jinja2 template
format. You can add additional files, which will be used in
Dockerfile.j2, but only Dockerfile.j2 can be a Jinja2 template in this
directory.
Dockerfile format
Please refer to the official Docker documentation which covers the Dockerfile format. CCP has some additional requirements, which is:
- Use as few layers as possible. Each command in Dockerfile creates a layer, so make sure you're grouping multiple RUN commands into one.
- If it's possible, please run container from the non-root user.
- If you need to copy some scripts into the image, please place them
into the
/opt/ccp/bin
directory. - Only one process should be started inside container. Do not use runit, supervisord or any other init systems, which will allow to spawn multiple processes in container.
- Do not use CMD and ENTRYPOINT commands in Dockerfile.j2.
- All OpenStack services should use
openstack-base
parent image in FROM section. All non-OpenStack services should usebase-tools
parent image in FROM section.
Here is an example of valid Dockerfile.j2: Keystone Dockerfile
Supported Jinja2 variables
Only specific variables can actually be used in Dockerfile.j2:
namespace
- Used in the FROM section, renders into image namespace, by default intoccp
.tag
- Used in the FROM section, renders into image tag, by default intolatest
.maintainer
- Used in the MAINTAINER section, renders into maintainer email, by default into "MOS Microservices <mos-microservices@mirantis.com>"copy_sources
- Used anywhere in the Dockerfile. please refer to corresponding documentation section below.- Additionaly, you could use variables with software versions, please
refer to
app_def_guide
for details.
copy_sources
The CCP CLI provides additional feature for Docker images creation,
which will help to use git repositories inside Dockerfile, it's called
copy_sources
.
This feature uses configuration from
service/files/defaults.yaml
from the same repository or
from global config, please refer to app_def_guide
for details.
Testing
After making any changes in docker directory, you should test it via build and deploy.
To test building, please run:
ccp build -c <component_name>
For example:
ccp build -c keystone
Make sure that image is built without errors.
To test the deployment, please build new images using the steps above and after run:
ccp deploy
Please refer to quickstart
for additional information.