Use envsubst instead of sed to parse Dockerfile.template
authorW. Trevor King <wking@tremily.us>
Sat, 28 Dec 2013 22:49:15 +0000 (14:49 -0800)
committerW. Trevor King <wking@tremily.us>
Thu, 2 Jan 2014 16:46:12 +0000 (08:46 -0800)
Convert everything in one pass, instead of taking a separate pass for
each variable.  Thanks to aluedeke for mentioning envsubst on #docker;
I hadn't heard of it before.  It's distributed as part of gettext [1],
and not in POSIX [2], so it may be slightly less portable.  However,
envsubst and gettext are in Gentoo's x86 and amd64 stage1s, so it
can't be *that* uncommon ;).

[1]: http://www.gnu.org/software/gettext/
[2]: http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html

15 files changed:
README.md
build.sh
buildbot/Dockerfile.template
elasticsearch/Dockerfile.template
gentoo-en-us/Dockerfile.template
gentoo-java/Dockerfile.template
gentoo-portage/Dockerfile.template
gentoo-syslog/Dockerfile.template
kibana/Dockerfile.template
memcached/Dockerfile.template
nginx/Dockerfile.template
portage/Dockerfile.template
postgresql/Dockerfile.template
redis/Dockerfile.template
stunnel/Dockerfile.template

index f11c5cb7f11e392d9b980485479e83970d4d3e14..6c45ce41da080047bb889b3a169c9cfbd68c7bd1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -3,9 +3,10 @@
 Dockerfiles are sorted into directories with names matching the
 suggested repository.  To avoid duplicating ephemeral data (namespace,
 timestamp tag, …), they appear in the `Dockerfile.template` as markers
-(`NAMESPACE`, `TAG`, …).  The `build.sh` script replaces the markers
-with values while generating a `Dockerfile` from each
-`Dockerfile.template`, and then builds each tag with:
+(`${NAMESPACE}`, `${TAG}`, …).  The `build.sh` script replaces the
+markers with values while generating a `Dockerfile` from each
+`Dockerfile.template` (using [envsubst][]), and then builds each tag
+with:
 
     $ docker build -t $NAMESPACE/$REPO:$TAG $REPO
 
@@ -48,5 +49,6 @@ from the host.
 [Docker]: http://www.docker.io/
 [Dockerfiles]: http://www.docker.io/learn/dockerfile/
 [Gentoo]: http://www.gentoo.org/
+[envsubst]: http://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html
 [parameter-expansion]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02
 [3156]: https://github.com/dotcloud/docker/issues/3156
index d4ad779adbb27385249c3009dbb95a5586d5a76e..5d59a7a45c0dcb6454cfe6f05633169aa169f7b6 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -120,10 +120,16 @@ for REPO in ${REPOS}; do
        REPO_IMAGES=$(docker images "${NAMESPACE}/${REPO}")
        REPO_MATCHES=$(echo "${REPO_IMAGES}" | grep "${DATE}")
        if [ -z "${REPO_MATCHES}" ]; then
-               cp "${REPO}/Dockerfile.template" "${REPO}/Dockerfile"
-               sed -i "s|TAG|${DATE}|g" "${REPO}/Dockerfile"
-               sed -i "s|NAMESPACE|${NAMESPACE}|g" "${REPO}/Dockerfile"
-               sed -i "s|MAINTAINER.*|MAINTAINER ${AUTHOR}|g" "${REPO}/Dockerfile"
+               env -i \
+                       NAMESPACE="${NAMESPACE}" \
+                       TAG="${DATE}" \
+                       MAINTAINER="${AUTHOR}" \
+                       envsubst '
+                               ${NAMESPACE}
+                               ${TAG}
+                               ${MAINTAINER}
+                               ' \
+                               < "${REPO}/Dockerfile.template" > "${REPO}/Dockerfile"
                docker build -t "${NAMESPACE}/${REPO}:${DATE}" "${REPO}" || die "failed to build"
        fi
        docker tag -f "${NAMESPACE}/${REPO}:${DATE}" "${NAMESPACE}/${REPO}:latest" || die "failed to tag"
index 1acad24cf27409623e85d9a8b4b275eb69a9975e..ccf3ab8e06f2292f3d7388e8afaa9415616ad8e5 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN echo 'USE="${USE} sqlite"' >> /etc/portage/make.conf
 RUN echo 'PYTHON_TARGETS="python2_7 python3_3"' >> /etc/portage/make.conf
 RUN echo 'PYTHON_SINGLE_TARGET="python3_3"' >> /etc/portage/make.conf
index fa71ff05667a3c9bbe6551f7a750dea6660e51c5..baeec80ea19815a70168d765eff49b1deb42d837 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-java:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-java:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN echo 'app-misc/elasticsearch ~amd64' >> /etc/portage/package.accept_keywords
 RUN emerge -v app-misc/elasticsearch
 RUN eselect news read new
index 9ae7040eba867a1fbc4570e21e57033b7908394a..cb595fd85fca5c773a9085fbfc878b8b28230cd5 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-portage:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-portage:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN echo en_US ISO-8859-1 > /etc/locale.gen
 RUN echo en_US.UTF-8 UTF-8 >> /etc/locale.gen
 RUN locale-gen
index 1e153b9ce198a43de5ff22e734c80c00b8fecc18..4c5cf1a02c709e09b0b38ba25abd781e891166b1 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN echo 'USE="${USE} -X -cups"' >> /etc/portage/make.conf
 RUN emerge -v dev-java/icedtea-bin
 RUN eselect news read new
index bc5fc9ccd4e46d13571e0be2c7cc35e7256f711a..4bae466a27e1a6b7d18df6b9054928a9523fdcec 100644 (file)
@@ -22,8 +22,8 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo:TAG
-MAINTAINER A. U. Thor <author@example.com>
+FROM ${NAMESPACE}/gentoo:${TAG}
+MAINTAINER ${MAINTAINER}
 RUN sed -i 's/#rc_sys=""/rc_sys="lxc"/g' /etc/rc.conf
 RUN echo 'GENTOO_MIRRORS="http://mirror.mcs.anl.gov/pub/gentoo/"' >> /etc/portage/make.conf
 #RUN echo 'SYNC="rsync://rsync.us.gentoo.org"' >> /etc/portage/make.conf
index 9550b718032c9131bbe3b46d076b3b66cb59c728..7f5ee2545514cbaf2c07e97f8d135de71ff91e44 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-en-us:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-en-us:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN emerge -v sys-process/vixie-cron app-admin/syslog-ng app-admin/logrotate
 RUN rc-update add syslog-ng default
 RUN rc-update add vixie-cron default
index d335dfac1412f608c558510811bbd93432c3a688..231b316c234635638ed99c6cca92672e671a4d1c 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/nginx:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/nginx:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone4.tar.gz
 RUN tar -xvf kibana-3.0.0milestone4.tar.gz --strip-components 1 -C /var/www/localhost/htdocs
 RUN sed -i 's|"http://"+window.location.hostname+":9200"|"ELASTICSEARCH_URL"|' /var/www/localhost/htdocs/config.js
index 4522fcb3f5a47d5bf1f0a2267053ee4768b42853..f983cf179fed5d5decbca2a4a099758d4c3fa836 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN emerge -v net-misc/memcached
 RUN eselect news read new
 RUN rc-update add memcached default
index bdae9944571b7681377a839c5521f65db6778de2..3cf7124d2e4a93ac9fcf57a16637ca94c1ff3608 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN echo 'NGINX_MODULES_HTTP="access auth_basic autoindex charset fastcgi gzip gzip_static limit_req map proxy rewrite scgi ssi stub_status"' >> /etc/portage/make.conf
 RUN echo 'NGINX_MODULES_MAIL=""' >> /etc/portage/make.conf
 RUN emerge -v www-servers/nginx
index 65d15209399fac291a8f85b3d528617e0a0f69a2..7c321f98acf75e2393d94186c27636b170056f7f 100644 (file)
@@ -22,8 +22,8 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/portage-import:TAG
-MAINTAINER A. U. Thor <author@example.com>
+FROM ${NAMESPACE}/portage-import:${TAG}
+MAINTAINER ${MAINTAINER}
 
 # -volumes-from doesn't map names, so we need to shift /portage to
 #  /usr/portage.  Add a statically-linked BusyBox for RUN commands.
index 456cf099152baa36d51ebe5da260724f5762c31e..a69b6950d91c90ef3864803e7549eff8a58eeee7 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN emerge -v dev-db/postgresql-server
 RUN eselect news read new
 RUN rc-update add $(basename /etc/init.d/postgresql-*) default
index 081956feba0c17a90233ec151039fc3b0627a136..1b3e39438a44ee5c0b279d9211ec0e34ef6bf840 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN emerge -v dev-db/redis
 RUN eselect news read new
 RUN rc-update add redis default
index d5ed4add7a27724c33c0d22b2fef6b1f9bf3e8ce..2074174fa5c4ff67c5ca68fd67b22f641385aa99 100644 (file)
@@ -22,9 +22,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-FROM NAMESPACE/gentoo-syslog:TAG
-MAINTAINER A. U. Thor <author@example.com>
-#VOLUME ["PORTAGE:/usr/portage:ro", "PORTAGE/distfiles:/usr/portage/distfiles:rw"]
+FROM ${NAMESPACE}/gentoo-syslog:${TAG}
+MAINTAINER ${MAINTAINER}
+#VOLUME ["${PORTAGE}:/usr/portage:ro", "${PORTAGE}/distfiles:/usr/portage/distfiles:rw"]
 RUN emerge -v net-misc/stunnel
 RUN eselect news read new
 RUN rc-update add stunnel default