docker
251 строка · 8.5 Кб
1FROM alpine:3.15
2LABEL org.opencontainers.image.authors="artembo@me.com; piligrim@rootnix.net"
3
4RUN addgroup -S tarantool \
5&& adduser -S -G tarantool tarantool \
6&& apk add --no-cache 'su-exec>=0.2'
7
8# An ARG instruction goes out of scope at the end of the build
9# stage where it was defined. To use an arg in multiple stages,
10# each stage must include the ARG instruction
11ARG TNT_VER
12ARG NPROC
13ENV TARANTOOL_VERSION=${TNT_VER} \
14TARANTOOL_DOWNLOAD_URL=https://github.com/tarantool/tarantool.git \
15TARANTOOL_INSTALL_LUADIR=/usr/local/share/tarantool \
16GPERFTOOLS_REPO=https://github.com/gperftools/gperftools.git \
17GPERFTOOLS_TAG=gperftools-2.10 \
18LUAROCKS_URL=https://github.com/tarantool/luarocks/archive/6e6fe62d9409fe2103c0fd091cccb3da0451faf5.tar.gz \
19LUAROCK_VSHARD_VERSION=0.1.26 \
20LUAROCK_AVRO_SCHEMA_VERSION=3.1.0 \
21LUAROCK_EXPERATIOND_VERSION=1.6.0 \
22LUAROCK_QUEUE_VERSION=1.3.3 \
23LUAROCK_CONNPOOL_VERSION=1.1.1 \
24LUAROCK_HTTP_VERSION=1.5.0 \
25LUAROCK_MEMCACHED_VERSION=1.1.1 \
26LUAROCK_METRICS_VERSION=1.0.0 \
27LUAROCK_TARANTOOL_PG_VERSION=2.0.2 \
28LUAROCK_TARANTOOL_MYSQL_VERSION=2.1.3 \
29LUAROCK_TARANTOOL_MQTT_VERSION=1.5.1 \
30LUAROCK_TARANTOOL_GIS_VERSION=1.0.1 \
31LUAROCK_TARANTOOL_GPERFTOOLS_VERSION=1.0.1
32
33COPY files/gperftools_alpine.diff /
34
35ARG ENABLE_BUNDLED_LIBYAML \
36LUAJIT_DISABLE_SYSPROF \
37GC64
38
39RUN set -x \
40&& apk add --no-cache --virtual .run-deps.1 \
41libstdc++ \
42readline \
43openssl \
44yaml \
45lz4 \
46binutils \
47ncurses \
48libgomp \
49lua \
50tar \
51zip \
52zlib \
53libunwind \
54icu \
55ca-certificates \
56libexecinfo-dev \
57&& apk add --no-cache --virtual .build-deps.1 \
58gcc \
59g++ \
60cmake \
61file \
62readline-dev \
63openssl-dev \
64yaml-dev \
65bsd-compat-headers \
66lz4-dev \
67zlib-dev \
68binutils-dev \
69ncurses-dev \
70lua-dev \
71musl-dev \
72make \
73git \
74libunwind-dev \
75autoconf \
76automake \
77libtool \
78linux-headers \
79go \
80icu-dev \
81wget \
82&& : "---------- gperftools ----------" \
83&& mkdir -p /usr/src/gperftools \
84&& git clone "$GPERFTOOLS_REPO" /usr/src/gperftools \
85&& git -C /usr/src/gperftools checkout "$GPERFTOOLS_TAG" \
86&& (cd /usr/src/gperftools; \
87./autogen.sh; \
88./configure --disable-libunwind --enable-frame-pointers; \
89make -j ${NPROC}; \
90cp .libs/libprofiler.so* /usr/local/lib/) \
91&& : "---------- pprof for gperftools ----------" \
92&& : "To avoid of the issue:" \
93&& : "'The master branch is Incompatible with go version < 1.13 #538'" \
94&& : "https://github.com/google/pprof/issues/538" \
95&& : "use latest workable commits with the old GO versions" \
96&& ( export GOPATH=/root/go && \
97export PATH=${GOPATH}/bin:/usr/local/go/bin:$PATH && \
98export GOBIN=$GOROOT/bin && \
99mkdir -p ${GOPATH}/src ${GOPATH}/bin && \
100go install github.com/google/pprof@latest ) \
101&& : "---------- tarantool ----------" \
102&& mkdir -p /usr/src/tarantool \
103&& git clone "$TARANTOOL_DOWNLOAD_URL" /usr/src/tarantool \
104&& git -C /usr/src/tarantool checkout "$TARANTOOL_VERSION" \
105&& git -C /usr/src/tarantool submodule update --init --recursive \
106&& (cd /usr/src/tarantool; \
107echo "WARNING: Temporary fix for test/unit/cbus_hang test" ; \
108git cherry-pick d7fa6d34ab4e0956fe8a80966ba628e0e3f81067 2>/dev/null || \
109git cherry-pick --abort ; \
110cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo\
111-DENABLE_BUNDLED_LIBYAML:BOOL=${ENABLE_BUNDLED_LIBYAML}\
112-DENABLE_BACKTRACE:BOOL=ON\
113-DLUAJIT_DISABLE_SYSPROF:BOOL=${LUAJIT_DISABLE_SYSPROF} \
114-DLUAJIT_ENABLE_GC64:BOOL=${GC64} \
115-DENABLE_DIST:BOOL=ON\
116.) \
117&& make -C /usr/src/tarantool -j ${NPROC} \
118&& make -C /usr/src/tarantool install \
119&& make -C /usr/src/tarantool clean \
120&& : "---------- luarocks ----------" \
121&& wget -O luarocks.tar.gz "$LUAROCKS_URL" \
122&& mkdir -p /usr/src/luarocks \
123&& tar -xzf luarocks.tar.gz -C /usr/src/luarocks --strip-components=1 \
124&& (cd /usr/src/luarocks; \
125./configure; \
126make -j ${NPROC} build; \
127make install) \
128&& rm -r /usr/src/luarocks \
129&& rm -rf /usr/src/tarantool \
130&& rm -rf /usr/src/gperftools \
131&& rm -rf /usr/src/go \
132&& : "---------- remove build deps ----------" \
133&& apk del .build-deps.1
134
135RUN mkdir -p /usr/local/etc/luarocks \
136&& mkdir -p /usr/local/etc/tarantool/rocks
137
138COPY files/luarocks-config.lua /usr/local/etc/luarocks/config-5.1.lua
139COPY files/luarocks-config.lua /usr/local/etc/tarantool/rocks/config-5.1.lua
140
141ARG ROCKS_INSTALLER
142RUN set -x \
143&& apk add --no-cache --virtual .run-deps.2 \
144mariadb-connector-c-dev \
145libpq \
146cyrus-sasl \
147libev \
148&& apk add --no-cache --virtual .build-deps.2 \
149git \
150cmake \
151make \
152coreutils \
153gcc \
154g++ \
155postgresql-dev \
156lua-dev \
157musl-dev \
158cyrus-sasl-dev \
159libev-dev \
160libucontext \
161libucontext-dev \
162libressl-dev \
163wget \
164unzip \
165&& mkdir -p /.rocks \
166&& : "---------- proj (for gis module) ----------" \
167&& wget -O proj.tar.gz http://download.osgeo.org/proj/proj-4.9.3.tar.gz \
168&& mkdir -p /usr/src/proj \
169&& tar -xzf proj.tar.gz -C /usr/src/proj --strip-components=1 \
170&& (cd /usr/src/proj; \
171./configure; \
172make -j ${NPROC}; \
173make install) \
174&& rm -r /usr/src/proj \
175&& rm -rf /usr/src/proj \
176&& rm -rf /proj.tar.gz \
177&& : "---------- geos (for gis module) ----------" \
178&& wget -O geos.tar.bz2 http://download.osgeo.org/geos/geos-3.6.0.tar.bz2 \
179&& mkdir -p /usr/src/geos \
180&& tar -xjf geos.tar.bz2 -C /usr/src/geos --strip-components=1 \
181&& (cd /usr/src/geos; \
182./configure; \
183make -j ${NPROC}; \
184make install) \
185&& rm -r /usr/src/geos \
186&& rm -rf /usr/src/geos \
187&& rm -rf /geos.tar.bz2 \
188&& : "---------- luarocks ----------" \
189&& : "ldoc" \
190&& ${ROCKS_INSTALLER} install ldoc \
191&& : "lua-term" \
192&& ${ROCKS_INSTALLER} install lua-term \
193&& : "avro" \
194&& ${ROCKS_INSTALLER} install avro-schema $LUAROCK_AVRO_SCHEMA_VERSION \
195&& : "expirationd" \
196&& ${ROCKS_INSTALLER} install expirationd $LUAROCK_EXPERATIOND_VERSION \
197&& : "queue" \
198&& ${ROCKS_INSTALLER} install queue $LUAROCK_QUEUE_VERSION \
199&& : "connpool" \
200&& ${ROCKS_INSTALLER} install connpool $LUAROCK_CONNPOOL_VERSION \
201&& : "vshard" \
202&& ${ROCKS_INSTALLER} install vshard $LUAROCK_VSHARD_VERSION \
203&& : "http" \
204&& ${ROCKS_INSTALLER} install http $LUAROCK_HTTP_VERSION \
205&& : "pg" \
206&& ${ROCKS_INSTALLER} install pg $LUAROCK_TARANTOOL_PG_VERSION \
207&& : "mysql" \
208&& ${ROCKS_INSTALLER} install mysql $LUAROCK_TARANTOOL_MYSQL_VERSION \
209&& : "memcached" \
210&& ${ROCKS_INSTALLER} install memcached $LUAROCK_MEMCACHED_VERSION \
211&& : "metrics" \
212&& ${ROCKS_INSTALLER} install metrics $LUAROCK_METRICS_VERSION \
213&& : "mqtt" \
214&& ${ROCKS_INSTALLER} install mqtt $LUAROCK_TARANTOOL_MQTT_VERSION \
215&& : "gis" \
216&& ${ROCKS_INSTALLER} install gis $LUAROCK_TARANTOOL_GIS_VERSION \
217&& : "gperftools" \
218&& ${ROCKS_INSTALLER} install gperftools $LUAROCK_TARANTOOL_GPERFTOOLS_VERSION \
219&& : "---------- remove build deps ----------" \
220&& apk del .build-deps.2
221
222# gh-170: needed for luarocks and etc
223RUN apk update \
224&& apk add wget curl git libucontext tzdata
225
226RUN mkdir -p /var/lib/tarantool \
227&& chown tarantool:tarantool /var/lib/tarantool \
228&& mkdir -p /opt/tarantool \
229&& chown tarantool:tarantool /opt/tarantool \
230&& mkdir -p /var/run/tarantool \
231&& chown tarantool:tarantool /var/run/tarantool \
232&& mkdir /etc/tarantool \
233&& chown tarantool:tarantool /etc/tarantool
234
235VOLUME /var/lib/tarantool
236WORKDIR /opt/tarantool
237
238COPY files/tarantool-entrypoint.lua /usr/local/bin/
239COPY files/tarantool_set_config.lua /usr/local/bin/
240COPY files/docker-entrypoint.sh /usr/local/bin/
241COPY files/console /usr/local/bin/
242COPY files/tarantool_is_up /usr/local/bin/
243COPY files/tarantool.default /usr/local/etc/default/tarantool
244
245RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
246ENTRYPOINT ["docker-entrypoint.sh"]
247
248HEALTHCHECK CMD tarantool_is_up
249
250EXPOSE 3301
251CMD [ "tarantool" ]
252