From e95de1b55372cb288d16db0dac988fe9d6f4e811 Mon Sep 17 00:00:00 2001 From: MOIS3Y Date: Mon, 4 Sep 2023 22:14:58 +0900 Subject: [PATCH] Modify: Dockerfile use bild args and add healthchek docker-compose use env --- Dockerfile | 47 ++++++++++++++++++++++---- docker-compose.yaml | 31 ++++++++++++----- entrypoint.sh => scripts/entrypoint.sh | 0 3 files changed, 63 insertions(+), 15 deletions(-) rename entrypoint.sh => scripts/entrypoint.sh (100%) diff --git a/Dockerfile b/Dockerfile index 887446e..0c5526a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,23 +8,56 @@ ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 ENV PIP_DISABLE_PIP_VERSION_CHECK=on -# install dependences +# install app dependences COPY requirements.txt ./ RUN pip install --no-cache-dir --root-user-action=ignore -r requirements.txt -# Now multistage builds +# now multistage builds FROM python:3.10-alpine +# set env variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# default build args +ARG VERSION=0.1.0 \ + APP_DIR=/app \ + SRC_DIR=./logs_collector \ + SCRIPTS_DIR=./scripts \ + WEB_PORT=8000 \ + USER_NAME=collector \ + USER_GROUP=collector \ + APP_UID=1000 \ + APP_GID=1000 + +# copy app dependences COPY --from=base /usr/local/lib/python3.10/site-packages/ /usr/local/lib/python3.10/site-packages/ COPY --from=base /usr/local/bin/ /usr/local/bin/ +# add curl and createa user to avoid running container as root +RUN apk add --no-cache --upgrade curl && \ + addgroup --system ${USER_GROUP} --gid ${APP_GID} && \ + adduser --system --uid ${APP_UID} --ingroup ${USER_GROUP} ${USER_NAME} + +# switch to user +USER ${USER_NAME} + +# copy src and entrypoint.sh to app dir +COPY --chown=${USER_NAME}:${USER_GROUP} ${SRC_DIR} ${APP_DIR} +COPY --chown=${USER_NAME}:${USER_GROUP} ${SCRIPTS_DIR}/entrypoint.sh ${APP_DIR}/ + +# set workdir +WORKDIR ${APP_DIR} + +# app listens on this port by default +EXPOSE ${WEB_PORT} + # set lables about app LABEL maintainer="s.zhukovskii@ispsystem.com" -LABEL ru.isptech.logs-collector.version=v0.1.0 +LABEL me.zhukovsky.logs-collector.version=v${VERSION} -COPY ./logs_collector /app -WORKDIR /app - -COPY entrypoint.sh ./ +# call the health check endpoint of app +HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 +# run app ENTRYPOINT [ "sh", "entrypoint.sh" ] diff --git a/docker-compose.yaml b/docker-compose.yaml index 8e9a782..e562fb3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,16 +1,31 @@ -version: "3.7" +version: "3" + +# to set environment variables: +# create a .env file in the same directory as docker-compose.yaml services: logs_collector: - container_name: logs_collector + container_name: logs-collector build: context: . - expose: - - 8000 + args: + - VERSION=${VERSION} + - SRC_DIR=${SRC_DIR} + - SCRIPTS_DIR=${SCRIPTS_DIR} + - APP_DIR=${APP_DIR} + - WEB_PORT=${WEB_PORT} + - USER_NAME=${USER_NAME} + - USER_GROUP=${USER_GROUP} + - APP_UID=${APP_UID} + - APP_GID=${APP_GID} ports: - - "8000:8000" + - "${WEB_HOST}:${WEB_PORT}:${WEB_PORT}" volumes: - - ./logs_collector/db.sqlite3:/app/db.sqlite3 - - ./logs_collector/archives:/app/archives + - type: volume + source: logs_collector_data + target: ${APP_DIR}/data env_file: - - ./logs_collector/.env + - ./.env + +volumes: + logs_collector_data: diff --git a/entrypoint.sh b/scripts/entrypoint.sh similarity index 100% rename from entrypoint.sh rename to scripts/entrypoint.sh