forked from nuclia/nucliadb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile.node_local
132 lines (107 loc) · 4.62 KB
/
Dockerfile.node_local
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
FROM rust:bullseye as base
LABEL maintainer="[email protected]"
LABEL org.opencontainers.image.vendor="Nuclia Inc."
WORKDIR /nucliadb
# Install system dependencies
COPY scripts/install-system-deps.sh /tmp/
RUN /tmp/install-system-deps.sh && rm /tmp/install-system-deps.sh
RUN apt-get -y update \
&& apt-get -y install ca-certificates \
cmake \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
RUN set -eux; \
dpkgArch="$(dpkg --print-architecture)"; \
case "${dpkgArch##*-}" in \
amd64) probeArch='amd64'; probeSha256='8d104fb997c9a5146a15a9c9f1fd45afa9d2dd995e185aeb96a19263fbd55b8a' ;; \
arm64) probeArch='arm64'; probeSha256='6a74ac6eebb173987dd4a68fa99b74b2e1bdd3e0c7cf634c0d823595fbb28609' ;; \
i386) probeArch='386'; probeSha256='eaed3339e273116d2c44a271d7245da1999b28a0c0bdf1d7b3aa75917712dc1a' ;; \
*) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
esac; \
curl -L -o /bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.4.17/grpc_health_probe-linux-${probeArch}; \
echo "${probeSha256} /bin/grpc_health_probe" | sha256sum -c -; \
chmod +x /bin/grpc_health_probe
# Required by tonic
RUN rustup component add rustfmt \
&& cargo install cargo-chef
# --------------------------------------------------------------------
FROM base as planner
# XXX As COPY copies the contents of a directory and not the directory itself,
# we use multiple COPY commands to avoid including Pyhton sources. Ideally, we
# should have a single COPY command getting all Rust code.
COPY Cargo.toml \
Cargo.lock \
rust-toolchain.toml \
/nucliadb/
COPY .cargo/config.toml /nucliadb/.cargo/
COPY nucliadb_core /nucliadb/nucliadb_core
COPY nucliadb_node /nucliadb/nucliadb_node
COPY nucliadb_node_binding /nucliadb/nucliadb_node_binding
COPY nucliadb_paragraphs /nucliadb/nucliadb_paragraphs
COPY nucliadb_procs /nucliadb/nucliadb_procs
COPY nucliadb_protos /nucliadb/nucliadb_protos
COPY nucliadb_relations /nucliadb/nucliadb_relations
COPY nucliadb_relations2 /nucliadb/nucliadb_relations2
COPY nucliadb_texts /nucliadb/nucliadb_texts
COPY nucliadb_vectors /nucliadb/nucliadb_vectors
COPY vectors_benchmark /nucliadb/vectors_benchmark
RUN cargo chef prepare --recipe-path recipe.json
# --------------------------------------------------------------------
FROM base as builder
ARG CARGO_FEATURES=release-feature-set
ARG CARGO_PROFILE=release
ENV RUSTFLAGS="--cfg prometheus_metrics --cfg tokio_unstable"
COPY --from=planner /nucliadb/recipe.json recipe.json
# Build dependencies (this is the cached docker layer)
RUN cargo chef cook \
--recipe-path recipe.json \
--features $CARGO_FEATURES \
$(test "$CARGO_PROFILE" = "release" && echo "--release")
# XXX same as above
COPY Cargo.toml \
Cargo.lock \
rust-toolchain.toml \
/nucliadb/
COPY .cargo/config.toml /nucliadb/.cargo/
COPY nucliadb_core /nucliadb/nucliadb_core
COPY nucliadb_node /nucliadb/nucliadb_node
COPY nucliadb_node_binding /nucliadb/nucliadb_node_binding
COPY nucliadb_paragraphs /nucliadb/nucliadb_paragraphs
COPY nucliadb_procs /nucliadb/nucliadb_procs
COPY nucliadb_protos /nucliadb/nucliadb_protos
COPY nucliadb_relations /nucliadb/nucliadb_relations
COPY nucliadb_relations2 /nucliadb/nucliadb_relations2
COPY nucliadb_texts /nucliadb/nucliadb_texts
COPY nucliadb_vectors /nucliadb/nucliadb_vectors
COPY vectors_benchmark /nucliadb/vectors_benchmark
# Build application (only run when sources are modified)
RUN echo "Building workspace with feature(s) '$CARGO_FEATURES' and profile '$CARGO_PROFILE'" \
&& cargo build \
--locked \
--features $CARGO_FEATURES \
-p nucliadb_node \
$(test "$CARGO_PROFILE" = "release" && echo "--release") \
&& echo "Moving binaries to /nucliadb/bin" \
&& mkdir -p /nucliadb/bin \
&& find target/$CARGO_PROFILE -maxdepth 1 -perm /a+x -type f -exec mv {} /nucliadb/bin \; \
&& cargo install rust-spy \
&& cargo clean
# --------------------------------------------------------------------
FROM debian:bullseye-slim AS nucliadb
ENV DATA_PATH=data
ENV RUST_LOG=nucliadb_node=DEBUG
ENV RUST_BACKTRACE=1
RUN apt-get -y update \
&& apt-get -y install ca-certificates curl \
libssl1.1 \
lmdb-utils \
libdw-dev \
linux-perf \
linux-base \
&& cp /usr/bin/perf_5.10 /usr/bin/perf_5.15 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=base /bin/grpc_health_probe /bin/grpc_health_probe
COPY --from=builder /nucliadb/bin/node_reader /usr/local/bin/node_reader
COPY --from=builder /nucliadb/bin/node_writer /usr/local/bin/node_writer
COPY --from=builder /usr/local/cargo/bin/rust-spy /usr/local/bin/rust-spy
EXPOSE 4444/udp