summaryrefslogtreecommitdiffstats
path: root/docker-files/alpine.Dockerfile
diff options
context:
space:
mode:
Diffstat (limited to 'docker-files/alpine.Dockerfile')
-rw-r--r--docker-files/alpine.Dockerfile136
1 files changed, 87 insertions, 49 deletions
diff --git a/docker-files/alpine.Dockerfile b/docker-files/alpine.Dockerfile
index b805475f..2497a438 100644
--- a/docker-files/alpine.Dockerfile
+++ b/docker-files/alpine.Dockerfile
@@ -4,10 +4,34 @@
# https://github.com/nicolargo/glances
#
-FROM alpine:3.13 as build
+# WARNING: the versions should be set.
+# Ex: Python 3.11 for Alpine 3.18
+# Note: ENV is for future running containers. ARG for building your Docker image.
+
+ARG IMAGE_VERSION=3.18.0
+ARG PYTHON_VERSION=3.11
+
+##############################################################################
+# Base layer to be used for building dependencies and the release images
+FROM alpine:${IMAGE_VERSION} as base
RUN apk add --no-cache \
python3 \
+ curl \
+ lm-sensors \
+ wireless-tools \
+ smartmontools \
+ iputils \
+ tzdata
+
+##############################################################################
+# BUILD Stages
+##############################################################################
+# BUILD: Base image shared by all build images
+FROM base as build
+ARG PYTHON_VERSION
+
+RUN apk add --no-cache \
python3-dev \
py3-pip \
py3-wheel \
@@ -16,63 +40,77 @@ RUN apk add --no-cache \
build-base \
libzmq \
zeromq-dev \
- curl \
- lm-sensors \
- wireless-tools \
- iputils
-
-
-FROM build as remoteInstall
-# Install the dependencies beforehand to make them cacheable
-COPY requirements.txt .
-RUN pip3 install --no-cache-dir --user -r requirements.txt
-
-# Force install otherwise it could be cached without rerun
-ARG CHANGING_ARG
-RUN pip3 install --no-cache-dir --user glances[all]
-
-
-FROM build as additional-packages
-
-COPY *requirements.txt ./
-
-RUN CASS_DRIVER_NO_CYTHON=1 pip3 install --no-cache-dir --user -r optional-requirements.txt
-
-
-FROM build as dev
-
-COPY --from=additional-packages /root/.local/lib/python3.8/site-packages /usr/lib/python3.8/site-packages/
-COPY . /glances
+ # Required for 'cryptography' dependency of optional requirement 'cassandra-driver' \
+ # Refer: https://cryptography.io/en/latest/installation/#alpine \
+ # `git` required to clone cargo crates (dependencies)
+ git \
+ gcc \
+ cargo \
+ pkgconfig \
+ libffi-dev \
+ openssl-dev
+
+RUN python${PYTHON_VERSION} -m venv --without-pip venv
+
+COPY requirements.txt docker-requirements.txt webui-requirements.txt optional-requirements.txt ./
+
+##############################################################################
+# BUILD: Install the minimal image deps
+FROM build as buildMinimal
+
+RUN python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
+ # Note: requirements.txt is include by dep
+ -r docker-requirements.txt \
+ -r webui-requirements.txt
+
+##############################################################################
+# BUILD: Install all the deps
+FROM build as buildFull
+
+# Required for optional dependency cassandra-driver
+ARG CASS_DRIVER_NO_CYTHON=1
+# See issue 2368
+ARG CARGO_NET_GIT_FETCH_WITH_CLI=true
+
+RUN python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
+ # Note: requirements.txt is include by dep
+ -r optional-requirements.txt
+
+##############################################################################
+# RELEASE Stages
+##############################################################################
+# Base image shared by all releases
+FROM base as release
+
+# Copy source code and config file
+COPY ./docker-compose/glances.conf /etc/glances.conf
+COPY /glances /app/glances
# EXPOSE PORT (XMLRPC / WebUI)
EXPOSE 61209 61208
-WORKDIR /glances
-
# Define default command.
-CMD python3 -m glances -C /glances/conf/glances.conf $GLANCES_OPT
-
-
-#Create running images without any building dependency
-FROM alpine:3.13 as minimal
+WORKDIR /app
+CMD /venv/bin/python3 -m glances -C /etc/glances.conf $GLANCES_OPT
-RUN apk add --no-cache \
- python3 \
- curl \
- lm-sensors \
- wireless-tools \
- iputils
+################################################################################
+# RELEASE: minimal
+FROM release as minimal
-COPY --from=remoteInstall /root/.local/bin /usr/local/bin/
-COPY --from=remoteInstall /root/.local/lib/python3.8/site-packages /usr/lib/python3.8/site-packages/
+COPY --from=buildMinimal /venv /venv
-# EXPOSE PORT (XMLRPC / WebUI)
-EXPOSE 61209 61208
+################################################################################
+# RELEASE: full
+FROM release as full
-# Define default command.
-CMD python3 -m glances -C /glances/conf/glances.conf $GLANCES_OPT
+RUN apk add --no-cache libzmq
+COPY --from=buildFull /venv /venv
-FROM minimal as full
+################################################################################
+# RELEASE: dev - to be compatible with CI
+FROM full as dev
-COPY --from=additional-packages /root/.local/lib/python3.8/site-packages /usr/lib/python3.8/site-packages/
+# Forward access and error logs to Docker's log collector
+RUN ln -sf /dev/stdout /tmp/glances-root.log \
+ && ln -sf /dev/stderr /var/log/error.log \