@@ -3,7 +3,7 @@ Dockerizing the project is challenging because of two things:
2. the GPIO pins of the Raspberry Pi must be accessible from inside the container for the lights
## Prior consideration: Network
Docker and docker-compose make setting up a container stack really easy.
Docker and `dockercompose` make setting up a container stack really easy.
But there is a huge drawback: mDNS resolution won't work from inside a container.
But as components like lights register their address as `hostname.local` in the registry and server mDNS resolution is needed.
...
...
@@ -31,7 +31,7 @@ Because we maybe want to build on the Raspberry Pis (`armv7` architecture) we ca
But we can use a [port for `armv7`](https://hub.docker.com/r/arm32v7/maven/).
If you want to build the container on your own `amd64` or `x86` machine you have to choose another image, eg. the [official Apache Maven image](https://hub.docker.com/_/maven).
You can do this by adding `--build-arg MVN_IMAGE=maven:3-jdk-11-slim` to the [`docker build` command](#building-the-container) or the `docker-compose` configuration.
You can do this by adding `--build-arg MVN_IMAGE=maven:3-jdk-11-slim` to the [`docker build` command](#building-the-container) or the `docker-compose.yml` configuration.
**Be sure to always use an image that uses Java 11!**
This does the same as above and the defined argument is used as image in the [runtime stage](#runtime-stage).
The image defined as default should work fine on `armv7`, `amd64` and `x86` systems, so you probably wont need to change it.
If you still want to use another image you can add `--build-arg MVN_IMAGE=your_image` to the [`docker build` command](#building-the-container) or the `docker-compose` configuration.
If you still want to use another image you can add `--build-arg MVN_IMAGE=your_image` to the [`docker build` command](#building-the-container) or the `docker-compose.yml` configuration.
**Be sure to always use an image that provides the JRE 11!**
The JDK is not necessary.
...
...
@@ -141,7 +141,7 @@ It would probably be cleaner to use the `ENV` definition in the Dockerfile but s
## 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.
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 `dockercompose` you can use this sample as a reference.
## Building the Container
...
...
@@ -156,11 +156,11 @@ If you change it, be sure to replace the tag name in any following command in th
To change the used images for the build and runtime stages, add `--build-args MVN_IMAGE=...` and/or `build-args JRE_IMG=...` to the build command.
It is also possible to use `docker-compose` to build the container.
It is also possible to use `dockercompose` to build the container.
```console
#docker-compose [-f filename.yml] build
#dockercompose [-f filename.yml] build
```
To change the used images for in the build with `docker-compose`, you have to add the arguments to the config.
To change the used images for in the build with `dockercompose`, you have to add the arguments to the config.
See [here](https://docs.docker.com/compose/compose-file/compose-file-v3/#args) how to do this.
## Running the Container
...
...
@@ -204,8 +204,8 @@ 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.
## Using `docker-compose` for Multiple Containers
`docker-compose` can be used to set up whole stacks of containers with one configuration file.
## Using `dockercompose` for Multiple Containers
`dockercompose` can be used to set up whole stacks of containers with one configuration file.
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).
...
...
@@ -213,14 +213,14 @@ You can use this file to create your own `docker-compose.yml`.
You can start it with:
```console
#docker-compose [-f filename.yml] up -d
#dockercompose [-f filename.yml] up -d
```
-`-d` detaches the container, if you want to run it in the foreground omit it.
-`-f filename.yml` is necessary if your config file is not called `docker-compose.yml` or `docker-compose.yaml`. You can omit it otherwise.
You can stop and remove the stack with the following command:
```
# docker-compose down
# dockercompose down
```
To start or stop only single services defined inside your config you can append the service names to the `up` or `down` commands.
...
...
@@ -235,8 +235,8 @@ To start or stop only single services defined inside your config you can append
6.`sudo systemctl disable i4.0-demo.service`
7. Install docker if necessary: `curl -sSL https://get.docker.com | sh`
8. In case the following doesn't work, a reboot can help.
9.`sudo docker-compose build`
10.`sudo docker-compose up -d`
9.`sudo dockercompose build`
10.`sudo dockercompose up -d`
You can also use the default docker commands.
As long as the containers are started with `restart: always` or `restart: unless-stopped` they will start on boot.