From 53dbc47553ae5b6ced2202950cfeea200cd95e09 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Fri, 21 Apr 2023 10:23:17 +0200 Subject: [PATCH] Initial --- .docker/run.sh | 9 +++++++++ Dockerfile | 32 ++++++++++++++++++++++++++++++++ Makefile | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100755 .docker/run.sh create mode 100644 Dockerfile diff --git a/.docker/run.sh b/.docker/run.sh new file mode 100755 index 0000000..01f5461 --- /dev/null +++ b/.docker/run.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +echo "Hello world!" + +echo "Press [CTRL+C] to stop.." +while : +do + sleep 1 +done diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f7285f0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM python:3.10.11-alpine3.17 + +ARG INTERNAL_API_PORT +ARG INTERNAL_WS_PORT + +RUN \ + pip install pip -U && \ + pip install poetry --no-cache-dir + +WORKDIR /app + +COPY pyproject.toml . +COPY poetry.lock . + +# create virtual environment +RUN python -m venv /venv +# set python thingies and activate virtual environment +ENV \ + PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PATH="/venv/bin:$PATH" + +RUN \ + # dump python dependencies into requirements file + poetry export --without-hashes --format=requirements.txt > requirements.txt && \ + # install python libs + pip install -r requirements.txt --no-cache-dir --prefer-binary + +COPY ./.docker/run.sh . +COPY ./hopper ./service + +ENTRYPOINT [ "/app/run.sh" ] diff --git a/Makefile b/Makefile index 0ed5697..7b2fd0d 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,11 @@ +IMAGE_NAME=fairhopper-service +CONTAINER_NAME=fairhopper-service +INTERNAL_API_PORT=8010 +INTERNAL_WS_PORT=8011 +EXTERNAL_API_PORT=8010 +EXTERNAL_WS_PORT=8011 + + run: @poetry run \ uvicorn \ @@ -20,3 +28,30 @@ create-requirements: --without-hashes \ --format=requirements.txt \ > requirements.txt + +docker-clean: + @echo "> Removing container $(CONTAINER_NAME)" + - @docker rm $(CONTAINER_NAME) + @echo "> Removing image $(CONTAINER_NAME)" + - @docker image rm $(CONTAINER_NAME) + + +docker-build: + @docker \ + build . \ + --build-arg INTERNAL_API_PORT=$(INTERNAL_API_PORT) \ + --build-arg INTERNAL_WS_PORT=$(INTERNAL_WS_PORT) \ + -t $(CONTAINER_NAME) + +docker-run: + @docker \ + run \ + --publish $(EXTERNAL_API_PORT):$(INTERNAL_API_PORT) \ + --publish $(EXTERNAL_WS_PORT):$(INTERNAL_WS_PORT) \ + --name=$(CONTAINER_NAME) \ + $(IMAGE_NAME) \ + --detach + +docker-clean-build: + make clean + make build