From 7783aad264cbd5fee009564be5d0fb74b668485a Mon Sep 17 00:00:00 2001 From: ham Date: Mon, 6 Aug 2018 17:15:15 +0200 Subject: [PATCH] Dockernize --- README.md | 16 ++++++++++ docker/AutopilotAdapter.dll | Bin 0 -> 109232 bytes docker/Dockerfile | 33 +++++++++++++++++++++ docker/build.sh | 26 ++++++++++++++++ docker/rmi-model-server-1.0.1-SNAPSHOT.jar | Bin 0 -> 9350 bytes 5 files changed, 75 insertions(+) create mode 100755 docker/AutopilotAdapter.dll create mode 100644 docker/Dockerfile create mode 100755 docker/build.sh create mode 100644 docker/rmi-model-server-1.0.1-SNAPSHOT.jar diff --git a/README.md b/README.md index 90ca76e..6d656f1 100644 --- a/README.md +++ b/README.md @@ -45,3 +45,19 @@ The last command `main.bat` will compile the model and run it in a server contai __NOTE:__ Autopilot EMAM model works only in _Windows 64 bit_ environment. The scripts in `script` directory are already adjusted to use _Autopilot_ model. If a new model has to be integrated to the RMI Model server, an implementation of _VehicleModel_ has to be created and adjusted with the _ModelManager_. Additionally, all dependencies of the new model have to be declared in the _library_ or _class-path_ of the RMI Model server. + +## Docker + +To run the RMI server in docker, first you need to build the docker image with `./docker/build.sh`. This script only does 2 things: + +1. Copy the latest rmi-model-server build into ./docker/ in order to prepare the build. +2. Then use ./docker/Dockerfile to build the rmi-model-server docker image. + +You can simply replace the `./docker/rmi-model-server-1.0.1-SNAPSHOT.jar` with latest maven build if there are any updates, just remember to update `RMI_VERSION` in the Dockerfile. But if you want to update the `AutopilotAdapter.dll`, you shoudld rebuild it under a linux 64-bit environment by using scripts in `./EMAM-showcase/scripts/linux`. A build from Mac or Windows environment won't work. + +After the docker image is built. Run following command to start the RMI server: + +``` +docker run --name=rmi-server -p 10101:10101 --rm rmi-server +``` + diff --git a/docker/AutopilotAdapter.dll b/docker/AutopilotAdapter.dll new file mode 100755 index 0000000000000000000000000000000000000000..07a8c65f525a3740b9078c6cf6a99af660d6b1b3 GIT binary patch literal 109232 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 Suk?3arQ+i!iLT2`|NjH-9giCT literal 0 HcmV?d00001 diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..de151f8 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,33 @@ +# +# +# ****************************************************************************** +# MontiCAR Modeling Family, www.se-rwth.de +# Copyright (c) 2017, Software Engineering Group at RWTH Aachen, +# All rights reserved. +# +# This project is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3.0 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this project. If not, see . +# ******************************************************************************* +# + +FROM openjdk:8 + +ENV RMI_VERSION=1.0.1-SNAPSHOT + +ENV RMI_JAR=rmi-model-server-${RMI_VERSION}.jar +WORKDIR /app + +COPY AutopilotAdapter.dll /usr/lib/ +COPY AutopilotAdapter.dll ./ +COPY rmi-model-server-$RMI_VERSION.jar ./rmi-model-server.jar + +CMD exec java -cp rmi-model-server.jar -Djava.rmi.server.codebase=file:rmi-model-server.jar -Djava.rmi.server.hostname=rmi-server rwth.rmi.model.server.RMIServer diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 0000000..b9ddca1 --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# +# +# ****************************************************************************** +# MontiCAR Modeling Family, www.se-rwth.de +# Copyright (c) 2017, Software Engineering Group at RWTH Aachen, +# All rights reserved. +# +# This project is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3.0 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this project. If not, see . +# ******************************************************************************* +# + +rm rmi-model-server-*.jar +cp ../target/rmi-model-server-*.jar ./ + +docker build -t rmi-server . diff --git a/docker/rmi-model-server-1.0.1-SNAPSHOT.jar b/docker/rmi-model-server-1.0.1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..59ec0e0c411432faf0c290dd6f684392faae43d8 GIT binary patch literal 9350 zcmb7K1yqz<*QUjxhGqaI9Xg~zkVaZs7?5s<9!f!_Q@W&wW{^gtyF-vrP#TFr>6HBO zmR`NOzW>a6W3AcyIcM(^yIwUVbPNE>*GB1$rSiwiU$?85PZe1$Ne%^7IWD!o$gojB zmt=v#o3jrt|Mt1ONWLdikyKTXlhxGXRFT_N8R%D5;^2IPr^LbfdSIwhgL{m3ZpoQl z@pTWo5{DG_m5(_(ab#>Qj2^YAio7n0ur$_U5*{KK&)U>54Pqq?%@(u>%#dDCA)qP5 zqRG^@8CF{?6qGSs6cqML_HSDJUOSSmFb78) zr~^#W+{Ez`iPH>f;^GpogLEg>Cb?*=hUFniRwZzPWhFUm-UG=yaxrBA8rJrj~I5nF!S-!ejQ_pbdgE4^nTa%0A&Bshfou$_af)*P`ZQfTQg(qU0W*;3k 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 F{{eavLMZ?M literal 0 HcmV?d00001 -- GitLab