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.Dockerfile153
1 files changed, 68 insertions, 85 deletions
diff --git a/docker-files/alpine.Dockerfile b/docker-files/alpine.Dockerfile
index c44983b7..2497a438 100644
--- a/docker-files/alpine.Dockerfile
+++ b/docker-files/alpine.Dockerfile
@@ -5,16 +5,33 @@
#
# WARNING: the versions should be set.
-# Ex: Python 3.10 for Alpine 3.16
+# 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.17
-ARG PYTHON_VERSION=3.10
-FROM alpine:${IMAGE_VERSION} as build
-ARG PYTHON_VERSION
+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 \
@@ -23,111 +40,77 @@ RUN apk add --no-cache \
build-base \
libzmq \
zeromq-dev \
- curl \
- lm-sensors \
- wireless-tools \
- iputils
-
-##############################################################################
-# Install the dependencies beforehand to make them cacheable
-
-FROM build as buildRequirements
-ARG PYTHON_VERSION
+ # 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
-COPY requirements.txt .
-RUN pip3 install --no-cache-dir --user -r requirements.txt
+RUN python${PYTHON_VERSION} -m venv --without-pip venv
-# Minimal means no webui, but it break what is done previously (see #2155)
-# So install the webui requirements...
-COPY webui-requirements.txt .
-RUN pip3 install --no-cache-dir --user -r webui-requirements.txt
+COPY requirements.txt docker-requirements.txt webui-requirements.txt optional-requirements.txt ./
-# As minimal image we want to monitor others docker containers
-RUN pip3 install --no-cache-dir --user docker
+##############################################################################
+# BUILD: Install the minimal image deps
+FROM build as buildMinimal
-# Force install otherwise it could be cached without rerun
-ARG CHANGING_ARG
-RUN pip3 install --no-cache-dir --user glances
+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
-FROM build as buildOptionalRequirements
-ARG PYTHON_VERSION
+# Required for optional dependency cassandra-driver
+ARG CASS_DRIVER_NO_CYTHON=1
+# See issue 2368
+ARG CARGO_NET_GIT_FETCH_WITH_CLI=true
-COPY requirements.txt .
-COPY optional-requirements.txt .
-RUN CASS_DRIVER_NO_CYTHON=1 pip3 install --no-cache-dir --user -r optional-requirements.txt
+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
##############################################################################
-# full image
+# RELEASE Stages
##############################################################################
+# Base image shared by all releases
+FROM base as release
-FROM build as full
-ARG PYTHON_VERSION
-
-COPY --from=buildRequirements /root/.local/bin /usr/local/bin/
-COPY --from=buildRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /usr/lib/python${PYTHON_VERSION}/site-packages/
-COPY --from=buildOptionalRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /usr/lib/python${PYTHON_VERSION}/site-packages/
+# 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
# Define default command.
-WORKDIR /glances
-CMD python3 -m glances -C /etc/glances.conf $GLANCES_OPT
-
-##############################################################################
-# minimal image
-##############################################################################
-
-# Create running images without any building dependency
-FROM alpine:${IMAGE_VERSION} as minimal
-ARG PYTHON_VERSION
+WORKDIR /app
+CMD /venv/bin/python3 -m glances -C /etc/glances.conf $GLANCES_OPT
-RUN apk add --no-cache \
- python3 \
- py3-packaging \
- py3-dateutil \
- py3-requests \
- curl \
- lm-sensors \
- wireless-tools \
- iputils
+################################################################################
+# RELEASE: minimal
+FROM release as minimal
-COPY --from=buildRequirements /root/.local/bin /usr/local/bin/
-COPY --from=buildRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /usr/lib/python${PYTHON_VERSION}/site-packages/
-COPY ./docker-compose/glances.conf /etc/glances.conf
+COPY --from=buildMinimal /venv /venv
-# EXPOSE PORT (XMLRPC / WebUI)
-EXPOSE 61209 61208
+################################################################################
+# RELEASE: full
+FROM release as full
-# Define default command.
-WORKDIR /glances
-CMD python3 -m glances -C /etc/glances.conf $GLANCES_OPT
+RUN apk add --no-cache libzmq
-##############################################################################
-# dev image
-##############################################################################
+COPY --from=buildFull /venv /venv
+################################################################################
+# RELEASE: dev - to be compatible with CI
FROM full as dev
-ARG PYTHON_VERSION
-
-COPY --from=buildRequirements /root/.local/bin /usr/local/bin/
-COPY --from=buildRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /usr/lib/python${PYTHON_VERSION}/site-packages/
-COPY --from=buildOptionalRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /usr/lib/python${PYTHON_VERSION}/site-packages/
-COPY ./docker-compose/glances.conf /etc/glances.conf
-
-# Copy the current Glances source code
-COPY . /glances
-
-# EXPOSE PORT (XMLRPC / WebUI)
-EXPOSE 61209 61208
# 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
-
-# Define default command.
-WORKDIR /glances
-CMD python3 -m glances -C /etc/glances.conf $GLANCES_OPT
+ && ln -sf /dev/stderr /var/log/error.log \