summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBharath Vignesh J K <52282402+RazCrimson@users.noreply.github.com>2023-05-12 02:56:53 +0530
committerBharath Vignesh J K <52282402+RazCrimson@users.noreply.github.com>2023-05-12 04:00:30 +0530
commitadafb32a2f4498bd84781dcb4fc2f7132015ffe4 (patch)
tree57c52a4726a14dfa38398fd11a3feb7e7a160ee6
parente7c198b7170e8f543b5bf11bf31f4e0e5cc75126 (diff)
chg: Dockerfile - structured & cleaner build process
-rw-r--r--.dockerignore18
-rw-r--r--docker-files/alpine.Dockerfile150
-rw-r--r--docker-files/ubuntu.Dockerfile148
3 files changed, 132 insertions, 184 deletions
diff --git a/.dockerignore b/.dockerignore
index c2e5dbd2..de510139 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,2 +1,16 @@
-.dockerignore
-.git
+# Ignore everything
+*
+
+# Include only code files
+!/glances/**/*.py
+
+# Include WebUI files (remove when webui moved to seperate package)
+!/glances/outputs/static
+
+# Include Requirements files
+!/requirements.txt
+!/webui-requirements.txt
+!/optional-requirements.txt
+
+# Include Config file
+!/docker-compose/glances.conf
diff --git a/docker-files/alpine.Dockerfile b/docker-files/alpine.Dockerfile
index e32f0cb3..546da463 100644
--- a/docker-files/alpine.Dockerfile
+++ b/docker-files/alpine.Dockerfile
@@ -11,11 +11,27 @@
ARG IMAGE_VERSION=3.18.0
ARG PYTHON_VERSION=3.11
-FROM alpine:${IMAGE_VERSION} as build
-ARG PYTHON_VERSION
+##############################################################################
+# 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 \
@@ -24,124 +40,78 @@ RUN apk add --no-cache \
build-base \
libzmq \
zeromq-dev \
- curl \
- lm-sensors \
- wireless-tools \
- smartmontools \
- iputils \
- tzdata \
# Required for 'cryptography' dependency of optional requirement 'cassandra-driver' \
# Refer: https://cryptography.io/en/latest/installation/#alpine \
# `git` required to clone cargo crates (dependencies)
- gcc libffi-dev openssl-dev cargo pkgconfig git
-
-##############################################################################
-# Install the dependencies beforehand to make them cacheable
+ git \
+ gcc \
+ cargo \
+ pkgconfig \
+ libffi-dev \
+ openssl-dev
-FROM build as buildRequirements
-ARG PYTHON_VERSION
-
-COPY requirements.txt .
-RUN pip3 install --no-cache-dir --user -r requirements.txt
+RUN python${PYTHON_VERSION} -m venv 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 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 /venv/bin/python3 -m pip install \
+ docker \
+ python-dateutil \
+ #-r requirements.txt \
+ -r webui-requirements.txt
##############################################################################
-
-FROM build as buildOptionalRequirements
-ARG PYTHON_VERSION
+# BUILD: Install all the deps
+FROM build as buildFull
# Required for optional dependency cassandra-driver
-ENV CASS_DRIVER_NO_CYTHON=1
+ARG CASS_DRIVER_NO_CYTHON=1
# See issue 2368
-ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
+ARG CARGO_NET_GIT_FETCH_WITH_CLI=true
-COPY requirements.txt .
-COPY optional-requirements.txt .
-RUN pip3 install --no-cache-dir --user -r optional-requirements.txt
+RUN /venv/bin/python3 -m pip install \
+ #-r requirements.txt \
+ -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
+WORKDIR /app
+CMD /venv/bin/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
-
-RUN apk add --no-cache \
- python3 \
- py3-packaging \
- py3-dateutil \
- py3-requests \
- curl \
- lm-sensors \
- wireless-tools \
- smartmontools \
- iputils \
- tzdata
+################################################################################
+# 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 \
diff --git a/docker-files/ubuntu.Dockerfile b/docker-files/ubuntu.Dockerfile
index b929bd74..b5c148bc 100644
--- a/docker-files/ubuntu.Dockerfile
+++ b/docker-files/ubuntu.Dockerfile
@@ -8,23 +8,17 @@
# Ex: Python 3.10 for Ubuntu 22.04
# Note: ENV is for future running containers. ARG for building your Docker image.
-# Image from CUDA https://hub.docker.com/r/nvidia/cuda/tags
-ARG IMAGE_VERSION=12.1.1-base-ubuntu22.04
-ARG PYTHON_VERSION=3.10
-ARG PIP_MIRROR=https://mirrors.aliyun.com/pypi/simple/
-FROM nvidia/cuda:${IMAGE_VERSION} as build
+ARG IMAGE_VERSION=23.04
+ARG PYTHON_VERSION=3.11
+##############################################################################
+# Base layer to be used for building dependencies and the release images
+FROM ubuntu:${IMAGE_VERSION} as base
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
python3 \
- python3-dev \
- python3-pip \
- python3-wheel \
- musl-dev \
- build-essential \
- libzmq5 \
curl \
lm-sensors \
wireless-tools \
@@ -35,116 +29,86 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/*
##############################################################################
-# Install the dependencies beforehand to make them cacheable
-
-FROM build as buildRequirements
+# BUILD Stages
+##############################################################################
+# BUILD: Base image shared by all build images
+FROM base as build
ARG PYTHON_VERSION
-ARG PIP_MIRROR
+ARG DEBIAN_FRONTEND=noninteractive
-ARG PIP_MIRROR=https://mirrors.aliyun.com/pypi/simple/
+# Install build-time dependencies
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ python3-dev \
+ python3-venv \
+ python3-pip \
+ python3-wheel \
+ libzmq5 \
+ musl-dev \
+ build-essential \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
-COPY requirements.txt .
-RUN python${PYTHON_VERSION} -m pip install --no-cache-dir --user -r requirements.txt -i ${PIP_MIRROR}
+RUN python${PYTHON_VERSION} -m venv venv
-# Minimal means no webui, but it break what is done previously (see #2155)
-# So install the webui requirements...
-COPY webui-requirements.txt .
-RUN python${PYTHON_VERSION} -m pip install --no-cache-dir --user -r webui-requirements.txt -i ${PIP_MIRROR}
+COPY requirements.txt webui-requirements.txt optional-requirements.txt ./
-# As minimal image we want to monitor others docker containers
-RUN python${PYTHON_VERSION} -m pip install --no-cache-dir --user docker -i ${PIP_MIRROR}
+##############################################################################
+# BUILD: Install the minimal image deps
+FROM build as buildMinimal
-# Force install otherwise it could be cached without rerun
-ARG CHANGING_ARG
-RUN python${PYTHON_VERSION} -m pip install --no-cache-dir --user glances -i ${PIP_MIRROR}
+RUN /venv/bin/python3 -m pip install \
+ docker \
+ python-dateutil \
+ #-r requirements.txt \
+ -r webui-requirements.txt
##############################################################################
+# BUILD: Install all the deps
+FROM build as buildFull
-FROM build as buildOptionalRequirements
-ARG PYTHON_VERSION
-ARG PIP_MIRROR
-
-COPY requirements.txt .
-COPY optional-requirements.txt .
-RUN CASS_DRIVER_NO_CYTHON=1 pip3 install --no-cache-dir --user -r optional-requirements.txt -i ${PIP_MIRROR}
+RUN /venv/bin/python3 -m pip install \
+ #-r requirements.txt \
+ -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 /root/.local/bin/
-COPY --from=buildRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /root/.local/lib/python${PYTHON_VERSION}/site-packages/
-COPY --from=buildOptionalRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /root/.local/lib/python${PYTHON_VERSION}/site-packages/
+# Copy Glances 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
+WORKDIR /app
+CMD /venv/bin/python3 -m glances -C /etc/glances.conf $GLANCES_OPT
-##############################################################################
-# minimal image
-##############################################################################
+################################################################################
+# RELEASE: minimal
+FROM release as minimal
-# Create running images without any building dependency
-FROM nvidia/cuda:${IMAGE_VERSION} as minimal
-ARG PYTHON_VERSION
+COPY --from=buildMinimal /venv /venv
-ARG DEBIAN_FRONTEND=noninteractive
+################################################################################
+# RELEASE: full
+FROM release as full
RUN apt-get update \
- && apt-get install -y --no-install-recommends \
- python3 \
- python3-packaging \
- python3-dateutil \
- python3-requests \
- curl \
- lm-sensors \
- wireless-tools \
- smartmontools \
- net-tools \
- tzdata \
+ && apt-get install -y --no-install-recommends libzmq5 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
-COPY --from=buildRequirements /root/.local/bin /root/.local/bin/
-COPY --from=buildRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /root/.local/lib/python${PYTHON_VERSION}/site-packages/
-COPY ./docker-compose/glances.conf /etc/glances.conf
-
-# EXPOSE PORT (XMLRPC / WebUI)
-EXPOSE 61209 61208
-
-# Define default command.
-WORKDIR /glances
-CMD python3 -m glances -C /etc/glances.conf $GLANCES_OPT
-
-##############################################################################
-# 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 /root/.local/bin/
-COPY --from=buildRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /root/.local/lib/python${PYTHON_VERSION}/site-packages/
-COPY --from=buildOptionalRequirements /root/.local/lib/python${PYTHON_VERSION}/site-packages /root/.local/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 \ No newline at end of file