1- FROM adoptopenjdk:8-jre-hotspot-focal
1+ ARG SERVICE_VERSION=${SERVICE_VERSION:-3.11.11}
2+ FROM cassandra:${SERVICE_VERSION}
23
3- ENV JOLOKIA_VERSION=1.3.3 JOLOKIA_HOST=0.0.0.0 JOLOKIA_PORT=8778
4-
5- # explicitly set user/group IDs
6- RUN set -eux; \
7- groupadd -r cassandra --gid=999; \
8- useradd -r -g cassandra --uid=999 cassandra
9-
10- RUN set -eux; \
11- apt-get update; \
12- apt-get install -y --no-install-recommends \
13- # solves warning: "jemalloc shared library could not be preloaded to speed up memory allocations"
14- libjemalloc2 \
15- # "free" is used by cassandra-env.sh
16- procps \
17- # "cqlsh" needs a python interpreter
18- python \
19- # "ip" is not required by Cassandra itself, but is commonly used in scripting Cassandra's configuration (since it is so fixated on explicit IP addresses)
20- iproute2 \
21- # Cassandra will automatically use numactl if available
22- # https://github.com/apache/cassandra/blob/18bcda2d4c2eba7370a0b21f33eed37cb730bbb3/bin/cassandra#L90-L100
23- # https://github.com/apache/cassandra/commit/604c0e87dc67fa65f6904ef9a98a029c9f2f865a
24- numactl \
25- ; \
26- rm -rf /var/lib/apt/lists/*; \
27- # https://issues.apache.org/jira/browse/CASSANDRA-15767 ("bin/cassandra" only looks for "libjemalloc.so" or "libjemalloc.so.1" which doesn't match our "libjemalloc.so.2")
28- libjemalloc="$(readlink -e /usr/lib/*/libjemalloc.so.2)" ; \
29- ln -sT "$libjemalloc" /usr/local/lib/libjemalloc.so; \
30- ldconfig
31-
32- # grab gosu for easy step-down from root
33- # https://github.com/tianon/gosu/releases
34- ENV GOSU_VERSION 1.12
35- RUN set -eux; \
36- savedAptMark="$(apt-mark showmanual)" ; \
37- apt-get update; \
38- apt-get install -y --no-install-recommends ca-certificates dirmngr gnupg wget; \
39- rm -rf /var/lib/apt/lists/*; \
40- dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" ; \
41- wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" ; \
42- wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" ; \
43- export GNUPGHOME="$(mktemp -d)" ; \
44- gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
45- gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
46- gpgconf --kill all; \
47- rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
48- apt-mark auto '.*' > /dev/null; \
49- [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
50- apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
51- chmod +x /usr/local/bin/gosu; \
52- gosu --version; \
53- gosu nobody true
54-
55- ENV CASSANDRA_HOME /opt/cassandra
56- ENV CASSANDRA_CONF /etc/cassandra
57- ENV PATH $CASSANDRA_HOME/bin:$PATH
58-
59- # https://cwiki.apache.org/confluence/display/CASSANDRA2/DebianPackaging#DebianPackaging-AddingRepositoryKeys
60- # $ docker run --rm buildpack-deps:buster-curl bash -c 'wget -qO- https://downloads.apache.org/cassandra/KEYS | gpg --batch --import &> /dev/null && gpg --batch --list-keys --with-fingerprint --with-colons' | awk -F: '$1 == "pub" && $2 == "-" { pub = 1 } pub && $1 == "fpr" { fpr = $10 } $1 == "sub" { pub = 0 } pub && fpr && $1 == "uid" && $2 == "-" { print "#", $10; print "\t" fpr " \\"; pub = 0 }'
61- ENV GPG_KEYS \
62- # Eric Evans <eevans@sym-link.com>
63- CEC86BB4A0BA9D0F90397CAEF8358FA2F2833C93 \
64- # Eric Evans <eevans@sym-link.com>
65- C4965EE9E3015D192CCCF2B6F758CE318D77295D \
66- # Sylvain Lebresne (pcmanus) <sylvain@datastax.com>
67- 5AED1BF378E9A19DADE1BCB34BD736A82B5C1B00 \
68- # T Jake Luciani <jake@apache.org>
69- 514A2AD631A57A16DD0047EC749D6EEC0353B12C \
70- # Michael Shuler <michael@pbandjelly.org>
71- A26E528B271F19B9E5D8E19EA278B781FE4B2BDA \
72- # Michael Semb Wever <mick@thelastpickle.com>
73- A4C465FEA0C552561A392A61E91335D77E3E87CB \
74- # Alex Petrov <oleksandr.petrov@gmail.com>
75- 9E66CEC6106D578D0B1EB9BFF1000962B7F6840C \
76- # Jordan West <jwest@apache.org>
77- C4009872C59B49561310D966D0062876AF30F054 \
78- # Brandon Williams <brandonwilliams@apache.org>
79- B7842CDAF36E6A3214FAE35D5E85B9AE0B84C041 \
80- # Ekaterina Buryanova Dimitrova (CODE SIGNING KEY) <e.dimitrova@gmail.com>
81- 3E9C876907A560ACA00964F363E9BAD215BBF5F0
82-
83- ENV CASSANDRA_VERSION 3.11.11
84- ENV CASSANDRA_SHA512 5a7dc4237c9f43526b63cae62f04d73ec60f28e86ee1dd4bd4aaa55d2063d74fe842e015f7f68512db7deadbe52cab37417341183a716c191035463992e42d37
85-
86- RUN set -eux; \
87- savedAptMark="$(apt-mark showmanual)" ; \
88- apt-get update; \
89- apt-get install -y --no-install-recommends ca-certificates dirmngr gnupg wget; \
90- rm -rf /var/lib/apt/lists/*; \
91- \
92- ddist() { \
93- local f="$1" ; shift; \
94- local distFile="$1" ; shift; \
95- local success=; \
96- local distUrl=; \
97- for distUrl in \
98- # https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
99- 'https://www.apache.org/dyn/closer.cgi?action=download&filename=' \
100- # if the version is outdated (or we're grabbing the .asc file), we might have to pull from the dist/archive :/
101- https://www-us.apache.org/dist/ \
102- https://www.apache.org/dist/ \
103- https://archive.apache.org/dist/ \
104- ; do \
105- if wget --progress=dot:giga -O "$f" "$distUrl$distFile" && [ -s "$f" ]; then \
106- success=1; \
107- break; \
108- fi; \
109- done; \
110- [ -n "$success" ]; \
111- }; \
112- \
113- ddist 'cassandra-bin.tgz' "cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz" ; \
114- echo "$CASSANDRA_SHA512 *cassandra-bin.tgz" | sha512sum --check --strict -; \
115- \
116- ddist 'cassandra-bin.tgz.asc' "cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz.asc" ; \
117- export GNUPGHOME="$(mktemp -d)" ; \
118- for key in $GPG_KEYS; do \
119- gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
120- done; \
121- gpg --batch --verify cassandra-bin.tgz.asc cassandra-bin.tgz; \
122- rm -rf "$GNUPGHOME" ; \
123- \
124- apt-mark auto '.*' > /dev/null; \
125- [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
126- apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
127- \
128- mkdir -p "$CASSANDRA_HOME" ; \
129- tar --extract --file cassandra-bin.tgz --directory "$CASSANDRA_HOME" --strip-components 1; \
130- rm cassandra-bin.tgz*; \
131- \
132- [ ! -e "$CASSANDRA_CONF" ]; \
133- mv "$CASSANDRA_HOME/conf" "$CASSANDRA_CONF" ; \
134- ln -sT "$CASSANDRA_CONF" "$CASSANDRA_HOME/conf" ; \
135- \
136- dpkgArch="$(dpkg --print-architecture)" ; \
137- case "$dpkgArch" in \
138- ppc64el) \
139- # https://issues.apache.org/jira/browse/CASSANDRA-13345
140- # "The stack size specified is too small, Specify at least 328k"
141- if grep -q -- '^-Xss' "$CASSANDRA_CONF/jvm.options" ; then \
142- # 3.11+ (jvm.options)
143- grep -- '^-Xss256k$' "$CASSANDRA_CONF/jvm.options" ; \
144- sed -ri 's/^-Xss256k$/-Xss512k/' "$CASSANDRA_CONF/jvm.options" ; \
145- grep -- '^-Xss512k$' "$CASSANDRA_CONF/jvm.options" ; \
146- elif grep -q -- '-Xss256k' "$CASSANDRA_CONF/cassandra-env.sh" ; then \
147- # 3.0 (cassandra-env.sh)
148- sed -ri 's/-Xss256k/-Xss512k/g' "$CASSANDRA_CONF/cassandra-env.sh" ; \
149- grep -- '-Xss512k' "$CASSANDRA_CONF/cassandra-env.sh" ; \
150- fi; \
151- ;; \
152- esac; \
153- \
154- mkdir -p "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra; \
155- chown -R cassandra:cassandra "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra; \
156- chmod 777 "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra; \
157- chmod -R a+rwX "$CASSANDRA_CONF" ; \
158- ln -sT /var/lib/cassandra "$CASSANDRA_HOME/data" ; \
159- ln -sT /var/log/cassandra "$CASSANDRA_HOME/logs" ; \
160- \
161- # smoke test
162- cassandra -v
4+ ENV JOLOKIA_VERSION=1.6.0 JOLOKIA_HOST=0.0.0.0 JOLOKIA_PORT=8778
1635
1646RUN cp -f $JAVA_HOME/lib/management/jmxremote.access $JAVA_HOME/lib/management/jmxremote.access.bak \
1657 && chown root:cassandra $JAVA_HOME/lib/management/jmxremote.access* \
@@ -171,16 +13,13 @@ RUN set -eux; \
17113 savedAptMark="$(apt-mark showmanual)" ; \
17214 apt-get update; \
17315 apt-get install -y --no-install-recommends wget \
174- && wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/${JOLOKIA_VERSION}/jolokia-jvm-${JOLOKIA_VERSION}-agent.jar \
175- -O $CASSANDRA_LIB/jolokia-jvm-${JOLOKIA_VERSION}-agent.jar
176-
177- VOLUME /var/lib/cassandra
16+ && wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/${JOLOKIA_VERSION}/jolokia-jvm-${JOLOKIA_VERSION}-agent.jar -O jolokia-jvm-${JOLOKIA_VERSION}-agent.jar
17817
17918ENV JMX_REMOTE=yes JOLOKIA_ENABLED=yes
18019
181- COPY docker-entrypoint-initdb.d /usr/local/bin/
182- RUN ln -s usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh # backwards compat
183- ENTRYPOINT ["docker-entrypoint.sh" ]
20+ COPY docker-entrypoint-initdb.d /docker-entrypoint-initdb.d
21+
22+ ENTRYPOINT ["/docker-entrypoint-initdb.d/ docker-entrypoint.sh" ]
18423
18524# 7000: intra-node communication
18625# 7001: TLS intra-node communication
0 commit comments