| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | # vim:set ft=dockerfile:FROM alpine:3.5# alpine includes "postgres" user/group in base install# /etc/passwd:22:postgres:x:70:70::/var/lib/postgresql:/bin/sh# /etc/group:34:postgres:x:70:# su-exec (gosu-compatible) is installed further down# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default# alpine doesn't require explicit locale-file generationENV LANG en_US.utf8RUN mkdir /docker-entrypoint-initdb.dENV PG_MAJOR 9.6ENV PG_VERSION 9.6.2ENV PG_SHA256 0187b5184be1c09034e74e44761505e52357248451b0c854dddec6c231fe50c9RUN set -ex \	\	&& apk add --no-cache --virtual .fetch-deps \		ca-certificates \		openssl \		tar \	\	&& wget -O postgresql.tar.bz2 "https://ftp.postgresql.org/pub/source/v$PG_VERSION/postgresql-$PG_VERSION.tar.bz2" \	&& echo "$PG_SHA256 *postgresql.tar.bz2" | sha256sum -c - \	&& mkdir -p /usr/src/postgresql \	&& tar \		--extract \		--file postgresql.tar.bz2 \		--directory /usr/src/postgresql \		--strip-components 1 \	&& rm postgresql.tar.bz2 \	\	&& apk add --no-cache --virtual .build-deps \		bison \		flex \		gcc \#		krb5-dev \		libc-dev \		libedit-dev \		libxml2-dev \		libxslt-dev \		make \#		openldap-dev \		openssl-dev \		perl \#		perl-dev \#		python-dev \#		python3-dev \#		tcl-dev \		util-linux-dev \		zlib-dev \	\	&& cd /usr/src/postgresql \# update "DEFAULT_PGSOCKET_DIR" to "/var/run/postgresql" (matching Debian)# see https://anonscm.debian.org/git/pkg-postgresql/postgresql.git/tree/debian/patches/51-default-sockets-in-var.patch?id=8b539fcb3e093a521c095e70bdfa76887217b89f	&& awk '$1 == "#define" && $2 == "DEFAULT_PGSOCKET_DIR" && $3 == "\"/tmp\"" { $3 = "\"/var/run/postgresql\""; print; next } { print }' src/include/pg_config_manual.h > src/include/pg_config_manual.h.new \	&& grep '/var/run/postgresql' src/include/pg_config_manual.h.new \	&& mv src/include/pg_config_manual.h.new src/include/pg_config_manual.h \# configure options taken from:# https://anonscm.debian.org/cgit/pkg-postgresql/postgresql.git/tree/debian/rules?h=9.5	&& ./configure \# "/usr/src/postgresql/src/backend/access/common/tupconvert.c:105: undefined reference to `libintl_gettext'"#		--enable-nls \		--enable-integer-datetimes \		--enable-thread-safety \		--enable-tap-tests \# skip debugging info -- we want tiny size instead#		--enable-debug \		--disable-rpath \		--with-uuid=e2fs \		--with-gnu-ld \		--with-pgport=5432 \		--with-system-tzdata=/usr/share/zoneinfo \		--prefix=/usr/local \		\# these make our image abnormally large (at least 100MB larger), which seems uncouth for an "Alpine" (ie, "small") variant :)#		--with-krb5 \#		--with-gssapi \#		--with-ldap \#		--with-tcl \#		--with-perl \#		--with-python \#		--with-pam \		--with-openssl \		--with-libxml \		--with-libxslt \	&& make -j "$(getconf _NPROCESSORS_ONLN)" world \	&& make install-world \	&& make -C contrib install \	\	&& runDeps="$( \		scanelf --needed --nobanner --recursive /usr/local \			| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \			| sort -u \			| xargs -r apk info --installed \			| sort -u \	)" \	&& apk add --no-cache --virtual .postgresql-rundeps \		$runDeps \		bash \		su-exec \# tzdata is optional, but only adds around 1Mb to image size and is recommended by Django documentation:# https://docs.djangoproject.com/en/1.10/ref/databases/#optimizing-postgresql-s-configuration		tzdata \	&& apk del .fetch-deps .build-deps \	&& cd / \	&& rm -rf \		/usr/src/postgresql \		/usr/local/share/doc \		/usr/local/share/man \	&& find /usr/local -name '*.a' -delete# make the sample config easier to munge (and "correct by default")RUN sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/local/share/postgresql/postgresql.conf.sampleRUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod g+s /var/run/postgresqlENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATHENV PGDATA /var/lib/postgresql/dataRUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA" # this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values)VOLUME /var/lib/postgresql/dataCOPY docker-entrypoint.sh /usr/local/bin/RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compatENTRYPOINT ["docker-entrypoint.sh"]EXPOSE 5432CMD ["postgres"]
 |