Skip to content

Commit

Permalink
Add version 10.1.1 and version 11.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
chernoskutov committed Dec 3, 2018
1 parent 22188d8 commit 6e0f3e7
Show file tree
Hide file tree
Showing 4 changed files with 462 additions and 0 deletions.
61 changes: 61 additions & 0 deletions 10/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# vim:set ft=dockerfile:
FROM debian:stretch

# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

# Env section
ENV PG_REPO_KEY GPG-KEY-POSTGRESPRO
ENV GPG_KEY B42F6819007F00F88E364FD4036A9C25BF357DD4
ENV PG_MAJOR 10
ENV PG_MINOR 1.1
ENV PG_RELEASE $PG_MAJOR.$PG_MINOR
ENV PG_VERSION $PG_RELEASE-1.stretch.pro
ENV GOSU_VERSION 1.11
ENV LANG en_US.utf8

# explicitly set user/group IDs
RUN groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 postgres

# grab gosu for easy step-down from root
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates wget gnupg dirmngr lsb-release \
&& 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 --no-tty --keyserver ha.pool.sks-keyservers.net --recv-keys $GPG_KEY \
|| gpg --no-tty --keyserver pgp.mit.edu --recv-keys $GPG_KEY \
|| gpg --no-tty --keyserver keyserver.pgp.com --recv-keys $GPG_KEY) \
&& gpg --no-tty --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& wget --quiet -O - http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO | apt-key add - \
&& 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 gnupg dirmngr

RUN mkdir /docker-entrypoint-initdb.d

RUN mkdir /docker-entrypoint-init.d

# Install pgpro
RUN echo "deb http://repo.postgrespro.ru/pgpro-archive/pgpro-$PG_RELEASE/debian $(lsb_release -cs) main" > /etc/apt/sources.list.d/postgrespro.list \
&& apt-get update \
&& apt-get install -y postgrespro-std-$PG_MAJOR \
&& rm -rf /var/lib/apt/lists/*

RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql

ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH
ENV PGDATA /var/lib/postgresql/data
ENV PGLOG /var/log/postgresql
VOLUME /var/lib/postgresql/data

COPY docker-entrypoint.sh /

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 5432
CMD ["postgres"]
170 changes: 170 additions & 0 deletions 10/docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
#!/bin/bash
set -e

function enableConfOption()
{
local FILE=${1:-}
if [ -f "$FILE" ]; then
local OPTION=${2:-}
if [ ! -z "$OPTION" ]; then
sed -ri "s!^#($OPTION\s*=\s*\S+.*)!\1!" "$FILE"
fi
fi
}

function disableConfOption()
{
local FILE=${1:-}
if [ -f "$FILE" ]; then
local OPTION=${2:-}
if [ ! -z "$OPTION" ]; then
sed -ri "s!^($OPTION\s*=\s*\S+.*)!#\1!" "$FILE"
fi
fi
}

function setConfOption()
{
local FILE=${1:-}
if [ -f "$FILE" ]; then
local OPTION=${2:-}
if [ ! -z "$OPTION" ]; then
local VALUE=${3:-}
sed -ri "s!^#?($OPTION)\s*=\s*\S+.*!\1 = $VALUE!" "$FILE"
fi
fi
}

if [ "${1:0:1}" = '-' ]; then
set -- postgres "$@"
fi

if [ "$1" = 'postgres' ]; then
mkdir -p "$PGDATA"
chmod 700 "$PGDATA"
chown -R postgres "$PGDATA"

mkdir -p /run/postgresql
chmod g+s /run/postgresql
chown -R postgres /run/postgresql

mkdir -p "$PGLOG"
chmod g+s "$PGLOG"
chmod a+rX "$PGLOG"

# runs scripts every time before init or starts postgres professional
for f in /docker-entrypoint-init.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done

# look specifically for PG_VERSION, as it is expected in the DB dir
if [ ! -s "$PGDATA/PG_VERSION" ]; then
eval "gosu postgres initdb $POSTGRES_INITDB_ARGS"

# check password first so we can output the warning before postgres
# messes it up
if [ "$POSTGRES_PASSWORD" ]; then
pass="PASSWORD '$POSTGRES_PASSWORD'"
authMethod=md5
else
# The - option suppresses leading tabs but *not* spaces. :)
cat >&2 <<-'EOWARN'
****************************************************
WARNING: No password has been set for the database.
This will allow anyone with access to the
Postgres port to access your database. In
Docker's default configuration, this is
effectively any other container on the same
system.
Use "-e POSTGRES_PASSWORD=password" to set
it in "docker run".
****************************************************
EOWARN

pass=
authMethod=trust
fi

{ echo; echo "host all all 0.0.0.0/0 $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null

CONF=$PGDATA/postgresql.conf
setConfOption "$CONF" "listen_addresses" "'*'"

# Init log if needed
if [ ${LOG_ENABLED:-0} -eq 1 ]; then
setConfOption "$CONF" "logging_collector" "on"
enableConfOption "$CONF" "log_destination"
setConfOption "$CONF" "log_directory" "'$PGLOG'"
enableConfOption "$CONF" "log_filename"
setConfOption "$CONF" "log_truncate_on_rotation" "on"
enableConfOption "$CONF" "log_min_messages"
setConfOption "$CONF" "log_min_duration_statement" "0"
setConfOption "$CONF" "log_duration" "on"
setConfOption "$CONF" "log_checkpoints" "on"
setConfOption "$CONF" "log_connections" "on"
setConfOption "$CONF" "log_disconnections" "on"
setConfOption "$CONF" "log_lock_waits" "on"
setConfOption "$CONF" "log_statement" "'all'"
setConfOption "$CONF" "log_temp_files" "0"
setConfOption "$CONF" "log_line_prefix" "'%m [%p] db/user/app: \"%d/%u/%a\" '"
chmod a+rwX $PGLOG
fi

# internal start of server in order to allow set-up using psql-client
# does not listen on external TCP/IP and waits until start finishes
gosu postgres pg_ctl -D "$PGDATA" \
-o "-c listen_addresses='localhost'" \
-w start

: ${POSTGRES_USER:=postgres}
: ${POSTGRES_DB:=$POSTGRES_USER}
export POSTGRES_USER POSTGRES_DB

psql=( psql -v ON_ERROR_STOP=1 )

if [ "$POSTGRES_DB" != 'postgres' ]; then
"${psql[@]}" --username postgres <<-EOSQL
CREATE DATABASE "$POSTGRES_DB" ;
EOSQL
echo
fi

if [ "$POSTGRES_USER" = 'postgres' ]; then
op='ALTER'
else
op='CREATE'
fi
"${psql[@]}" --username postgres <<-EOSQL
$op USER "$POSTGRES_USER" WITH SUPERUSER $pass ;
EOSQL
echo

psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" )

echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done

gosu postgres pg_ctl -D "$PGDATA" -m fast -w stop

echo
echo 'PostgreSQL init process complete; ready for start up.'
echo
fi

exec gosu postgres "$@"
fi

exec "$@"
61 changes: 61 additions & 0 deletions 11/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# vim:set ft=dockerfile:
FROM debian:stretch

# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

# Env section
ENV PG_REPO_KEY GPG-KEY-POSTGRESPRO
ENV GPG_KEY B42F6819007F00F88E364FD4036A9C25BF357DD4
ENV PG_MAJOR 11
ENV PG_MINOR 1.1
ENV PG_RELEASE $PG_MAJOR.$PG_MINOR
ENV PG_VERSION $PG_RELEASE-1.stretch.pro
ENV GOSU_VERSION 1.11
ENV LANG en_US.utf8

# explicitly set user/group IDs
RUN groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 postgres

# grab gosu for easy step-down from root
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates wget gnupg dirmngr lsb-release \
&& 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 --no-tty --keyserver ha.pool.sks-keyservers.net --recv-keys $GPG_KEY \
|| gpg --no-tty --keyserver pgp.mit.edu --recv-keys $GPG_KEY \
|| gpg --no-tty --keyserver keyserver.pgp.com --recv-keys $GPG_KEY) \
&& gpg --no-tty --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& wget --quiet -O - http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO | apt-key add - \
&& 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 gnupg dirmngr

RUN mkdir /docker-entrypoint-initdb.d

RUN mkdir /docker-entrypoint-init.d

# Install pgpro
RUN echo "deb http://repo.postgrespro.ru/pgpro-archive/pgpro-$PG_RELEASE/debian $(lsb_release -cs) main" > /etc/apt/sources.list.d/postgrespro.list \
&& apt-get update \
&& apt-get install -y postgrespro-std-$PG_MAJOR \
&& rm -rf /var/lib/apt/lists/*

RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql

ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH
ENV PGDATA /var/lib/postgresql/data
ENV PGLOG /var/log/postgresql
VOLUME /var/lib/postgresql/data

COPY docker-entrypoint.sh /

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 5432
CMD ["postgres"]
Loading

0 comments on commit 6e0f3e7

Please sign in to comment.