forked from peeringdb/peeringdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
134 lines (101 loc) · 2.64 KB
/
Dockerfile
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
# RUN true is used here to separate problematic COPY statements,
# per this issue: https://github.com/moby/moby/issues/37965
# rust and cargo for cryptography package
ARG build_deps=" \
g++ \
freetype-dev \
libjpeg-turbo-dev \
linux-headers \
make \
mariadb-dev \
libffi-dev \
curl \
rust \
cargo \
"
ARG run_deps=" \
freetype \
ttf-freefont \
gettext \
libjpeg-turbo \
graphviz \
mariadb-connector-c \
libgcc \
"
FROM python:3.11-alpine as base
ARG virtual_env=/srv/www.peeringdb.com/venv
ENV VIRTUAL_ENV="$virtual_env"
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# build container
FROM base as builder
ARG build_deps
RUN apk --update --no-cache add $build_deps
RUN pip install -U pip poetry
# create venv and update venv pip
RUN python3 -m venv "$VIRTUAL_ENV" && pip install -U pip
WORKDIR /srv/www.peeringdb.com
COPY poetry.lock pyproject.toml ./
# install dev now so we don't need a build env for testing (adds 8M)
RUN poetry install --no-root
# inetd
RUN apk add busybox-extras
#### final image here
FROM base as final
ARG run_deps
ARG uid=996
# extra settings file if needed
ARG ADD_SETTINGS_FILE=mainsite/settings/dev.py
# add dependencies
RUN apk add --no-cache $run_deps
RUN adduser -Du $uid pdb
WORKDIR /srv/www.peeringdb.com
COPY --from=builder "$VIRTUAL_ENV" "$VIRTUAL_ENV"
RUN mkdir -p api-cache etc locale media static var/log
COPY manage.py .
# container exec whois
COPY in.whoisd .
COPY Ctl/VERSION etc
COPY docs/ docs
COPY mainsite/ mainsite
RUN true
COPY $ADD_SETTINGS_FILE mainsite/settings/
RUN true
COPY peeringdb_server/ peeringdb_server
COPY fixtures/ fixtures
COPY .coveragerc .coveragerc
RUN mkdir coverage
COPY scripts/manage /usr/bin/
COPY Ctl/docker/entrypoint.sh /
RUN DJANGO_SECRET_KEY=secret manage collectstatic --no-input
# inetd for whois
COPY --from=builder /usr/sbin/inetd /usr/sbin/
RUN true
COPY Ctl/docker/inetd.conf /etc/
RUN chown -R pdb:pdb api-cache locale media var/log coverage
#### test image here
FROM final as tester
ARG build_deps
WORKDIR /srv/www.peeringdb.com
COPY poetry.lock pyproject.toml ./
RUN true
COPY tests/ tests
RUN chown -R pdb:pdb tests/
# install dev deps
RUN apk --update --no-cache add $build_deps
RUN pip install -U poetry
RUN poetry install --no-root
# Same as final entrypoint for running in dev mode
COPY Ctl/docker/entrypoint.sh .
RUN true
COPY Ctl/docker/django-uwsgi.ini etc/
USER pdb
ENTRYPOINT ["./entrypoint.sh"]
CMD ["runserver"]
#### entry point from final image, not tester
FROM final
COPY Ctl/docker/entrypoint.sh .
RUN true
COPY Ctl/docker/django-uwsgi.ini etc/
USER pdb
ENTRYPOINT ["./entrypoint.sh"]
CMD ["runserver"]