From 735509fcfeaac6f302be1665bfea8505bdc5abff Mon Sep 17 00:00:00 2001 From: Izel Levy Date: Thu, 28 Dec 2023 15:12:23 +0200 Subject: [PATCH] Improve docker integration --- Dockerfile | 18 +++++++++++++----- Makefile | 29 +++++++++++++++++------------ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 08f4aac9..13813cb0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,13 @@ # syntax=docker/dockerfile:1 # Keep this syntax directive! It's used to enable Docker BuildKit +ARG PYTHON_VERSION=3.11.7 +ARG PORT=8000 ################################ # PYTHON-BASE # Sets up all our shared environment variables ################################ -FROM python:3.11.7-slim as python-base +FROM python:${PYTHON_VERSION}-slim as python-base # Python ENV PYTHONUNBUFFERED=1 \ @@ -84,8 +86,9 @@ RUN --mount=type=cache,target=/root/.cache \ COPY . . RUN poetry install --all-extras --only-root +ARG PORT +EXPOSE $PORT -EXPOSE 8000 CMD ["bash"] @@ -97,6 +100,10 @@ FROM python-base as production ENV WORKER_COUNT=1 +LABEL org.opencontainers.image.source="https://github.com/pinecone-io/canopy" +LABEL org.opencontainers.image.description="Image containing the canopy server." +LABEL org.opencontainers.image.licenses="Apache-2.0" + RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates && \ @@ -116,8 +123,9 @@ COPY config/ config/ RUN touch README.md RUN poetry install --all-extras --only-root -EXPOSE 8000 - -CMD ["sh", "-c", "gunicorn canopy_server.app:app --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 --workers $WORKER_COUNT"] +ARG PORT +EXPOSE $PORT +ENV PORT $PORT +CMD ["sh", "-c", "gunicorn canopy_server.app:app --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:$PORT --workers $WORKER_COUNT"] diff --git a/Makefile b/Makefile index 56694de9..5de286e5 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,18 @@ -IMAGE_NAME = canopy -DOCKERFILE_DIR = . -COMMON_BUILD_ARGS = --progress plain -EXTRA_BUILD_ARGS = -IMAGE_VERSION = $(shell poetry version -s) -PORT = 8000 -ENV_FILE = .env TEST_WORKER_COUNT = 8 +REGISTRY = ghcr.io +NAMESPACE = pinecone-io +IMAGE_NAME = canopy +REPOSITORY = $(REGISTRY)/$(NAMESPACE)/$(IMAGE_NAME) + +IMAGE_TAG = $(shell poetry version -s) +CONTAINER_PORT = 8000 +CONTAINER_ENV_FILE = .env +CONTAINER_BUILD_DIR = . +CONTAINER_COMMON_BUILD_ARGS = --progress plain +CONTAINER_EXTRA_BUILD_ARGS = + + .PHONY: lint static test test-unit test-system test-e2e docker-build docker-build-dev docker-run docker-run-dev help lint: @@ -29,20 +35,19 @@ test-e2e: docker-build: @echo "Building Docker image..." - docker build $(COMMON_BUILD_ARGS) $(EXTRA_BUILD_ARGS) -t $(IMAGE_NAME):$(IMAGE_VERSION) $(DOCKERFILE_DIR) + docker build $(CONTAINER_COMMON_BUILD_ARGS) $(CONTAINER_EXTRA_BUILD_ARGS) --build-arg PORT=$(CONTAINER_PORT) -t $(REPOSITORY):$(IMAGE_TAG) $(CONTAINER_BUILD_DIR) @echo "Docker build complete." docker-build-dev: @echo "Building Docker image for development..." - docker build $(COMMON_BUILD_ARGS) $(EXTRA_BUILD_ARGS) -t $(IMAGE_NAME)-dev:$(IMAGE_VERSION) --target=development $(DOCKERFILE_DIR) + docker build $(CONTAINER_COMMON_BUILD_ARGS) $(CONTAINER_EXTRA_BUILD_ARGS) --build-arg PORT=$(CONTAINER_PORT) -t $(REPOSITORY)-dev:$(IMAGE_TAG) --target=development $(CONTAINER_BUILD_DIR) @echo "Development Docker build complete." docker-run: - docker run --env-file $(ENV_FILE) -p $(PORT):$(PORT) $(IMAGE_NAME):$(IMAGE_VERSION) + docker run --env-file $(CONTAINER_ENV_FILE) -p $(CONTAINER_PORT):$(CONTAINER_PORT) $(REPOSITORY):$(IMAGE_TAG) docker-run-dev: - docker run -it --env-file $(ENV_FILE) -p $(PORT):$(PORT) $(IMAGE_NAME)-dev:$(IMAGE_VERSION) - + docker run -it --env-file $(CONTAINER_ENV_FILE) -p $(CONTAINER_PORT):$(CONTAINER_PORT) $(REPOSITORY)-dev:$(IMAGE_TAG) help: @echo "Available targets:"