Skip to content

Commit f8137ac

Browse files
committed
Updated the Dockerfile to change some of the behavior and reduce the final image size to 1.46GB from 1.86GB.
I also tried to keep the download_verify_and_extract() function readable given it now downloads the TARs, extracts them and useful symlinks in place. I moved the HASH strings to SHA512 to match the apache.org artifacts found along side the binaries. Switched to alpine after discussion on the issue.
1 parent b32e9d7 commit f8137ac

File tree

1 file changed

+35
-25
lines changed

1 file changed

+35
-25
lines changed

Dockerfile

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,18 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
FROM openjdk:8
16+
FROM openjdk:8-alpine3.9
1717

1818
EXPOSE 42424
1919

20-
WORKDIR /opt/accumulo-proxy
21-
2220
ARG HADOOP_VERSION=3.2.1
2321
ARG ZOOKEEPER_VERSION=3.5.7
2422
ARG ACCUMULO_VERSION=2.0.0
2523
ARG ACCUMULO_PROXY_VERSION=2.0.0-SNAPSHOT
2624

27-
ARG HADOOP_HASH=a57962a24d178193349917730bf95cdc99bde9df
28-
ARG ZOOKEEPER_HASH=619928c8553b62775119e3d7d143a4714a160365
29-
ARG ACCUMULO_HASH=b72bf5c3dcaa25387933a032925046234f30e17a
25+
ARG HADOOP_SHA512_HASH=d62709c3d7144fcaafc60e18d0fa03d7d477cc813e45526f3646030cd87dbf010aeccf3f4ce795b57b08d2884b3a55f91fe9d74ac144992d2dfe444a4bbf34ee
26+
ARG ZOOKEEPER_SHA512_HASH=b9baa1ecb3d4dc0ef648ce7c74da4c5267ee89534c7614b8f27d3b0bc52004dcfbb8cecec810ffb7c8c45053daf8a5e849ce60ba241280fa1e2ab1d3b4990494
27+
ARG ACCUMULO_SHA512_HASH=1e2b822e0fd6ba5293b09203eb0c5cc230e9f111361634b4d5665b0ddd2b28f42d76699cb08aaeff9b3242efd5fe369bfc871a7dc361e935980889bcb7b4568f
3028

3129
# Download from Apache mirrors instead of archive #9
3230
ENV APACHE_DIST_URLS \
@@ -36,43 +34,55 @@ ENV APACHE_DIST_URLS \
3634
https://www.apache.org/dist/ \
3735
https://archive.apache.org/dist/
3836

37+
ENV HADOOP_HOME /opt/hadoop
38+
ENV ZOOKEEPER_HOME /opt/apache-zookeeper
39+
ENV ACCUMULO_HOME /opt/accumulo
40+
3941
RUN set -eux; \
40-
download_bin() { \
41-
local f="$1"; shift; \
42-
local hash="$1"; shift; \
43-
local distFile="$1"; shift; \
42+
download_verify_and_extract() { \
43+
local expectedHash="$1"; \
44+
local distFile="$2"; \
45+
local extractPath="$3"; \
46+
local symlinkPath="$4"; \
4447
local success=; \
4548
local distUrl=; \
4649
for distUrl in ${APACHE_DIST_URLS}; do \
47-
if wget -nv -O "/tmp/${f}" "${distUrl}${distFile}"; then \
48-
success=1; \
50+
if wget -nv -O "/tmp/download.tar.gz" "${distUrl}${distFile}"; then \
4951
# Checksum the download
50-
echo "${hash}" "/tmp/${f}" | sha1sum -c -; \
52+
echo "${expectedHash} /tmp/download.tar.gz" | sha512sum -c -; \
53+
# Extract the download
54+
mkdir "${extractPath}"; \
55+
tar xzf "/tmp/download.tar.gz" -C "${extractPath}" --strip 1;\
56+
# Symlink
57+
ln -s "${extractPath}" "${symlinkPath}"; \
58+
# Tidy up the download
59+
rm -f "/tmp/download.tar.gz"; \
60+
# Set success now we've done all our checks and tidied up
61+
success=1; \
5162
break; \
5263
fi; \
5364
done; \
5465
[ -n "${success}" ]; \
5566
};\
5667
\
57-
download_bin "apache-zookeeper.tar.gz" "${ZOOKEEPER_HASH}" "zookeeper/zookeeper-${ZOOKEEPER_VERSION}/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz"; \
58-
download_bin "hadoop.tar.gz" "$HADOOP_HASH" "hadoop/core/hadoop-${HADOOP_VERSION}/hadoop-$HADOOP_VERSION.tar.gz"; \
59-
download_bin "accumulo.tar.gz" "${ACCUMULO_HASH}" "accumulo/${ACCUMULO_VERSION}/accumulo-${ACCUMULO_VERSION}-bin.tar.gz";
68+
download_verify_and_extract "${ZOOKEEPER_SHA512_HASH}" "zookeeper/zookeeper-${ZOOKEEPER_VERSION}/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz" "/opt/apache-zookeeper-${ZOOKEEPER_VERSION}" "${ZOOKEEPER_HOME}"; \
69+
download_verify_and_extract "${HADOOP_SHA512_HASH}" "hadoop/core/hadoop-${HADOOP_VERSION}/hadoop-$HADOOP_VERSION.tar.gz" "/opt/hadoop-${HADOOP_VERSION}" "${HADOOP_HOME}"; \
70+
download_verify_and_extract "${ACCUMULO_SHA512_HASH}" "accumulo/${ACCUMULO_VERSION}/accumulo-${ACCUMULO_VERSION}-bin.tar.gz" "/opt/accumulo-${ACCUMULO_VERSION}" "${ACCUMULO_HOME}" ;
6071

61-
# Install the dependencies into /opt/
62-
RUN tar xzf /tmp/hadoop.tar.gz -C /opt/ && ln -s /opt/hadoop-${HADOOP_VERSION} /opt/hadoop
63-
RUN tar xzf /tmp/apache-zookeeper.tar.gz -C /opt/ && ln -s /opt/apache-zookeeper-${ZOOKEEPER_VERSION}-bin /opt/apache-zookeeper
64-
RUN tar xzf /tmp/accumulo.tar.gz -C /opt/ && ln -s /opt/accumulo-${ACCUMULO_VERSION} /opt/accumulo && sed -i 's/\${ZOOKEEPER_HOME}\/\*/\${ZOOKEEPER_HOME}\/\*\:\${ZOOKEEPER_HOME}\/lib\/\*/g' /opt/accumulo/conf/accumulo-env.sh
72+
# Fix the ZooKeeper classpath for Accumulo
73+
RUN sed -i 's/\${ZOOKEEPER_HOME}\/\*/\${ZOOKEEPER_HOME}\/\*\:\${ZOOKEEPER_HOME}\/lib\/\*/g' /opt/accumulo/conf/accumulo-env.sh
6574

66-
ENV HADOOP_HOME /opt/hadoop
67-
ENV ZOOKEEPER_HOME /opt/apache-zookeeper
68-
ENV ACCUMULO_HOME /opt/accumulo
75+
# Add bash as a dependency for accumulo-proxy and accumulo shell scripts
76+
RUN apk --no-cache add bash
6977

7078
# Add the proxy binary
71-
COPY target/accumulo-proxy-${ACCUMULO_PROXY_VERSION}-bin.tar.gz /tmp/
72-
RUN tar xzf /tmp/accumulo-proxy-${ACCUMULO_PROXY_VERSION}-bin.tar.gz -C /opt/accumulo-proxy --strip 1
7379
ENV ACCUMULO_PROXY_HOME /opt/accumulo-proxy
80+
ADD target/accumulo-proxy-${ACCUMULO_PROXY_VERSION}-bin.tar.gz /opt/
81+
RUN ln -s "/opt/accumulo-proxy-${ACCUMULO_PROXY_VERSION}/" "${ACCUMULO_PROXY_HOME}"
7482

7583
# Ensure Accumulo is on the path.
7684
ENV PATH "${PATH}:${ACCUMULO_HOME}/bin"
7785

86+
WORKDIR ${ACCUMULO_PROXY_HOME}
87+
7888
CMD ["/opt/accumulo-proxy/bin/accumulo-proxy", "-p", "/opt/accumulo-proxy/conf/proxy.properties"]

0 commit comments

Comments
 (0)