Use tagged common scripts (#7)

This commit is contained in:
Pete Birley 2017-03-23 00:16:03 -04:00 committed by Sam Yaple
parent a27798292c
commit eca2591d29
8 changed files with 55 additions and 226 deletions

View File

@ -16,7 +16,7 @@ Images are built in the Docker Hub automatically on each push to the master bran
It's really easy to build images locally for the distro of your choice. To build an image you only need to run:
``` bash
$ docker build https://github.com/yaodu/docker-heat.git \
--file dockerfiles/Dockerfile-debian \
--file debian/Dockerfile \
--tag yaodu/heat:latest
```
You can, of course, substitute `debian` with your distro of choice.
@ -32,7 +32,7 @@ For more advanced building you can use docker build arguments to define:
This makes it really easy to integrate Yaodu images into your development or CI/CD workflow, for example, if you wanted to build an image from [this PS](https://review.openstack.org/#/c/213731/4) you could run:
``` bash
$ docker build https://github.com/yaodu/docker-heat.git \
--file dockerfiles/Dockerfile-ubuntu \
--file ubuntu/Dockerfile \
--tag mydockernamespace/heat-testing:213731-4 \
--build-arg GIT_REPO=http://git.openstack.org/openstack/heat.git \
--build-arg GIT_REF_REPO=http://git.openstack.org/openstack/heat.git \

17
centos/Dockerfile Normal file
View File

@ -0,0 +1,17 @@
FROM centos:7
ENV PROJECT=heat
ARG DOCKER_REPO=yaodu/openstack-requirements
ARG DOCKER_TAG=centos
ARG WHEELS
ARG GIT_REPO=https://github.com/openstack/${PROJECT}
ARG GIT_REF
ARG GIT_REF_REPO=https://git.openstack.org/openstack/${PROJECT}
ARG SCRIPTS=https://github.com/yaodu/common/archive/0.1.2.tar.gz
RUN set -x \
&& yum install --setopt=tsflags=nodocs -y python curl \
&& curl -sSL $SCRIPTS | tar xz -C /tmp/ --strip-components=2 \
&& /tmp/download.sh $DOCKER_REPO $DOCKER_TAG $WHEELS \
&& /tmp/install.sh $PROJECT $GIT_REPO $GIT_REF_REPO $GIT_REF \
&& /tmp/cleanup.sh

18
debian/Dockerfile vendored Normal file
View File

@ -0,0 +1,18 @@
FROM debian:jessie-slim
ENV PROJECT=heat
ARG DOCKER_REPO=yaodu/openstack-requirements
ARG DOCKER_TAG=latest
ARG WHEELS
ARG GIT_REPO=https://github.com/openstack/${PROJECT}
ARG GIT_REF
ARG GIT_REF_REPO=https://git.openstack.org/openstack/${PROJECT}
ARG SCRIPTS=https://github.com/yaodu/common/archive/0.1.2.tar.gz
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends python ca-certificates curl \
&& curl -sSL $SCRIPTS | tar xz -C /tmp/ --strip-components=2 \
&& /tmp/download.sh $DOCKER_REPO $DOCKER_TAG $WHEELS \
&& /tmp/install.sh $PROJECT $GIT_REPO $GIT_REF_REPO $GIT_REF \
&& /tmp/cleanup.sh

View File

@ -1,68 +0,0 @@
FROM centos:7
ENV PROJECT=heat
ARG DOCKER_REPO=yaodu/openstack-requirements
ARG DOCKER_TAG=centos
ARG WHEELS
ARG GIT_REPO=https://github.com/openstack/${PROJECT}
ARG GIT_REF
ARG GIT_REF_REPO=https://git.openstack.org/openstack/${PROJECT}
RUN set -x \
&& yum install --setopt=tsflags=nodocs -y \
# Project specific packages start
python \
httpd \
mod_ssl \
mod_wsgi \
# Project specific packages end
&& yum install --setopt=tsflags=nodocs -y git \
# common install start
&& if [ -n "$WHEELS" ]; then \
curl -sSL ${WHEELS} > /tmp/wheels.tar.gz; \
else \
TOKEN=$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${DOCKER_REPO}:pull" | \
python -c "import sys, json; print json.load(sys.stdin)['token']") \
&& BLOB=$(curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/manifests/${DOCKER_TAG} | \
python -c "import sys, json; print json.load(sys.stdin)['fsLayers'][0]['blobSum']") \
&& curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/blobs/${BLOB} > /tmp/wheels.tar.gz; \
fi \
&& git clone ${GIT_REPO} /tmp/${PROJECT} \
&& if [ -n "$GIT_REF" ]; then \
git --git-dir /tmp/${PROJECT}/.git fetch ${GIT_REF_REPO} ${GIT_REF} \
&& git --git-dir /tmp/${PROJECT}/.git checkout FETCH_HEAD; \
fi \
&& mkdir /tmp/packages \
&& tar xf /tmp/wheels.tar.gz -C /tmp/packages/ --strip-components=2 root/packages \
&& curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
&& python get-pip.py \
&& rm get-pip.py \
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt /tmp/${PROJECT} \
&& groupadd -g 42424 ${PROJECT} \
&& useradd -u 42424 -g ${PROJECT} -M -d /var/lib/${PROJECT} -s /usr/sbin/nologin -c "${PROJECT} user" ${PROJECT} \
&& mkdir -p /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \
&& chown ${PROJECT}:${PROJECT} /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \
# common install end
# Project specific command block start
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt \
python-memcached \
pymysql \
&& cp -rfv /tmp/${PROJECT}/etc/heat/* /etc/${PROJECT}/ \
&& chown -R ${PROJECT}:${PROJECT} /etc/${PROJECT} \
&& chown root:root /etc/${PROJECT}/policy.json \
&& sed -i 's/^Listen 80/#Listen 80/' /etc/httpd/conf/httpd.conf \
&& rm /etc/httpd/conf.d/* \
# Provide compatibility with ubuntu/debian apache:
&& ln -s /usr/sbin/httpd /usr/sbin/apache2 \
&& mkdir -p /etc/apache2/conf-enabled \
&& echo "IncludeOptional /etc/apache2/conf-enabled/*.conf" >> /etc/httpd/conf/httpd.conf \
&& mkdir -p /etc/apache2/mods-available \
&& echo "Include /etc/apache2/mods-available/*.conf" >> /etc/httpd/conf/httpd.conf \
&& touch /etc/apache2/envvars \
# Project specific command block end
&& yum history -y undo $(yum history list git | tail -2 | head -1 | awk '{ print $1}') \
&& rpm -e --nodeps centos-logos \
&& yum clean all \
&& rm -rf /tmp/* /root/.cache \
&& pip uninstall pip wheel -y \
&& find / -type f -name "*.pyc" -delete

View File

@ -1,59 +0,0 @@
FROM debian:jessie
ENV PROJECT=heat
ARG DOCKER_REPO=yaodu/openstack-requirements
ARG DOCKER_TAG=latest
ARG WHEELS
ARG GIT_REPO=https://github.com/openstack/${PROJECT}
ARG GIT_REF
ARG GIT_REF_REPO=https://git.openstack.org/openstack/${PROJECT}
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
# Project specific packages start
python \
apache2 \
libapache2-mod-wsgi \
# Project specific packages end
&& apt-get install -y --no-install-recommends ca-certificates curl git \
# common install start
&& if [ -n "$WHEELS" ]; then \
curl -sSL ${WHEELS} > /tmp/wheels.tar.gz; \
else \
TOKEN=$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${DOCKER_REPO}:pull" | \
python -c "import sys, json; print json.load(sys.stdin)['token']") \
&& BLOB=$(curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/manifests/${DOCKER_TAG} | \
python -c "import sys, json; print json.load(sys.stdin)['fsLayers'][0]['blobSum']") \
&& curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/blobs/${BLOB} > /tmp/wheels.tar.gz; \
fi \
&& git clone ${GIT_REPO} /tmp/${PROJECT} \
&& if [ -n "$GIT_REF" ]; then \
git --git-dir /tmp/${PROJECT}/.git fetch ${GIT_REF_REPO} ${GIT_REF} \
&& git --git-dir /tmp/${PROJECT}/.git checkout FETCH_HEAD; \
fi \
&& mkdir /tmp/packages \
&& tar xf /tmp/wheels.tar.gz -C /tmp/packages/ --strip-components=2 root/packages \
&& curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
&& python get-pip.py \
&& rm get-pip.py \
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt /tmp/${PROJECT} \
&& groupadd -g 42424 ${PROJECT} \
&& useradd -u 42424 -g ${PROJECT} -M -d /var/lib/${PROJECT} -s /usr/sbin/nologin -c "${PROJECT} user" ${PROJECT} \
&& mkdir -p /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \
&& chown ${PROJECT}:${PROJECT} /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \
# common install end
# Project specific command block start
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt \
python-memcached \
pymysql \
&& cp -rfv /tmp/${PROJECT}/etc/heat/* /etc/${PROJECT}/ \
&& chown -R ${PROJECT}:${PROJECT} /etc/${PROJECT} \
&& chown root:root /etc/${PROJECT}/policy.json \
&& rm /etc/apache2/ports.conf /etc/apache2/sites-enabled/* /etc/apache2/sites-available/* \
&& touch /etc/apache2/ports.conf \
# Project specific command block end
&& apt-get purge -y --auto-remove ca-certificates curl git \
&& rm -rf /var/lib/apt/lists/* /tmp/* /root/.cache \
&& pip uninstall pip wheel -y \
&& find / -type f -name "*.pyc" -delete

View File

@ -1,59 +0,0 @@
FROM ubuntu:xenial
ENV PROJECT=heat
ARG DOCKER_REPO=yaodu/openstack-requirements
ARG DOCKER_TAG=ubuntu
ARG WHEELS
ARG GIT_REPO=https://github.com/openstack/${PROJECT}
ARG GIT_REF
ARG GIT_REF_REPO=https://git.openstack.org/openstack/${PROJECT}
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
# Project specific packages start
python \
apache2 \
libapache2-mod-wsgi \
# Project specific packages end
&& apt-get install -y --no-install-recommends ca-certificates curl git \
# common install start
&& if [ -n "$WHEELS" ]; then \
curl -sSL ${WHEELS} > /tmp/wheels.tar.gz; \
else \
TOKEN=$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${DOCKER_REPO}:pull" | \
python -c "import sys, json; print json.load(sys.stdin)['token']") \
&& BLOB=$(curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/manifests/${DOCKER_TAG} | \
python -c "import sys, json; print json.load(sys.stdin)['fsLayers'][0]['blobSum']") \
&& curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/blobs/${BLOB} > /tmp/wheels.tar.gz; \
fi \
&& git clone ${GIT_REPO} /tmp/${PROJECT} \
&& if [ -n "$GIT_REF" ]; then \
git --git-dir /tmp/${PROJECT}/.git fetch ${GIT_REF_REPO} ${GIT_REF} \
&& git --git-dir /tmp/${PROJECT}/.git checkout FETCH_HEAD; \
fi \
&& mkdir /tmp/packages \
&& tar xf /tmp/wheels.tar.gz -C /tmp/packages/ --strip-components=2 root/packages \
&& curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
&& python get-pip.py \
&& rm get-pip.py \
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt /tmp/${PROJECT} \
&& groupadd -g 42424 ${PROJECT} \
&& useradd -u 42424 -g ${PROJECT} -M -d /var/lib/${PROJECT} -s /usr/sbin/nologin -c "${PROJECT} user" ${PROJECT} \
&& mkdir -p /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \
&& chown ${PROJECT}:${PROJECT} /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \
# common install end
# Project specific command block start
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt \
python-memcached \
pymysql \
&& cp -rfv /tmp/${PROJECT}/etc/heat/* /etc/${PROJECT}/ \
&& chown -R ${PROJECT}:${PROJECT} /etc/${PROJECT} \
&& chown root:root /etc/${PROJECT}/policy.json \
&& rm /etc/apache2/ports.conf /etc/apache2/sites-enabled/* /etc/apache2/sites-available/* \
&& touch /etc/apache2/ports.conf \
# Project specific command block end
&& apt-get purge -y --auto-remove ca-certificates curl git \
&& rm -rf /var/lib/apt/lists/* /tmp/* /root/.cache \
&& pip uninstall pip wheel -y \
&& find / -type f -name "*.pyc" -delete

18
ubuntu/Dockerfile Normal file
View File

@ -0,0 +1,18 @@
FROM ubuntu:xenial
ENV PROJECT=heat
ARG DOCKER_REPO=yaodu/openstack-requirements
ARG DOCKER_TAG=ubuntu
ARG WHEELS
ARG GIT_REPO=https://github.com/openstack/${PROJECT}
ARG GIT_REF
ARG GIT_REF_REPO=https://git.openstack.org/openstack/${PROJECT}
ARG SCRIPTS=https://github.com/yaodu/common/archive/0.1.2.tar.gz
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends python ca-certificates curl \
&& curl -sSL $SCRIPTS | tar xz -C /tmp/ --strip-components=2 \
&& /tmp/download.sh $DOCKER_REPO $DOCKER_TAG $WHEELS \
&& /tmp/install.sh $PROJECT $GIT_REPO $GIT_REF_REPO $GIT_REF \
&& /tmp/cleanup.sh

View File

@ -1,38 +0,0 @@
#!/bin/bash
set -x
set -e
set -u
COMMON_INSTALL=$(cat <<'END_HEREDOC'
# common install start
&& if [ -n "$WHEELS" ]; then \\\n\
curl -sSL ${WHEELS} > /tmp/wheels.tar.gz; \\\n\
else \\\n\
TOKEN=$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${DOCKER_REPO}:pull" | \\\n\
python -c "import sys, json; print json.load(sys.stdin)['token']") \\\n\
&& BLOB=$(curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/manifests/${DOCKER_TAG} | \\\n\
python -c "import sys, json; print json.load(sys.stdin)['fsLayers'][0]['blobSum']") \\\n\
&& curl -sSL -H "Authorization: Bearer ${TOKEN}" https://registry.hub.docker.com/v2/${DOCKER_REPO}/blobs/${BLOB} > /tmp/wheels.tar.gz; \\\n\
fi \\\n\
&& git clone ${GIT_REPO} /tmp/${PROJECT} \\\n\
&& if [ -n "$GIT_REF" ]; then \\\n\
git --git-dir /tmp/${PROJECT}/.git fetch ${GIT_REF_REPO} ${GIT_REF} \\\n\
&& git --git-dir /tmp/${PROJECT}/.git checkout FETCH_HEAD; \\\n\
fi \\\n\
&& mkdir /tmp/packages \\\n\
&& tar xf /tmp/wheels.tar.gz -C /tmp/packages/ --strip-components=2 root/packages \\\n\
&& curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py \\\n\
&& python get-pip.py \\\n\
&& rm get-pip.py \\\n\
&& pip install --no-cache-dir --no-index --no-compile --find-links /tmp/packages --constraint /tmp/packages/upper-constraints.txt /tmp/${PROJECT} \\\n\
&& groupadd -g 42424 ${PROJECT} \\\n\
&& useradd -u 42424 -g ${PROJECT} -M -d /var/lib/${PROJECT} -s /usr/sbin/nologin -c "${PROJECT} user" ${PROJECT} \\\n\
&& mkdir -p /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \\\n\
&& chown ${PROJECT}:${PROJECT} /etc/${PROJECT} /var/log/${PROJECT} /var/lib/${PROJECT} /var/cache/${PROJECT} \\\
END_HEREDOC
)
for repo in $(ls dockerfiles/Dockerfile-*); do
awk -i inplace -v install="${COMMON_INSTALL}" 'BEGIN {p=1} /^# common install start/ {print install; p=0} /^# common install end/ {p=1} p' ${repo}
done