mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
44fe8cbbd1
These were found using `git grep -nE '[^-a-zA-Z0-9<>]-[a-zA-Z0-9]{2}'` (fair warning: _many_ false positives there). Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
117 lines
3.5 KiB
ReStructuredText
117 lines
3.5 KiB
ReStructuredText
: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
|
|
|