123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- :title: PostgreSQL service How-To
- :description: Running and installing a PostgreSQL service
- :keywords: docker, example, package installation, postgresql
- .. _postgresql_service:
- PostgreSQL Service
- ==================
- .. include:: example_header.inc
- Installing PostgreSQL on Docker
- -------------------------------
- Assuming there is no Docker image that suits your needs in `the index`_, you
- can create one yourself.
- .. _the index: http://index.docker.io
- Start by creating a new Dockerfile:
- .. note::
- This PostgreSQL setup is for development only purposes. Refer
- to the PostgreSQL documentation to fine-tune these settings so that it
- is suitably secure.
- .. literalinclude:: postgresql_service.Dockerfile
- Build an image from the Dockerfile assign it a name.
- .. code-block:: bash
- $ sudo docker build -t eg_postgresql .
- And run the PostgreSQL server container (in the foreground):
- .. code-block:: bash
- $ sudo docker run --rm -P --name pg_test eg_postgresql
- There are 2 ways to connect to the PostgreSQL server. We can use
- :ref:`working_with_links_names`, or we can access it from our host (or the network).
- .. note:: The ``--rm`` removes the container and its image when the container
- exists successfully.
- Using container linking
- ^^^^^^^^^^^^^^^^^^^^^^^
- Containers can be linked to another container's ports directly using
- ``--link remote_name:local_alias`` in the client's ``docker run``. This will
- set a number of environment variables that can then be used to connect:
- .. code-block:: bash
- $ sudo docker run --rm -t -i --link pg_test:pg eg_postgresql bash
- postgres@7ef98b1b7243:/$ psql -h $PG_PORT_5432_TCP_ADDR -p $PG_PORT_5432_TCP_PORT -d docker -U docker --password
- Connecting from your host system
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Assuming you have the postgresql-client installed, you can use the host-mapped port
- to test as well. You need to use ``docker ps`` to find out what local host port the
- container is mapped to first:
- .. code-block:: bash
- $ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 5e24362f27f6 eg_postgresql:latest /usr/lib/postgresql/ About an hour ago Up About an hour 0.0.0.0:49153->5432/tcp pg_test
- $ psql -h localhost -p 49153 -d docker -U docker --password
- Testing the database
- ^^^^^^^^^^^^^^^^^^^^
- Once you have authenticated and have a ``docker =#`` prompt, you can
- create a table and populate it.
- .. code-block:: bash
- psql (9.3.1)
- Type "help" for help.
- docker=# CREATE TABLE cities (
- docker(# name varchar(80),
- docker(# location point
- docker(# );
- CREATE TABLE
- docker=# INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
- INSERT 0 1
- docker=# select * from cities;
- name | location
- ---------------+-----------
- San Francisco | (-194,53)
- (1 row)
- Using the container volumes
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- You can use the defined volumes to inspect the PostgreSQL log files and to backup your
- configuration and data:
- .. code-block:: bash
- docker run --rm --volumes-from pg_test -t -i busybox sh
- / # ls
- bin etc lib linuxrc mnt proc run sys usr
- dev home lib64 media opt root sbin tmp var
- / # ls /etc/postgresql/9.3/main/
- environment pg_hba.conf postgresql.conf
- pg_ctl.conf pg_ident.conf start.conf
- /tmp # ls /var/log
- ldconfig postgresql
|