Create improved Dockerfile with volume mounts for storing data

* Add volume mounts to Dockerfile to enable persisten storing of
  database and tokens when using docker
* Makefile helps with cleanup and building the Dockerfile
* Startup fires the predictify runtime inside the container
* `.dockerignore` contains files that are not needed by the docker,
  e.g. files that would otherwise slow build process down
This commit is contained in:
Chris Kiriakou
2025-03-21 19:07:30 +01:00
parent 3922c7640e
commit aeb7c49068
4 changed files with 70 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
logs/
data/
src/__pycache__/
.git
*.md
.venv
LICENSE
MAKEFILE
pytest.ini
test/
+19
View File
@@ -0,0 +1,19 @@
.PHONY: all dockerfile clean
TAG="unstable"
PROJ_NAME="predictify"
all: install dockerfile
install:
mkdir -p ./data
dockerfile: ./docker/Dockerfile
docker build \
--tag "$(PROJ_NAME):$(TAG)" \
--build-arg PROJ_NAME=$(PROJ_NAME) \
--file ./docker/Dockerfile \
.
clean: ./spotify_scraped.db
rm -r ./data/spotify_scraped.db
+35
View File
@@ -0,0 +1,35 @@
FROM alpine:3.21.3
# Set environment variables
ARG PROJ_NAME
ENV PROJ_NAME=${PROJ_NAME}
RUN mkdir -p /app/${PROJ_NAME}
# The following steps are executed from the specified directory below
WORKDIR /app/${PROJ_NAME}
# Install all necessary software
RUN apk add --no-cache python3 sqlite
# Create the directories, needed for persistent storage (e.g. database, tokens)
RUN mkdir ./data ./src ./config
# Create mount points for logs, data, src and config
VOLUME /var/log ./data ./src ./config
# Copy the application source code
COPY ./src/ ./src/
# Create a seperate venv inside the container & install requirements
COPY ./requirements.txt ./requirements.txt
RUN \
python -m venv .venv && \
source .venv/bin/activate && \
./.venv/bin/pip install -r ./requirements.txt && \
deactivate
COPY ./docker/startup.sh ./startup.sh
# When starting the contianer the following is executed
ENTRYPOINT ["./startup.sh"]
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
#
# Startup predictify. Don't use this. This is for docker specifically.
source .venv/bin/activate
.venv/bin/python src/runtime.py