-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
executable file
·203 lines (144 loc) · 5.39 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# -----------------------------------------------------------------------------
# Stages
# -----------------------------------------------------------------------------
ARG IMAGE_BUILDER=golang:1.23.4-bookworm
ARG IMAGE_FINAL=senzing/senzingsdk-runtime-beta:latest
# -----------------------------------------------------------------------------
# Stage: senzingsdk_runtime
# -----------------------------------------------------------------------------
FROM ${IMAGE_FINAL} AS senzingsdk_runtime
# -----------------------------------------------------------------------------
# Stage: builder
# -----------------------------------------------------------------------------
FROM ${IMAGE_BUILDER} AS builder
ENV REFRESHED_AT=2024-07-01
LABEL Name="senzing/go-builder" \
Maintainer="support@senzing.com" \
Version="0.1.0"
# Run as "root" for system installation.
USER root
# Install packages via apt-get.
RUN apt-get update \
&& apt-get -y install \
libsqlite3-dev \
python3 \
python3-dev \
python3-pip \
python3-venv \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Create and activate virtual environment.
RUN python3 -m venv /app/venv
ENV PATH="/app/venv/bin:$PATH"
# Install packages via PIP.
COPY requirements.txt .
RUN pip3 install --upgrade pip \
&& pip3 install -r requirements.txt \
&& rm requirements.txt
# Copy local files from the Git repository.
COPY ./rootfs /
COPY . ${GOPATH}/src/playground
# Copy files from prior stage.
COPY --from=senzingsdk_runtime "/opt/senzing/er/lib/" "/opt/senzing/er/lib/"
COPY --from=senzingsdk_runtime "/opt/senzing/er/sdk/c/" "/opt/senzing/er/sdk/c/"
# Set path to Senzing libs.
ENV LD_LIBRARY_PATH=/opt/senzing/er/lib/
# Build go program.
WORKDIR ${GOPATH}/src/playground
RUN make build-with-libsqlite3
# Copy binaries to /output.
RUN mkdir -p /output \
&& cp -R ${GOPATH}/src/playground/target/* /output/
# -----------------------------------------------------------------------------
# Stage: final
# -----------------------------------------------------------------------------
FROM ${IMAGE_FINAL} AS final
ENV REFRESHED_AT=2024-07-01
LABEL Name="senzing/playground" \
Maintainer="support@senzing.com" \
Version="0.4.6"
ARG BUILD_USER="senzing"
ARG BUILD_UID="1001"
ARG BUILD_GID="101"
HEALTHCHECK CMD ["/app/healthcheck.sh"]
USER root
# Install packages via apt-get.
RUN export STAT_TMP=$(stat --format=%a /tmp) \
&& chmod 777 /tmp \
&& apt-get update \
&& apt-get -y install \
gnupg2 \
jq \
libodbc1 \
libsqlite3-dev \
postgresql-client \
supervisor \
unixodbc \
&& chmod ${STAT_TMP} /tmp \
&& rm -rf /var/lib/apt/lists/*
# Install Java-11.
RUN mkdir -p /etc/apt/keyrings \
&& wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public > /etc/apt/keyrings/adoptium.asc
RUN echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >> /etc/apt/sources.list
RUN export STAT_TMP=$(stat --format=%a /tmp) \
&& chmod 777 /tmp \
&& apt-get update \
&& apt-get -y install \
curl \
python3-venv \
temurin-11-jdk \
&& chmod ${STAT_TMP} /tmp \
&& rm -rf /var/lib/apt/lists/*
# Install go.
RUN wget -O /tmp/go1.linux-amd64.tar.gz https://go.dev/dl/go1.23.3.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf /tmp/go1.linux-amd64.tar.gz
# Copy files from repository.
COPY ./rootfs /
# Copy files from prior stage.
COPY --from=builder /output/linux/playground /app/playground
COPY --from=builder /app/venv /app/venv
# Prepare jupyter lab environment.
RUN chmod --recursive 777 /app /examples /tmp
# Create ${BUILD_USER} user.
RUN useradd --no-log-init --create-home --shell /bin/bash --uid "${BUILD_UID}" --no-user-group "${BUILD_USER}"
# Run as non-root container
USER ${BUILD_USER}
ENV HOME=/home/${BUILD_USER}
WORKDIR ${HOME}
# Activate virtual environment.
ENV VIRTUAL_ENV=/app/venv
ENV PATH="/app/venv/bin:/examples/python:${PATH}"
# Install Jupyter Go Kernel.
ENV GOROOT=/usr/local/go
ENV GOPATH=${HOME}/go
ENV PATH=$PATH:${GOROOT}/bin:${GOPATH}/bin
RUN <<EOF
echo "NB_USER=${BUILD_USER}" >> .profile
echo "export PATH=${PATH}" >> .profile
echo "export GOPATH=${GOPATH}" >> .profile
echo "export GOROOT=${GOROOT}" >> .profile
EOF
RUN go install github.com/janpfeifer/gonb@latest \
&& go install golang.org/x/tools/cmd/goimports@latest \
&& go install golang.org/x/tools/gopls@latest \
&& gonb --install
# Install go packages for SDK
WORKDIR /examples/go
RUN go get -u ./... \
&& go get -t -u ./... \
&& go mod tidy
WORKDIR ${HOME}
# Runtime environment variables.
ENV LD_LIBRARY_PATH=/opt/senzing/er/lib/
ENV SENZING_API_SERVER_ALLOWED_ORIGINS='*'
ENV SENZING_API_SERVER_BIND_ADDR='all'
ENV SENZING_API_SERVER_ENABLE_ADMIN='true'
ENV SENZING_API_SERVER_PORT='8250'
ENV SENZING_API_SERVER_SKIP_ENGINE_PRIMING='true'
ENV SENZING_API_SERVER_SKIP_STARTUP_PERF='true'
ENV SENZING_DATA_MART_SQLITE_DATABASE_FILE=/tmp/datamart
ENV SENZING_ENGINE_CONFIGURATION_JSON='{"PIPELINE": {"CONFIGPATH": "/etc/opt/senzing", "LICENSESTRINGBASE64": "", "RESOURCEPATH": "/opt/senzing/er/resources", "SUPPORTPATH": "/opt/senzing/data"}, "SQL": {"CONNECTION": "sqlite3://na:na@nowhere/IN_MEMORY_DB?mode=memory&cache=shared"}}'
ENV SENZING_TOOLS_ENABLE_ALL=true
# Runtime execution.
WORKDIR /app
CMD ["/usr/bin/supervisord", "--nodaemon"]