Hi everybody,
I wanted to ask if anybody has ever dockerized the EdgeApp? If yes, can you share your Dockerfile and docker-compose files?
Cheers,
Karolina
Hi Karolina,
OpenEMS is used widely in Docker containers, e.g. our Gitpod Live-Demo is powered by Docker (see the Gitpod specific Docker configuration here: openems/.gitpod.Dockerfile at develop · OpenEMS/openems · GitHub). Unfortunately there is no ‘standard’ Docker container available yet.
You can build your own dockerized OpenEMS Edge using the following Linux commands:
- Create a working directory and change to it
mkdir openems-edge
cd openems-edge
- Create subdirectories for configuration files and storage data
mkdir -p config data`
- Create a
Dockerfile
:
cat <<EOF > Dockerfile
FROM eclipse-temurin:11-jre-alpine
RUN mkdir /opt/openems-edge
COPY openems-edge.jar /opt/openems-edge
CMD ["java", "-jar", "-Dfelix.cm.dir=/etc/openems.d/", "-Dopenems.data.dir=/var/lib/openems/", "/opt/openems-edge/openems-edge.jar"]
EOF
- Provide a
openems-edge.jar
file in the current directory. For example this command downloads the latest artifact from the latest GitHub Release version:
curl -s https://api.github.com/repos/OpenEMS/openems/releases/latest | awk -F\" '/browser_download_url.*openems-edge\.jar/{print $(NF-1)}' | xargs wget -O openems-edge.jar
- Build the Docker Image in the current directory
docker build -t openems-edge .
- Run the Docker Container
docker run --volume=$(pwd)/config:/etc/openems.d --volume=$(pwd)/data:/var/lib/openems --publish=8080:8080 openems-edge
I am by far no expert in Docker, so if there is anything incomplete or wrong with this guide, please provide feedback. Also I believe it might be a good idea to build official docker images in future via GitHub Actions, just like we create Release artifacts.
Regards,
Stefan
Hey there,
i’m also no Docker Expert, but i ran the Edge-Controller and the UI without Problemes in my own Docker-Environment. I’ve used Docker-Compose so this may help:
version: ‘3’
services:
openems-edge:
image: openjdk:11
container_name: openems-edge
restart: unless-stopped
volumes:
- “/opt/docker/appdata/openems:/data”
working_dir: /data
ports:
- 8080:8080
- 8074:8074
- 8075:8075
command: java -Dfelix.cm.dir=/data/edge_config -jar openems-edge.jar
openems-ui:
image: nginx:latest
container_name: openems-ui
restart: unless-stopped
volumes:
- “/opt/docker/appdata/openems/ui/nginx/default.conf:/etc/nginx/conf.d/default.conf”
- “/opt/docker/appdata/openems/ui/www:/usr/share/openems/www”
ports:
- 80:80
Greetings
Richard
Hi,
in my environment i’m using traefik with openems and influxdb. Maybe this code is helpful for someone.
version: “3”
services:
openems_edge:
image: openjdk:11
container_name: openems-edge
restart: always
networks:
- proxy
ports:
- “8080:8080”
- “8084:8084”
- “8085:8085”
volumes:- /storage/Config/Openems:/data working_dir: /data command: java -Dfelix.cm.dir=/data/openems.d -jar openems.jar
influxdb2:
image: influxdb:latest
container_name: openems-influxdb
restart: always
networks:
- proxy
ports:
- “8086:8086”
volumes:
- /storage/InfluxData:/var/lib/influxdb2openems_nginx:
image: nginx:latest
container_name: openems-ui
volumes:
- /storage/Config/Openems/ui:/usr/share/nginx/html
- /storage/Config/Openems/nginx:/etc/nginx
networks:
- proxy
restart: always
labels:
- “traefik.enable=true”
- “traefik.docker.network=proxy”
# Https (Errorpages have to be handle in /nginx/conf.d/default.conf → “error_page 404 /index.html;”)
- “traefik.http.routers.openems-secure.entrypoints=websecure”
- “traefik.http.routers.openems-secure.rule=Host(openems.example.de
)”
- “traefik.http.services.openems-service.loadbalancer.server.port=80”
# Websocket
- “traefik.http.routers.openems-ws.entrypoints=websecure”
- “traefik.http.routers.openems-ws.rule=Host(openems.example.de
) && Path(/websocket
)”
- “traefik.http.routers.openems-ws.service=ws-openems-service@file”networks:
proxy:
external: true
Best regards
Christian