## Docker
The docker container is based on the image **zenika/alpine-maven:3-jdk8**. Uses **Java JDK 8** and **Maven 3**.
Configuration is composed of **docker-compose.yaml** and **Dockerfile**.
#### Dockerfile
Fundamental configuration which is used as a base for all services. Contains several variables:
**Accessible in compile time:**
- MAVEN_PROFILE: defines maven profile
**Accessible in runtime:**
- APP_PARAMS: defines parameters for an application
- DEBUG: defines if debugging will be enabled
#### Docker-compose
Configuration of services. This file contains configuration of each service where are defined build and runtime variables.
Name of service is **fcs2** which is used for *build* and *start* the service. Build arguments contain definition of maven profile.
Arguments variables defines in *build* section are accessible only during compile time. When the images is created,
the variables can not be changed. Environment variables are located in *environment* section and can be changed
after the build process. These variables are used to set configuration for the built.
Debugging can be enabled to set **DEBUG** variable to **true** and publish the port **50005**. Otherwise the debugging
is disable.
##### docker-compose.yaml
```yaml
services:
fcs2:
container_name: fieldclimateSenslog2
build:
dockerfile: Dockerfile
context: .
args:
MAVEN_PROFILE: FieldClimateSenslog2
ports:
- "5005:5005"
restart: always
environment:
APP_PARAMS: -cf config/test.yaml
DEBUG: "true"
```
## Build & run
To build all or a specific one service.
```sh
$ docker-compose build
$ docker-compose build // e.g. fcs2
```
To start all or a specific one service.
```sh
$ docker-compose up
$ docker-compose up // e.g. fcs2
```
## Java & Maven
The application supports **Java 8+** and uses **Maven** as a build automation tool. Configuration for Maven contains
profiles which defines modules that will be compiled.
It is recommended to clean entire project before compilation.
```sh
$ mvn clean
```
To build all modules.
```sh
$ mvn package
```
To build only the modules which contains modules for the Azure LoraWan and the Senslog V1.
```sh
$ mvn package -P LoraWanSenslog1
```
All modules (JARs) are compiled to the **bin** folder. To be able to start the application, it is important to add
all JARs to classpath and to define main class (java ).
```sh
$ java -cp "bin/*" cz.senslog.connector.app.Main
```
#### Parameters
The application allows these parameters:
```sh
Usage: General Senslog Connector [options]
Options:
-cf, -config-file
Configuration file in .yaml format.
-h, -help
```