Last active
February 14, 2019 11:35
-
-
Save hasanfd/f4cd207252a8ee6ec6848b37c1fbcab4 to your computer and use it in GitHub Desktop.
docker file for postgres 9.6.11 with encoding ISO-8859-9(turkish). modified from https://github.com/docker-library/postgres/blob/master/9.6/Dockerfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# vim:set ft=dockerfile: | |
FROM debian:stretch-slim | |
RUN set -ex; \ | |
if ! command -v gpg > /dev/null; then \ | |
apt-get update; \ | |
apt-get install -y --no-install-recommends \ | |
gnupg \ | |
dirmngr \ | |
; \ | |
rm -rf /var/lib/apt/lists/*; \ | |
fi | |
# explicitly set user/group IDs | |
RUN set -eux; \ | |
groupadd -r postgres --gid=999; \ | |
# https://salsa.debian.org/postgresql/postgresql-common/blob/997d842ee744687d99a2b2d95c1083a2615c79e8/debian/postgresql-common.postinst#L32-35 | |
useradd -r -g postgres --uid=999 --home-dir=/var/lib/postgresql --shell=/bin/bash postgres; \ | |
# also create the postgres user's home directory with appropriate permissions | |
# see https://github.com/docker-library/postgres/issues/274 | |
mkdir -p /var/lib/postgresql; \ | |
chown -R postgres:postgres /var/lib/postgresql | |
# grab gosu for easy step-down from root | |
ENV GOSU_VERSION 1.11 | |
RUN set -x \ | |
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \ | |
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ | |
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ | |
&& export GNUPGHOME="$(mktemp -d)" \ | |
&& gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ | |
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ | |
&& { command -v gpgconf > /dev/null && gpgconf --kill all || :; } \ | |
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \ | |
&& chmod +x /usr/local/bin/gosu \ | |
&& gosu nobody true \ | |
&& apt-get purge -y --auto-remove ca-certificates wget | |
# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default | |
RUN set -eux; \ | |
if [ -f /etc/dpkg/dpkg.cfg.d/docker ]; then \ | |
# if this file exists, we're likely in "debian:xxx-slim", and locales are thus being excluded so we need to remove that exclusion (since we need locales) | |
grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; \ | |
sed -ri '/\/usr\/share\/locale/d' /etc/dpkg/dpkg.cfg.d/docker; \ | |
! grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; \ | |
fi; \ | |
apt-get update; apt-get install -y locales; rm -rf /var/lib/apt/lists/*; \ | |
localedef -i tr_TR -c -f ISO-8859-9 -A /usr/share/locale/locale.alias tr_TR.ISO-8859-9 | |
ENV LANG tr_TR.ISO-8859-9 | |
# install "nss_wrapper" in case we need to fake "/etc/passwd" and "/etc/group" (especially for OpenShift) | |
# https://github.com/docker-library/postgres/issues/359 | |
# https://cwrap.org/nss_wrapper.html | |
RUN set -eux; \ | |
apt-get update; \ | |
apt-get install -y --no-install-recommends libnss-wrapper; \ | |
rm -rf /var/lib/apt/lists/* | |
RUN mkdir /docker-entrypoint-initdb.d | |
RUN set -ex; \ | |
# pub 4096R/ACCC4CF8 2011-10-13 [expires: 2019-07-02] | |
# Key fingerprint = B97B 0AFC AA1A 47F0 44F2 44A0 7FCC 7D46 ACCC 4CF8 | |
# uid PostgreSQL Debian Repository | |
key='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8'; \ | |
export GNUPGHOME="$(mktemp -d)"; \ | |
gpg --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys "$key"; \ | |
gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/postgres.gpg; \ | |
command -v gpgconf > /dev/null && gpgconf --kill all; \ | |
rm -rf "$GNUPGHOME"; \ | |
apt-key list | |
ENV PG_MAJOR 9.6 | |
ENV PG_VERSION 9.6.11-1.pgdg90+1 | |
RUN set -ex; \ | |
\ | |
# see note below about "*.pyc" files | |
export PYTHONDONTWRITEBYTECODE=1; \ | |
\ | |
dpkgArch="$(dpkg --print-architecture)"; \ | |
case "$dpkgArch" in \ | |
amd64|i386|ppc64el) \ | |
# arches officialy built by upstream | |
echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main $PG_MAJOR" > /etc/apt/sources.list.d/pgdg.list; \ | |
apt-get update; \ | |
;; \ | |
*) \ | |
# we're on an architecture upstream doesn't officially build for | |
# let's build binaries from their published source packages | |
echo "deb-src http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main $PG_MAJOR" > /etc/apt/sources.list.d/pgdg.list; \ | |
\ | |
case "$PG_MAJOR" in \ | |
9.* | 10 ) ;; \ | |
*) \ | |
# https://github.com/docker-library/postgres/issues/484 (clang-6.0 required, only available in stretch-backports) | |
# TODO remove this once we hit buster+ | |
echo 'deb http://deb.debian.org/debian stretch-backports main' >> /etc/apt/sources.list.d/pgdg.list; \ | |
;; \ | |
esac; \ | |
\ | |
tempDir="$(mktemp -d)"; \ | |
cd "$tempDir"; \ | |
\ | |
savedAptMark="$(apt-mark showmanual)"; \ | |
\ | |
# build .deb files from upstream's source packages (which are verified by apt-get) | |
apt-get update; \ | |
apt-get build-dep -y \ | |
postgresql-common pgdg-keyring \ | |
"postgresql-$PG_MAJOR=$PG_VERSION" \ | |
; \ | |
DEB_BUILD_OPTIONS="nocheck parallel=$(nproc)" \ | |
apt-get source --compile \ | |
postgresql-common pgdg-keyring \ | |
"postgresql-$PG_MAJOR=$PG_VERSION" \ | |
; \ | |
# we don't remove APT lists here because they get re-downloaded and removed later | |
\ | |
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies | |
# (which is done after we install the built packages so we don't have to redownload any overlapping dependencies) | |
apt-mark showmanual | xargs apt-mark auto > /dev/null; \ | |
apt-mark manual $savedAptMark; \ | |
\ | |
# create a temporary local APT repo to install from (so that dependency resolution can be handled by APT, as it should be) | |
ls -lAFh; \ | |
dpkg-scanpackages . > Packages; \ | |
grep '^Package: ' Packages; \ | |
echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list; \ | |
# work around the following APT issue by using "Acquire::GzipIndexes=false" (overriding "/etc/apt/apt.conf.d/docker-gzip-indexes") | |
# Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied) | |
# ... | |
# E: Failed to fetch store:/var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied) | |
apt-get -o Acquire::GzipIndexes=false update; \ | |
;; \ | |
esac; \ | |
\ | |
apt-get install -y postgresql-common; \ | |
sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-common/createcluster.conf; \ | |
apt-get install -y \ | |
"postgresql-$PG_MAJOR=$PG_VERSION" \ | |
"postgresql-contrib-$PG_MAJOR=$PG_VERSION" \ | |
; \ | |
\ | |
rm -rf /var/lib/apt/lists/*; \ | |
\ | |
if [ -n "$tempDir" ]; then \ | |
# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) | |
apt-get purge -y --auto-remove; \ | |
rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \ | |
fi; \ | |
\ | |
# some of the steps above generate a lot of "*.pyc" files (and setting "PYTHONDONTWRITEBYTECODE" beforehand doesn't propagate properly for some reason), so we clean them up manually (as long as they aren't owned by a package) | |
find /usr -name '*.pyc' -type f -exec bash -c 'for pyc; do dpkg -S "$pyc" &> /dev/null || rm -vf "$pyc"; done' -- '{}' + | |
# make the sample config easier to munge (and "correct by default") | |
RUN set -eux; \ | |
dpkg-divert --add --rename --divert "/usr/share/postgresql/postgresql.conf.sample.dpkg" "/usr/share/postgresql/$PG_MAJOR/postgresql.conf.sample"; \ | |
cp -v /usr/share/postgresql/postgresql.conf.sample.dpkg /usr/share/postgresql/postgresql.conf.sample; \ | |
ln -sv ../postgresql.conf.sample "/usr/share/postgresql/$PG_MAJOR/"; \ | |
sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/share/postgresql/postgresql.conf.sample; \ | |
grep -F "listen_addresses = '*'" /usr/share/postgresql/postgresql.conf.sample | |
RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql | |
ENV PATH $PATH:/usr/lib/postgresql/$PG_MAJOR/bin | |
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"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment