1
0
mirror of https://github.com/moby/moby.git synced 2025-12-10 21:42:47 +03:00
Files
moby/docs/sources/examples/postgresql_service.rst
elmendalerenda 83acd37161 fixed postgresql conf setting
small typo, changed listen_address to listen_addresses
2013-08-19 14:20:25 +01:00

4.2 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.

Note

As of version 0.5.2, docker requires root privileges to run. You have to either manually adjust your system configuration (permissions on /var/run/docker.sock or sudo config), or prefix docker with sudo. Check this thread for details.

Installing PostgreSQL on Docker

For clarity I won't be showing commands output.

Run an interactive shell in Docker container.

sudo docker run -i -t ubuntu /bin/bash

Update its dependencies.

apt-get update

Install python-software-properies.

apt-get install python-software-properties
apt-get install software-properties-common

Add 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 update

Finally, install PostgreSQL 9.2

apt-get -y install postgresql-9.2 postgresql-client-9.2 postgresql-contrib-9.2

Now, 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 docker

Create a test database also named docker owned by previously created docker role.

sudo -u postgres createdb -O docker docker

Adjust 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               md5

Additionaly, inside /etc/postgresql/9.2/main/postgresql.conf uncomment listen_addresses so it is as follows:

listen_addresses='*'

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>/postgresql

Finally, run PostgreSQL server via docker.

CONTAINER=$(sudo 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=$(sudo docker inspect $CONTAINER | grep IPAddress | awk '{ print $2 }' | tr -d ',"')
psql -h $CONTAINER_IP -p 5432 -d docker -U docker -W

As before, create roles or databases if needed.

psql (9.2.4)
Type "help" for help.

docker=# CREATE DATABASE foo OWNER=docker;
CREATE DATABASE

Additionally, publish there your newly created image on Docker Index.

sudo docker login
Username: <your username>
[...]
sudo docker push <your username>/postgresql

PostgreSQL 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.

sudo 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.