3.9 KiB
- title
- PostgreSQL service How-To
- description
- Running and installing a PostgreSQL service
- keywords
- docker, example, package installation, postgresql
PostgreSQL Service
Note
A shorter version of this blog post.
Installing PostgreSQL on Docker
For clarity I won't be showing commands output.
Run an interactive shell in Docker container.
docker run -i -t base /bin/bashUpdate its dependencies.
apt-get updateInstall python-software-properies.
apt-get install python-software-properties
apt-get install software-properties-commonAdd Pitti's PostgreSQL repository. It contains the most recent stable
release of PostgreSQL i.e. 9.2.
add-apt-repository ppa:pitti/postgresql
apt-get updateFinally, install PostgreSQL 9.2
apt-get -y install postgresql-9.2 postgresql-client-9.2 postgresql-contrib-9.2Now, create a PostgreSQL superuser role that can create databases and other roles. Following Vagrant's convention the role will be named docker with docker password assigned to it.
sudo -u postgres createuser -P -d -r -s dockerCreate a test database also named docker owned by
previously created docker role.
sudo -u postgres createdb -O docker dockerAdjust PostgreSQL configuration so that remote connections to the
database are possible. Make sure that inside
/etc/postgresql/9.2/main/pg_hba.conf you have following
line:
host all all 0.0.0.0/0 md5Additionaly, inside
/etc/postgresql/9.2/main/postgresql.conf uncomment
listen_address so it is as follows:
listen_address='*'Note: this PostgreSQL setup is for development only purposes. Refer to PostgreSQL documentation how to fine-tune these settings so that it is enough secure.
Create an image and assign it a name.
<container_id> is in the Bash prompt; you can also
locate it using docker ps -a.
docker commit <container_id> <your username>/postgresqlFinally, run PostgreSQL server via docker.
CONTAINER=$(docker run -d -p 5432 \
-t <your username>/postgresql \
/bin/su postgres -c '/usr/lib/postgresql/9.2/bin/postgres \
-D /var/lib/postgresql/9.2/main \
-c config_file=/etc/postgresql/9.2/main/postgresql.conf')Connect the PostgreSQL server using psql.
CONTAINER_IP=$(docker inspect $CONTAINER | grep IPAddress | awk '{ print $2 }' | tr -d ',"')
psql -h $CONTAINER_IP -p 5432 -d docker -U docker -WAs before, create roles or databases if needed.
psql (9.2.4)
Type "help" for help.
docker=# CREATE DATABASE foo OWNER=docker;
CREATE DATABASEAdditionally, publish there your newly created image on Docker Index.
docker login
Username: <your username>
[...]docker push <your username>/postgresqlPostgreSQL service auto-launch
Running our image seems complicated. We have to specify the whole
command with docker run. Let's simplify it so the service
starts automatically when the container starts.
docker commit <container_id> <your username>/postgresql -run='{"Cmd": \
["/bin/su", "postgres", "-c", "/usr/lib/postgresql/9.2/bin/postgres -D \
/var/lib/postgresql/9.2/main -c \
config_file=/etc/postgresql/9.2/main/postgresql.conf"], PortSpecs": ["5432"]}From now on, just type
docker run <your username>/postgresql and PostgreSQL
should automatically start.