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 generation
- ENV LANG en_US.utf8
- RUN mkdir /docker-entrypoint-initdb.d
- ENV PG_MAJOR 9.6
- ENV PG_VERSION 9.6.2
- ENV PG_SHA256 0187b5184be1c09034e74e44761505e52357248451b0c854dddec6c231fe50c9
- RUN 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.sample
- RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod g+s /var/run/postgresql
- ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH
- ENV PGDATA /var/lib/postgresql/data
- RUN 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/data
- COPY docker-entrypoint.sh /usr/local/bin/
- RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
- ENTRYPOINT ["docker-entrypoint.sh"]
- EXPOSE 5432
- CMD ["postgres"]
|