summaryrefslogtreecommitdiffstats
path: root/docker-files/ubuntu.Dockerfile
blob: 3a5ccc4c639a149412f8ad18161ed2edaf7191de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#
# Glances Dockerfile (based on Ubuntu)
#
# https://github.com/nicolargo/glances
#

# WARNING: the versions should be set.
# Ex: Python 3.12 for Ubuntu 24.04
# Note: ENV is for future running containers. ARG for building your Docker image.

ARG IMAGE_VERSION=24.04
ARG PYTHON_VERSION=3.12

##############################################################################
# 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 \
    curl \
    lm-sensors \
    wireless-tools \
    smartmontools \
    net-tools \
    tzdata \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

##############################################################################
# BUILD Stages
##############################################################################
# BUILD: Base image shared by all build images
FROM base as build
ARG PYTHON_VERSION
ARG DEBIAN_FRONTEND=noninteractive

# Upgrade the system
RUN apt-get update \
  && apt-get upgrade -y

# Install build-time dependencies
RUN apt-get install -y --no-install-recommends \
    python3-dev \
    python3-venv \
    python3-pip \
    python3-wheel \
    libzmq5 \
    musl-dev \
    build-essential

RUN apt-get clean \
  && rm -rf /var/lib/apt/lists/*

RUN python3 -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
ARG PYTHON_VERSION

RUN python3 -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
    -r requirements.txt \
    -r docker-requirements.txt \
    -r webui-requirements.txt

##############################################################################
# BUILD: Install all the deps
FROM build as buildFull
ARG PYTHON_VERSION

RUN python3 -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
    -r requirements.txt \
    -r optional-requirements.txt

##############################################################################
# RELEASE Stages
##############################################################################
# Base image shared by all releases
FROM base as release
ARG PYTHON_VERSION

# Copy Glances source code and config file
COPY ./docker-compose/glances.conf /etc/glances/glances.conf
COPY ./glances/. /app/glances/

# Copy binary and update PATH
COPY docker-bin.sh /usr/local/bin/glances
RUN chmod a+x /usr/local/bin/glances
ENV PATH="/venv/bin:$PATH"

# Copy binary and update PATH
COPY docker-bin.sh /usr/local/bin/glances
RUN chmod a+x /usr/local/bin/glances
ENV PATH="/venv/bin:$PATH"

# EXPOSE PORT (XMLRPC / WebUI)
EXPOSE 61209 61208

# Define default command.
WORKDIR /app
CMD /venv/bin/python3 -m glances $GLANCES_OPT

################################################################################
# RELEASE: minimal
FROM release as minimal
ARG PYTHON_VERSION

COPY --from=buildMinimal /venv /venv

################################################################################
# RELEASE: full
FROM release as full
ARG PYTHON_VERSION

RUN apt-get update \
  && apt-get install -y --no-install-recommends libzmq5 \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

COPY --from=buildFull /venv /venv

################################################################################
# RELEASE: dev - to be compatible with CI
FROM full as dev
ARG PYTHON_VERSION

# 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