forked from johnlonganecker/libpostal-rest-docker
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDockerfile
More file actions
112 lines (99 loc) · 3.13 KB
/
Dockerfile
File metadata and controls
112 lines (99 loc) · 3.13 KB
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
# syntax=docker/dockerfile:1
FROM debian:bookworm AS builder
ARG LIBPOSTAL_UPSTREAM=github.com/openvenues/libpostal
ENV LIBPOSTAL_UPSTREAM=${LIBPOSTAL_UPSTREAM}
ARG LIBPOSTAL_COMMIT=master
ENV LIBPOSTAL_COMMIT=${LIBPOSTAL_COMMIT}
ENV DEBIAN_FRONTEND=noninteractive
ENV PKG_CONFIG_PATH=/libpostal
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked <<EOF
set -eux
apt-get update
apt-get install \
--yes \
--no-install-recommends \
build-essential \
ca-certificates \
libsnappy-dev \
pkg-config \
autoconf \
automake \
libtool \
curl \
git \
;
rm -rf /var/lib/apt/lists/*
git clone \
"https://${LIBPOSTAL_UPSTREAM}" \
--branch "${LIBPOSTAL_COMMIT}" \
--depth=1 \
--single-branch \
/usr/src/libpostal
cd /usr/src/libpostal
./bootstrap.sh
mkdir --parents /opt/data
./configure --datadir=/opt/data --prefix=/libpostal
make --jobs=$(nproc)
make install DESTDIR=/libpostal
EOF
RUN <<EOF
set -eux
mv /libpostal/libpostal/* /libpostal/
rm -rf /libpostal/libpostal
mkdir /libpostal/bin/.libs
cd /usr/src/libpostal
cp libpostal.pc /libpostal/
cp src/.libs/libpostal src/.libs/address_parser /libpostal/bin/
chmod a+x /libpostal/bin/*
cd /libpostal
ldconfig -v
pkg-config --cflags libpostal
EOF
FROM debian:bookworm-slim AS library
COPY --link --from=builder /libpostal/bin/* /usr/bin/
COPY --link --from=builder /libpostal/lib/* /usr/lib/
COPY --link --from=builder /libpostal/include/* /usr/lib/
COPY --link --from=builder /opt/data /opt/data
COPY --link --chmod=0555 <<EOF /entrypoint.sh
#!/usr/bin/env bash
exec "\${@}"
EOF
ENTRYPOINT ["/entrypoint.sh"]
CMD ["libpostal", "--help"]
FROM golang:1.25-bookworm AS api_builder
ARG LIBPOSTAL_REST_UPSTREAM=github.com/johnlonganecker/libpostal-rest
ENV LIBPOSTAL_REST_UPSTREAM=${LIBPOSTAL_REST_UPSTREAM}
ARG LIBPOSTAL_REST_VERSION=1.1.0
ENV LIBPOSTAL_REST_VERSION=${LIBPOSTAL_REST_VERSION}
ENV PKG_CONFIG_PATH=/libpostal
ENV GOPATH=/go
WORKDIR /libpostal
COPY --link --from=builder /libpostal /libpostal
RUN --mount=type=cache,id=go-mod,target=/go/pkg/mod \
--mount=type=cache,id=go-build,target=/root/.cache/go-build <<EOF
set -eux
go install "${LIBPOSTAL_REST_UPSTREAM}@v${LIBPOSTAL_REST_VERSION}"
mv /go/bin/* /libpostal/bin/
chmod a+x /libpostal/bin/*
EOF
FROM busybox:glibc AS api
ARG LOG_LEVEL=info
ENV LOG_LEVEL=${LOG_LEVEL}
ARG LOG_STRUCTURED=true
ENV LOG_STRUCTURED=${LOG_STRUCTURED}
ARG PROMETHEUS_ENABLED=true
ENV PROMETHEUS_ENABLED=${PROMETHEUS_ENABLED}
ARG PROMETHEUS_PORT=9090
ENV PROMETHEUS_PORT=${PROMETHEUS_PORT}
ARG LISTEN_PORT=8080
ENV LISTEN_PORT=${LISTEN_PORT}
WORKDIR /libpostal
COPY --link --from=api_builder /libpostal/bin/* /usr/bin/
COPY --link --from=builder /libpostal/bin/* /usr/bin/
COPY --link --from=builder /libpostal/lib/* /usr/lib/
COPY --link --from=builder /libpostal/include/* /usr/include/
COPY --link --from=builder /opt/data /opt/data
EXPOSE ${LISTEN_PORT}/tcp
EXPOSE ${PROMETHEUS_PORT}/tcp
CMD ["/usr/bin/libpostal-rest"]