diff options
Diffstat (limited to 'docker-files/alpine.Dockerfile')
-rw-r--r-- | docker-files/alpine.Dockerfile | 153 |
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 \ |