Lightweight OCI compatible images for OpenStack Projects
Go to file
Thippaiah, Balachandra (bt061u) 88df24b24d Add PIP_WHEEL_ARGS and use PIP_ARGS for pip install
This ps adds new argument PIP_WHEEL_ARGS
 - allows additional parameters for pip wheel
 - defaults to PIP_ARGS
Also use PIP_ARGS with all pip installs

Useful when building requirements image with local pip mirrors

Change-Id: I43c6b921467150509d013554aaa1983f30abedff
2018-11-12 10:44:46 -05:00
.zuul.d Build OpenSUSE Leap 15 by default 2018-10-23 08:34:59 +00:00
dockerfiles Clean up comment style and identify bugs and workarounds 2018-10-25 11:33:25 -07:00
playbooks Clean up comment style and identify bugs and workarounds 2018-10-25 11:33:25 -07:00
scripts Add PIP_WHEEL_ARGS and use PIP_ARGS for pip install 2018-11-12 10:44:46 -05:00
.gitreview Added .gitreview 2017-03-27 08:33:46 +00:00
Dockerfile Add PIP_WHEEL_ARGS and use PIP_ARGS for pip install 2018-11-12 10:44:46 -05:00
README.md Add PIP_WHEEL_ARGS and use PIP_ARGS for pip install 2018-11-12 10:44:46 -05:00
bindep.txt bindep: add librdkafka-dev for confluent-kafka 2018-09-25 13:38:51 +01:00
pydep.txt Add fluentd lib for native fluentd logging 2018-04-12 18:11:18 +00:00

README.md

OpenStack LOCI

OpenStack LOCI is a project designed to quickly build Lightweight OCI compatible images of OpenStack services.

Currently we build and gate images for the following OpenStack projects:

Additionally, we produce a "wheels" image for requirements containing all of the packages listed in upper-constraints.txt.

The instructions below can be used for any OpenStack service currently targeted by LOCI. For simplicity, we will continue to use Keystone as an example.

Keystone Image Layer Info

Building locally

Note: To build locally, you will need a version of docker >= 17.05.0.

It's really easy to build images locally:

$ docker build https://git.openstack.org/openstack/loci.git --build-arg PROJECT=keystone \
    --tag keystone:ubuntu

The default base distro is Ubuntu, however, you can use the following form to build from a distro of your choice, in this case, CentOS:

$ docker build https://git.openstack.org/openstack/loci.git \
    --build-arg PROJECT=keystone \
    --build-arg WHEELS="loci/requirements:master-centos" \
    --build-arg FROM=centos:7 \
    --tag keystone:centos

If building behind a proxy, remember to use build arguments to pass these through to the build:

$ docker build https://git.openstack.org/openstack/loci.git \
    --build-arg http_proxy=$http_proxy \
    --build-arg https_proxy=$https_proxy \
    --build-arg no_proxy=$no_proxy \
    --build-arg PROJECT=keystone \
    --tag keystone:ubuntu

For more advanced building you can use docker build arguments to define:

  • FROM The base Docker image to build from. Currently supported are ubuntu:xenial and centos:7
  • PROJECT The name of the project to install.
  • PROJECT_REPO The git repo containing the OpenStack project the container should contain
  • PROJECT_REF The git ref, branch, or tag the container should fetch for the project
  • UID The uid of the user that will be created (defaults to 42424).
  • GID The gid of the group that will be created (default to 42424).
  • WHEELS The location of the wheels tarball. This accepts a url to a tarball or a Docker image name in the form of [myregistry/]mydockernamespace/requirements[:ubuntu]
  • DISTRO This is a helper variable used for scripts. It would primarily be used in situations where the script would not detect the correct distro. For example, you would set DISTRO=centos when running from an oraclelinux base image.
  • PROFILES The bindep profiles to specify to configure which packages get installed. This is a space separated list.
  • PIP_PACKAGES Specify additional python packages you would like installed. The only caveat is these packages must exist in WHEELS form. So if you wanted to include rpdb, you would need to have built that into your WHEELS.
  • PIP_ARGS Specify additional pip's parameters you would like.
  • PIP_WHEEL_ARGS Specify additional pip's wheel parameters you would like. Default is PIP_ARGS.
  • DIST_PACKAGES Specify additional distribution packages you would like installed.
  • EXTRA_BINDEP Specify a bindep-* file to add in the container. It would be considered next to the default bindep.txt.
  • EXTRA_PYDEP Specify a pydep-* file to add in the container. It would be considered next to the default pydep.txt.

This makes it really easy to integrate LOCI images into your development or CI/CD workflow, for example, if you wanted to build an image from this PS you could run:

$ docker build https://git.openstack.org/openstack/loci.git \
    --build-arg PROJECT=keystone \
    --tag mydockernamespace/keystone-testing:418167-1 \
    --build-arg PROJECT_REF=refs/changes/67/418167/1

To build with the wheels from a private Docker registry rather than DockerHub run:

$ docker build https://git.openstack.org/openstack/loci.git \
    --build-arg PROJECT=keystone \
    --build-arg WHEELS=172.17.0.1:5000/mydockernamespace/keystone:ubuntu

To build cinder with lvm and ceph support you would run:

$ docker build https://git.openstack.org/openstack/loci.git \
    --build-arg PROJECT=cinder \
    --build-arg PROFILES="lvm ceph"

Customizing

The images should contain all the required assets for running the service. But if you wish or need to customize the loci/keystone image that's great! We hope to have built the images to make this as easy and flexible as possible. To do this we recommend that you perform any required customisation in a child image using a pattern similar to:

FROM loci/keystone:master-ubuntu
MAINTAINER you@example.com

RUN set -x \
    && apt-get update \
    && apt-get install -y --no-install-recommends your-awesome-binary-package \
    && rm -rf /var/lib/apt/lists/*

A Note on the Stability of LOCI

LOCI is considered stable. There are production installs of OpenStack using LOCI built images at this time.

The project is very low-entropy with very little changing, but this is expected. The highest traffic section of LOCI is the gates.