From 105c21562febe28829bcf55f3f1d272436e58bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Hutter?= Date: Sat, 21 Dec 2024 15:02:27 +0100 Subject: [PATCH] Added Docker support --- tools/README.md | 3 +++ tools/docker/Dockerfile | 33 ++++++++++++++++++++++++++++++++ tools/docker/README.md | 32 +++++++++++++++++++++++++++++++ tools/docker/docker-desktop.png | Bin 0 -> 23801 bytes 4 files changed, 68 insertions(+) create mode 100644 tools/README.md create mode 100644 tools/docker/Dockerfile create mode 100644 tools/docker/README.md create mode 100644 tools/docker/docker-desktop.png diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 0000000..48b6168 --- /dev/null +++ b/tools/README.md @@ -0,0 +1,3 @@ +# docker tools + +The provided Dockerfile allows one to create a docker container taht builds the diploma thesis. diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile new file mode 100644 index 0000000..e1ace46 --- /dev/null +++ b/tools/docker/Dockerfile @@ -0,0 +1,33 @@ +FROM ubuntu:20.04 + +# Set the environment variables +ENV LANG=C.UTF-8 \ + LC_ALL=C.UTF-8 \ + DEBIAN_FRONTEND=noninteractive + +# Update the package list and install dependencies +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + git \ + build-essential \ + make \ + texlive-full \ + pandoc \ + pandoc-citeproc \ + tree \ + rsync \ + hunspell \ + hunspell-de-at \ + hunspell-en-us && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Set the working directory +WORKDIR /workspace + +# Copy the Diplomarbeit template repository clone command here +# Uncomment the following line if the repository URL is provided +# RUN git clone https://itsp.htl-leoben.at/git/Hg/HTLLE-DA-Vorlage.git /workspace/template + +# Set entrypoint to bash +ENTRYPOINT ["make", "pdf", "-C", "HTLLE-DA-Vorlage", "SOURCEDIR=/workspace"] diff --git a/tools/docker/README.md b/tools/docker/README.md new file mode 100644 index 0000000..0b1aa4f --- /dev/null +++ b/tools/docker/README.md @@ -0,0 +1,32 @@ +# docker container + +The provided `Dockerfile` can be used to cerate a dockerized build environment where all depenencies are satisfied. + + +## building the environment + +In order to build a docker container (in this example it will be namend `diplomarbeit-env` just run the following command on a docker host (Testsd with docker 20.10.22) + +~~~~ +$ docker build -t diplomarbeit-env . +~~~~ + +This creates a container that contains all dependencies and expects to find your diplomathesis in mounted into the `/workspace` folder. + +Alternatively the image can be pulled from dockerhub. See instructions here: https://hub.docker.com/r/bytebang/htlle-da-env + + +## usage + +One can build the thesis ba running the followin command: + +~~~~ +$ docker run -it --rm -v $(pwd):/workspace diplomarbeit-env +~~~~ + +This command runs the diplomarbeit-env container interactively, mounts the current directory into the container at /workspace, and automatically cleans up the container after it exits. + +Errors and log messages are shown in the console, the file will be written back to the `/workspace` folder. +This also works with _Docker Desktop_ + +![Docker Dektop settings](docker-desktop.png) \ No newline at end of file diff --git a/tools/docker/docker-desktop.png b/tools/docker/docker-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..febda2de1e210bd1a382fed651970850e9505fe7 GIT binary patch literal 23801 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 literal 0 HcmV?d00001