summaryrefslogtreecommitdiffstats
path: root/docker-files/alpine.Dockerfile
blob: e32f0cb3ba16645fa6ce7e6af9001de27b6a80ee (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#
# Glances Dockerfile (based on Alpine)
#
# https://github.com/nicolargo/glances
#

# 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

FROM alpine:${IMAGE_VERSION} as build
ARG PYTHON_VERSION

RUN apk add --no-cache \
  python3 \
  python3-dev \
  py3-pip \
  py3-wheel \
  musl-dev \
  linux-headers \
  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

FROM build as buildRequirements
ARG PYTHON_VERSION

COPY requirements.txt .
RUN pip3 install --no-cache-dir --user -r requirements.txt

# 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

# As minimal image we want to monitor others docker containers
RUN pip3 install --no-cache-dir --user docker

# Force install otherwise it could be cached without rerun
ARG CHANGING_ARG
RUN pip3 install --no-cache-dir --user glances

##############################################################################

FROM build as buildOptionalRequirements
ARG PYTHON_VERSION

# Required for optional dependency cassandra-driver
ENV CASS_DRIVER_NO_CYTHON=1
# See issue 2368
ENV 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

##############################################################################
# full image
##############################################################################

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 ./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

##############################################################################
# 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

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

# EXPOSE PORT (XMLRPC / WebUI)
EXPOSE 61209 61208

# Define default command.
WORKDIR /glances
CMD python3 -m glances -C /etc/glances.conf $GLANCES_OPT

##############################################################################
# dev image
##############################################################################

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