Better headers authored by Daniel Kluge's avatar Daniel Kluge
...@@ -2,7 +2,7 @@ Dockerizing the project is challenging because of two things: ...@@ -2,7 +2,7 @@ Dockerizing the project is challenging because of two things:
1. the classpath setup done in [start_component.sh](implementation/start_component.sh) 1. the classpath setup done in [start_component.sh](implementation/start_component.sh)
2. the GPIO pins of the Raspberry Pi must be accessible from inside the container for the lights 2. the GPIO pins of the Raspberry Pi must be accessible from inside the container for the lights
## Dockerfile walkthrough ## Dockerfile Walkthrough
The Dockerfile is used to build the container. The Dockerfile is used to build the container.
It holds instructions on which files to copy and commands to run. It holds instructions on which files to copy and commands to run.
...@@ -10,7 +10,7 @@ I chose a multistage approach. ...@@ -10,7 +10,7 @@ I chose a multistage approach.
This means first in a dedicated container all dependencies get resolved and files compiled. This means first in a dedicated container all dependencies get resolved and files compiled.
They are copied to a second container which serves the purpose of the runtime environment. They are copied to a second container which serves the purpose of the runtime environment.
### Build stage ### Build Stage
```Dockerfile ```Dockerfile
FROM maven:3-jdk-11-slim as build FROM maven:3-jdk-11-slim as build
...@@ -57,7 +57,7 @@ Here we finally build all our class files. ...@@ -57,7 +57,7 @@ Here we finally build all our class files.
Our build stage is done. Our build stage is done.
It follows the container definition for our final container. It follows the container definition for our final container.
### Runtime stage ### Runtime Stage
```Dockerfile ```Dockerfile
FROM openjdk:11-jre FROM openjdk:11-jre
...@@ -89,11 +89,11 @@ This sets the entry point of the container that is executed when the container i ...@@ -89,11 +89,11 @@ This sets the entry point of the container that is executed when the container i
The first part of the command exports the `CLASSPATH` that needs to be set to resolve all the used packages inside the Java files. The first part of the command exports the `CLASSPATH` that needs to be set to resolve all the used packages inside the Java files.
It would probably be cleaner to use the `ENV` definition in the Dockerfile but setting an environment based on command output is [currently not possible](https://github.com/moby/moby/issues/29110). It would probably be cleaner to use the `ENV` definition in the Dockerfile but setting an environment based on command output is [currently not possible](https://github.com/moby/moby/issues/29110).
## docker-compose.yml walkthrough ## docker-compose.yml Walkthrough
Every line inside the [`docker-compose.sample.yml`](https://gitlab.hrz.tu-chemnitz.de/vws-demo/vws-spielwiese/-/blob/followup/dockerize/basyx.lichterkette/docker-compose.sample.yml) file is commented. Every line inside the [`docker-compose.sample.yml`](https://gitlab.hrz.tu-chemnitz.de/vws-demo/vws-spielwiese/-/blob/followup/dockerize/basyx.lichterkette/docker-compose.sample.yml) file is commented.
If you want to create a new file for `docker-compose` you can use this sample as a reference. If you want to create a new file for `docker-compose` you can use this sample as a reference.
## Building the container ## Building the Container
To build the container change the working directory to the `basyx.lichterkette` subdirectory of this repository and run the following command: To build the container change the working directory to the `basyx.lichterkette` subdirectory of this repository and run the following command:
...@@ -109,8 +109,8 @@ It is also possible to use `docker-compose` to build the container. ...@@ -109,8 +109,8 @@ It is also possible to use `docker-compose` to build the container.
# docker-compose [-f filename.yml] build # docker-compose [-f filename.yml] build
``` ```
## Running the container ## Running the Container
### Components without GPIO access ### Components without GPIO Access
Starting the container for any component that does not need access to the GPIO pins of the Raspberry Pi is straightforward: Starting the container for any component that does not need access to the GPIO pins of the Raspberry Pi is straightforward:
...@@ -120,7 +120,7 @@ Starting the container for any component that does not need access to the GPIO p ...@@ -120,7 +120,7 @@ Starting the container for any component that does not need access to the GPIO p
- `-d` detaches the container, if you want to run it in the foreground omit it. - `-d` detaches the container, if you want to run it in the foreground omit it.
- `-e COMPONENT=registry` sets the environment variable `COMPONENT`. **This determines which component is started, be sure to set it to the correct component!** - `-e COMPONENT=registry` sets the environment variable `COMPONENT`. **This determines which component is started, be sure to set it to the correct component!**
#### Stopping the container #### Stopping the Container
If you run the container in the foreground just press `Ctrl+C`. If you run the container in the foreground just press `Ctrl+C`.
If you started it with the `-d` option, a hash is returned on the command line. If you started it with the `-d` option, a hash is returned on the command line.
You can stop a detached container using: You can stop a detached container using:
...@@ -133,7 +133,7 @@ To remove it, run: ...@@ -133,7 +133,7 @@ To remove it, run:
# docker rm [hash] # docker rm [hash]
``` ```
### Components without GPIO access ### Components with GPIO Access
For the other components, Docker needs access to the system resources of the Raspberry Pi. For the other components, Docker needs access to the system resources of the Raspberry Pi.
The easiest way to do this (and the only one I found working) is to use the following command: The easiest way to do this (and the only one I found working) is to use the following command:
...@@ -148,7 +148,7 @@ The easiest way to do this (and the only one I found working) is to use the foll ...@@ -148,7 +148,7 @@ The easiest way to do this (and the only one I found working) is to use the foll
For how to stop the container see above. For how to stop the container see above.
## Using `docker-compose` for multiple containers ## Using `docker-compose` for Multiple Containers
`docker-compose` can be used to set up whole stacks of containers with one configuration file. `docker-compose` can be used to set up whole stacks of containers with one configuration file.
The containers inside this stack are called "services". The containers inside this stack are called "services".
For every possible component, there is a service already defined inside the [`docker-compose.sample.yml`](https://gitlab.hrz.tu-chemnitz.de/vws-demo/vws-spielwiese/-/blob/followup/dockerize/basyx.lichterkette/docker-compose.sample.yml). For every possible component, there is a service already defined inside the [`docker-compose.sample.yml`](https://gitlab.hrz.tu-chemnitz.de/vws-demo/vws-spielwiese/-/blob/followup/dockerize/basyx.lichterkette/docker-compose.sample.yml).
... ...
......