-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
123 lines (100 loc) · 2.54 KB
/
Dockerfile
File metadata and controls
123 lines (100 loc) · 2.54 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
113
114
115
116
117
118
119
120
121
122
123
# Global arguments
ARG APP_UID=1000
ARG APP_GID=1000
ARG QT_VERSION=6.10
ARG ROCKSDB_VERSION=10.10
FROM ghcr.io/eudaldgr/scratchless AS scratchless
FROM ghcr.io/eudaldgr/scratchless:qt-minimal-${QT_VERSION} AS qt
FROM ghcr.io/eudaldgr/scratchless:rocksdb-${ROCKSDB_VERSION} AS rocksdb
# Build stage
FROM docker.io/alpine AS build
ARG APP_VERSION \
APP_ROOT \
TARGETARCH \
TARGETVARIANT
RUN set -ex; \
apk --no-cache --update add \
autoconf \
brotli-dev \
bzip2-dev \
g++ \
git \
gnupg \
jemalloc-dev \
liburing-dev \
lz4-dev \
make \
openssl-dev \
pkgconf \
snappy-dev \
zeromq-dev \
zlib-dev \
zstd-dev;
RUN set -ex; \
git clone --branch v${APP_VERSION} https://github.com/cculianu/Fulcrum.git;
RUN set -ex; \
wget -qO- "https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt" | gpg --import;
RUN set -ex; \
cd Fulcrum; \
git verify-commit v${APP_VERSION};
COPY --from=rocksdb / /
COPY --from=qt / /
RUN set -ex; \
cd Fulcrum; \
/opt/qt/bin/qmake -makefile \
PREFIX=/usr \
Fulcrum.pro \
"CONFIG-=debug" \
"CONFIG+=release" \
"LIBS+=-L/usr/lib -lrocksdb -lz -lbz2 -ljemalloc -lzmq -lzstd -llz4 -luring -lsnappy" \
"INCLUDEPATH+=/usr/include";
RUN set -ex; \
cd Fulcrum; \
make -j "$(nproc)" install;
RUN set -ex; \
strip /usr/bin/Fulcrum;
COPY --from=scratchless / ${APP_ROOT}/
# Collect all runtime dependencies
RUN set -ex; \
mkdir -p \
${APP_ROOT}/lib \
${APP_ROOT}/bin \
${APP_ROOT}/data \
${APP_ROOT}/etc;
RUN set -ex; \
cp /usr/bin/Fulcrum ${APP_ROOT}/bin/;
RUN set -ex; \
cp /usr/bin/FulcrumAdmin ${APP_ROOT}/bin/;
# Copy all required shared libraries
RUN set -ex; \
ldd ${APP_ROOT}/bin/Fulcrum | awk '{if (match($3,"/")) print $3}' | xargs -I '{}' cp -v '{}' ${APP_ROOT}/lib/ || true;
RUN set -ex; \
ldd ${APP_ROOT}/bin/FulcrumAdmin | awk '{if (match($3,"/")) print $3}' | xargs -I '{}' cp -v '{}' ${APP_ROOT}/lib/ || true;
# Copy the dynamic linker
RUN set -ex; \
cp /lib/ld-musl-*.so.1 ${APP_ROOT}/lib/;
# Final scratch image
FROM scratch
ARG TARGETPLATFORM \
TARGETOS \
TARGETARCH \
TARGETVARIANT \
APP_IMAGE \
APP_NAME \
APP_VERSION \
APP_ROOT \
APP_UID \
APP_GID \
APP_NO_CACHE
ENV APP_IMAGE=${APP_IMAGE} \
APP_NAME=${APP_NAME} \
APP_VERSION=${APP_VERSION} \
APP_ROOT=${APP_ROOT}
COPY --from=build ${APP_ROOT}/ /
ENV DATA_DIR=/data
VOLUME /data
ENV SSL_CERTFILE=${DATA_DIR}/fulcrum.crt
ENV SSL_KEYFILE=${DATA_DIR}/fulcrum.key
EXPOSE 50001 50002
USER ${APP_UID}:${APP_GID}
ENTRYPOINT ["/bin/Fulcrum", "-D", "/data"]