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