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