* Made Docker a proper noun when needed. * Fixed code syntax * Fixed some whitespace issues * Fixed some typos and grammar * Tidied up some examples
4.5 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 command output.
Run an interactive shell in Docker container.
sudo docker run -i -t ubuntu /bin/bashUpdate its dependencies.
apt-get updateInstall python-software-properties.
apt-get -y install python-software-properties
apt-get -y 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.
su postgres -c "createuser -P -d -r -s docker"Create a test database also named docker owned by
previously created docker role.
su postgres -c "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 (you will need to install an editor, e.g.
apt-get install vim):
host all all 0.0.0.0/0 md5Additionaly, 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.
Exit.
exitCreate an image and assign it a name.
<container_id> is in the Bash prompt; you can also
locate it using docker ps -a.
sudo docker commit <container_id> <your username>/postgresqlFinally, 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 (You will need
postgres installed on the machine. For ubuntu, use something like
sudo apt-get install postgresql).
CONTAINER_IP=$(sudo 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 your newly created image on Docker Index.
sudo docker login
Username: <your username>
[...]sudo 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.
sudo docker commit -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"]}' \
<container_id> <your username>/postgresqlFrom now on, just type
docker run <your username>/postgresql and PostgreSQL
should automatically start.