diff --git a/docs/sources/examples/index.rst b/docs/sources/examples/index.rst index d017f641b1..58da18e344 100644 --- a/docs/sources/examples/index.rst +++ b/docs/sources/examples/index.rst @@ -1,6 +1,6 @@ :title: Docker Examples :description: Examples on how to use Docker -:keywords: docker, hello world, node, nodejs, python, couch, couchdb, redis, ssh, sshd, examples +:keywords: docker, hello world, node, nodejs, python, couch, couchdb, redis, ssh, sshd, examples, postgresql @@ -20,3 +20,4 @@ Contents: running_redis_service running_ssh_service couchdb_data_volumes + postgresql_service diff --git a/docs/sources/examples/postgresql_service.rst b/docs/sources/examples/postgresql_service.rst new file mode 100644 index 0000000000..c829a53a86 --- /dev/null +++ b/docs/sources/examples/postgresql_service.rst @@ -0,0 +1,149 @@ +:title: PostgreSQL service How-To +:description: Running and installing a PostgreSQL service +:keywords: docker, example, package installation, postgresql + +.. _postgresql_service: + +PostgreSQL Service +================== + +.. note:: + + A shorter version of `this blog post`_. + +.. _this blog post: http://zaiste.net/2013/08/docker_postgresql_how_to/ + +Installing PostgreSQL on Docker +------------------------------- + +For clarity I won't be showing commands output. + +Run an interactive shell in Docker container. + +.. code-block:: bash + + docker run -i -t base /bin/bash + +Update its dependencies. + +.. code-block:: bash + + apt-get update + +Install ``python-software-properies``. + +.. code-block:: bash + + 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``. + +.. code-block:: bash + + add-apt-repository ppa:pitti/postgresql + apt-get update + +Finally, install PostgreSQL 9.2 + +.. code-block:: bash + + 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. + +.. code-block:: bash + + sudo -u postgres createuser -P -d -r -s docker + +Create a test database also named ``docker`` owned by previously created ``docker`` +role. + +.. code-block:: bash + + 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: + +.. code-block:: bash + + host all all 0.0.0.0/0 md5 + +Additionaly, inside ``/etc/postgresql/9.2/main/postgresql.conf`` uncomment +``listen_address`` so it is as follows: + +.. code-block:: bash + + 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. ```` is in the Bash prompt; +you can also locate it using ``docker ps -a``. + +.. code-block:: bash + + docker commit /postgresql + +Finally, run PostgreSQL server via ``docker``. + +.. code-block:: bash + + CONTAINER=$(docker run -d -p 5432 \ + -t /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``. + +.. code-block:: bash + + CONTAINER_IP=$(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. + +.. code-block:: bash + + 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. + +.. code-block:: bash + + docker login + Username: + [...] + +.. code-block:: bash + + docker push /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. + +.. code-block:: bash + + docker commit /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 /postgresql`` and PostgreSQL +should automatically start.