Update Dockerization authored by Daniel Kluge's avatar Daniel Kluge
...@@ -3,7 +3,7 @@ Dockerizing the project is challenging because of two things: ...@@ -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 2. the GPIO pins of the Raspberry Pi must be accessible from inside the container for the lights
## Prior consideration: Network ## Prior consideration: Network
Docker and docker-compose make setting up a container stack really easy. Docker and `docker compose` make setting up a container stack really easy.
But there is a huge drawback: mDNS resolution won't work from inside a container. 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. 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 ...@@ -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/). 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). 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!** **Be sure to always use an image that uses Java 11!**
...@@ -40,7 +40,7 @@ ARG JRE_IMAGE=eclipse-temurin:11-jre ...@@ -40,7 +40,7 @@ ARG JRE_IMAGE=eclipse-temurin:11-jre
``` ```
This does the same as above and the defined argument is used as image in the [runtime stage](#runtime-stage). 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. 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!** **Be sure to always use an image that provides the JRE 11!**
The JDK is not necessary. The JDK is not necessary.
...@@ -141,7 +141,7 @@ It would probably be cleaner to use the `ENV` definition in the Dockerfile but s ...@@ -141,7 +141,7 @@ It would probably be cleaner to use the `ENV` definition in the Dockerfile but s
## 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
...@@ -156,11 +156,11 @@ If you change it, be sure to replace the tag name in any following command in th ...@@ -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. 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 `docker compose` to build the container.
```console ```console
# docker-compose [-f filename.yml] build # docker compose [-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 `docker compose`, 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. See [here](https://docs.docker.com/compose/compose-file/compose-file-v3/#args) how to do this.
## Running the Container ## 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 ...@@ -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. 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).
...@@ -213,14 +213,14 @@ You can use this file to create your own `docker-compose.yml`. ...@@ -213,14 +213,14 @@ You can use this file to create your own `docker-compose.yml`.
You can start it with: You can start it with:
```console ```console
# docker-compose [-f filename.yml] up -d # docker compose [-f filename.yml] up -d
``` ```
- `-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.
- `-f filename.yml` is necessary if your config file is not called `docker-compose.yml` or `docker-compose.yaml`. You can omit it otherwise. - `-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: You can stop and remove the stack with the following command:
``` ```
# docker-compose down # docker compose down
``` ```
To start or stop only single services defined inside your config you can append the service names to the `up` or `down` commands. 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 ...@@ -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` 6. `sudo systemctl disable i4.0-demo.service`
7. Install docker if necessary: `curl -sSL https://get.docker.com | sh` 7. Install docker if necessary: `curl -sSL https://get.docker.com | sh`
8. In case the following doesn't work, a reboot can help. 8. In case the following doesn't work, a reboot can help.
9. `sudo docker-compose build` 9. `sudo docker compose build`
10. `sudo docker-compose up -d` 10. `sudo docker compose up -d`
You can also use the default docker commands. 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. As long as the containers are started with `restart: always` or `restart: unless-stopped` they will start on boot.
\ No newline at end of file