view docker/README.md @ 2778:7ebd4154894e

Adopt container names to fix GeoServer startup Since the container name is used as host name, GeoServer failed to start with version 2.15.0 because of the underscore. Adopted all container names to avoid similar problems in future and to keep the names looking consistent.
author Tom Gottfried <tom@intevation.de>
date Fri, 22 Mar 2019 13:21:09 +0100
parents b6b699385302
children 8dd59e2c9d3d
line wrap: on
line source

# Build and run your dev environment using Docker

- [Build and run your dev environment using Docker](#build-and-run-your-dev-environment-using-docker)
  - [Build and run your gemma application with Docker Compose in one step](#build-and-run-your-gemma-application-with-docker-compose-in-one-step)
    - [Hints and tricks](#hints-and-tricks)
  - [Build and run the gemma application with Docker manually](#build-and-run-the-gemma-application-with-docker-manually)
    - [Network setup](#network-setup)
    - [Database setup](#database-setup)
    - [Create ER diagrams](#create-er-diagrams)
    - [GeoServer setup](#geoserver-setup)
    - [Gemma backend setup](#gemma-backend-setup)
    - [SPA setup](#spa-setup)

Run the `build` commands from the root of your checkout, because it is
assumed as the context!

Other example commands, too, assume they are run from the root of your
checkout.

## Build and run your gemma application with Docker Compose in one step

Requires at least Docker Engine release 17.12.0+. Because of Compose file
format 3.5 for named networks.

If you fiddle around with the following error message: `Version in
"./docker-compose.yml" is unsupported` take a look at the comments in the
head of the `docker-compose.yml` file.

From your docker directory, start up your gemma application by running
`docker-compose up`. Here an example for build and running the gemma
application:

```shell
cd docker
docker-compose -p gemma up
```

Note: The `-p` flag specifies an alternate project name (default: directory
name).

Now you should be able to use the application in your browser by going to
`http://HOSTNAME:8290`, with `HOSTNAME` being the hostname of your docker
host.

Stop the application, either by running `docker-compose down` from within your
docker directory in the second terminal, or by hitting `CTRL+C` in the
original terminal where you started the gemma application.

### Hints and tricks

If you want to run your services in the background, you can pass the `-d` flag
(for `detached` mode) to `docker-compose up` and use `docker-compose ps` to see
what is currently running. Take a look at the following example.

```shell
docker-compose up -d
Starting gemma_db ...
Starting gemma_db ... done
Starting gemma_geoserver ...
Starting gemma_geoserver ... done
Starting gemma_backend ...
Starting gemma_backend ... done
Starting gemma_spa ...
Starting gemma_spa ... done
```

```shell
docker-compose ps
     Name                    Command               State            Ports
----------------------------------------------------------------------------------
gemma_backend     /usr/local/bin/gemma -c /o ...   Up      0.0.0.0:8200->8000/tcp
gemma_db          /usr/lib/postgresql/11/bin ...   Up      0.0.0.0:54321->5432/tcp
gemma_geoserver   /usr/share/tomcat8/bin/cat ...   Up      0.0.0.0:8280->8080/tcp
gemma_spa         /bin/sh -c make -f Makefil ...   Up      0.0.0.0:8290->8080/tcp
```

For more infos about Docker Compose take a look at:
https://docs.docker.com/compose/

## Build and run the gemma application with Docker manually

Or build and run your dev enviroment manually by the following steps.

### Network setup

Create a network to connect containers:

```shell
docker network create gemma
```

### Database setup

Build `gemma_db` docker image with e.g.:

```shell
docker build -t gemma_db -f docker/Dockerfile.db .
```

Get a running instance with e.g.:

```shell
docker run --name gemma-db -d -p 54321:5432 -v $PWD/schema:/opt/gemma \
           --network gemma gemma_db
```

Use `--network-alias gemma-db` if your container has a different name

Run tests for [Row-Level Security](https://www.postgresql.org/docs/11/ddl-rowsecurity.html) (RLS)
policies:

```shell
docker exec gemma-db ./run_tests.sh
```

### Create ER diagrams

Assuming you have installed `postgresql-autodoc` and
[graphviz](http://graphviz.org/) on a machine from which you can reach your
docker host, you can use the following:

ER diagram with waterway related tables:

```shell
postgresql_autodoc -p 54321 -h $dockerhost \
                   -d gemma -U sophie --password=so2Phie4 \
                   -t dot -l . -s 'waterway'
dot -Tpdf gemma.dot > gemma_waterway.pdf
```

Omit the `-s` option to get a diagram with all tables or use any other
schema name to see other parts of the whole picture.

### GeoServer setup

Build `gemma_geoserver` docker image with e.g.:

```shell
docker build -t gemma_geoserver -f docker/Dockerfile.geoserv .
```

Get a running instance with e.g.:

```shell
docker run --name gemma-geoserver -d -p 8280:8080 --network gemma \
           gemma_geoserver
```

Use `--network-alias gemma-geoserver` if you give your container
a different name.

### Gemma backend setup

Build `gemma_backend` docker image with e.g.:

```shell
docker build -t gemma_backend -f docker/Dockerfile.backend .
```

Get a running instance with e.g.:

```shell
docker run --name gemma-backend -v $PWD:/opt/gemma -d -p 8200:8000 \
           --network gemma gemma_backend
```

Use `--network-alias gemma-backend` if you give your container
a different name.

### SPA setup

Build `gemma_spa` docker image with e.g.:

```shell
docker build -t gemma_spa -f docker/Dockerfile.spa .
```

Get a running instance with e.g.:

```shell
docker run --name gemma-spa -v $PWD/client:/opt/gemma/client -d -p 8290:8080 \
           --network gemma gemma_spa
```

Now you should be able to use the application in your browser by going to
`http://HOSTNAME:8290`, with `HOSTNAME` being the hostname of your docker host.