1+ FROM adoptopenjdk/openjdk8:jdk8u282-b08-debian
2+
3+ ARG version=4.8.0
4+ ARG tz=Asia/Shanghai
5+ ENV ROCKETMQ_VERSION=${version} \
6+ DEBIAN_FRONTEND=noninteractive \
7+ TZ=${tz}
8+
9+ RUN set -ex; \
10+ if ! command -v gpg > /dev/null; then \
11+ apt-get update; \
12+ apt-get install -y --no-install-recommends \
13+ gnupg \
14+ dirmngr \
15+ ; \
16+ rm -rf /var/lib/apt/lists/*; \
17+ fi
18+
19+ # grab gosu for easy step-down from root
20+ # https://github.com/tianon/gosu/releases
21+ ENV GOSU_VERSION 1.12
22+ RUN set -eux; \
23+ savedAptMark="$(apt-mark showmanual)" ; \
24+ apt-get update; \
25+ apt-get install -y --no-install-recommends ca-certificates wget; \
26+ rm -rf /var/lib/apt/lists/*; \
27+ dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" ; \
28+ wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" ; \
29+ wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" ; \
30+ export GNUPGHOME="$(mktemp -d)" ; \
31+ gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
32+ gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
33+ gpgconf --kill all; \
34+ rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
35+ apt-mark auto '.*' > /dev/null; \
36+ [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
37+ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
38+ chmod +x /usr/local/bin/gosu; \
39+ gosu --version; \
40+ gosu nobody true
41+
42+
43+ ENV ROCKETMQ_HOME=/opt/rocketmq
44+ ENV PATH=$ROCKETMQ_HOME/bin:$PATH
45+
46+ RUN set -eux; \
47+ savedAptMark="$(apt-mark showmanual)" ; \
48+ apt-get update; \
49+ apt-get install -y --no-install-recommends ca-certificates wget p7zip-full; \
50+ rm -rf /var/lib/apt/lists/*; \
51+ \
52+ ROCKETMQ_SOURCE_URL="https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip" ; \
53+ ROCKETMQ_PATH="/usr/local/src/rocketmq-$ROCKETMQ_VERSION" ; \
54+ \
55+ wget --progress dot:giga --output-document "$ROCKETMQ_PATH.zip.asc" "$ROCKETMQ_SOURCE_URL.asc" ; \
56+ wget --progress dot:giga --output-document "$ROCKETMQ_PATH.zip" "$ROCKETMQ_SOURCE_URL" ; \
57+ wget --progress dot:giga https://www.apache.org/dist/rocketmq/KEYS; \
58+ \
59+ export GNUPGHOME="$(mktemp -d)" ; \
60+ gpg --import KEYS; \
61+ # gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$ROCKETMQ_PGP_KEY_ID"; \
62+ gpg --batch --verify "$ROCKETMQ_PATH.zip.asc" "$ROCKETMQ_PATH.zip" ; \
63+ gpgconf --kill all; \
64+ rm -rf "$GNUPGHOME" ; \
65+ \
66+ mkdir -p "$ROCKETMQ_HOME" ; \
67+ 7z x $ROCKETMQ_PATH.zip; \
68+ mv rocketmq-all*/* $ROCKETMQ_HOME; \
69+ rmdir rocketmq-all* ; \
70+ apt-mark auto '.*' > /dev/null; \
71+ [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
72+ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
73+ rm -rf KEYS
74+
75+
76+ # make the "en_US.UTF-8" locale so rocketmq will be utf-8 enabled by default
77+ RUN set -eux; \
78+ if [ -f /etc/dpkg/dpkg.cfg.d/docker ]; then \
79+ # if this file exists, we're likely in "debian:xxx-slim", and locales are thus being excluded so we need to remove that exclusion (since we need locales)
80+ grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; \
81+ sed -ri '/\/ usr\/ share\/ locale/d' /etc/dpkg/dpkg.cfg.d/docker; \
82+ ! grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; \
83+ fi; \
84+ apt-get update; apt-get install -y --no-install-recommends locales; rm -rf /var/lib/apt/lists/*; \
85+ localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
86+ ENV LANG en_US.utf8
87+
88+
89+ RUN set -eux; \
90+ apt-get update; \
91+ apt-get install -y --no-install-recommends \
92+ # install "nss_wrapper" in case we need to fake "/etc/passwd" and "/etc/group" (especially for OpenShift)
93+ # https://github.com/docker-library/postgres/issues/359
94+ # https://cwrap.org/nss_wrapper.html
95+ libnss-wrapper \
96+ xz-utils \
97+ psmisc procps iproute2 net-tools libfreetype6 fontconfig fonts-dejavu \
98+ ; \
99+ rm -rf /var/lib/apt/lists/*
100+
101+ EXPOSE 9876 10909 10911 10912
102+
103+ # Debian uses Bash as the default interactive shell.
104+ # https://wiki.debian.org/Shell
105+ RUN rm -rf /bin/sh && ln -s /bin/bash /bin/sh
106+
107+
108+
109+ COPY docker-entrypoint.sh /usr/local/bin/
110+ RUN ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh
111+
112+
113+
114+ STOPSIGNAL SIGINT
115+
116+
117+ # explicitly set user/group IDs
118+ RUN set -eux; \
119+ groupadd -r rocketmq --gid=3000; \
120+ useradd -r -g rocketmq --uid=3000 --shell=/bin/bash rocketmq; \
121+ mkdir -p /home/rocketmq/logs; \
122+ mkdir -p /home/rocketmq/store; \
123+ chown -R rocketmq:rocketmq ${ROCKETMQ_HOME}; \
124+ chown -R rocketmq:rocketmq /home/rocketmq
125+
126+ RUN \
127+ sed -i '/-server -Xms/d' ${ROCKETMQ_HOME}/bin/runserver.sh; \
128+ sed -i "s@\$ JAVA \$ {JAVA_OPT}@exec \$ JAVA \$ {JAVA_OPT}@g" ${ROCKETMQ_HOME}/bin/runserver.sh; \
129+ sed -i '/-server -Xms/d;/-XX:MaxDirectMemorySize=/d' ${ROCKETMQ_HOME}/bin/runbroker.sh; \
130+ sed -i '/^numactl --interleave/,$d' ${ROCKETMQ_HOME}/bin/runbroker.sh; \
131+ sed -i '$aexec \$ JAVA \$ {JAVA_OPT} \$ @' ${ROCKETMQ_HOME}/bin/runbroker.sh; \
132+ sed -i "s@sh \$ {ROCKETMQ_HOME}@exec \$ {ROCKETMQ_HOME}@g" ${ROCKETMQ_HOME}/bin/mqbroker; \
133+ sed -i "s@sh \$ {ROCKETMQ_HOME}@exec \$ {ROCKETMQ_HOME}@g" ${ROCKETMQ_HOME}/bin/mqnamesrv;
134+
135+
136+ WORKDIR ${ROCKETMQ_HOME}/bin
137+ ENTRYPOINT ["/docker-entrypoint.sh" ]
0 commit comments