diff options
author | Bharath Vignesh J K <52282402+RazCrimson@users.noreply.github.com> | 2023-05-12 02:56:53 +0530 |
---|---|---|
committer | Bharath Vignesh J K <52282402+RazCrimson@users.noreply.github.com> | 2023-05-12 04:00:30 +0530 |
commit | adafb32a2f4498bd84781dcb4fc2f7132015ffe4 (patch) | |
tree | 57c52a4726a14dfa38398fd11a3feb7e7a160ee6 /docker-files | |
parent | e7c198b7170e8f543b5bf11bf31f4e0e5cc75126 (diff) |
chg: Dockerfile - structured & cleaner build process
Diffstat (limited to 'docker-files')
-rw-r--r-- | docker-files/alpine.Dockerfile | 150 | ||||
-rw-r--r-- | docker-files/ubuntu.Dockerfile | 148 |
2 files changed, 116 insertions, 182 deletions
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 |