Skip to content

Commit 237d275

Browse files
committed
Merge branch 'main' of https://github.com/stackabletech/docker-images into feat/move-patch-apply-logic-to-patchable
2 parents eb83aba + fe6b07a commit 237d275

File tree

9 files changed

+457
-321
lines changed

9 files changed

+457
-321
lines changed

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,23 @@ All notable changes to this project will be documented in this file.
66

77
### Added
88

9+
- airflow: check for correct permissions and ownerships in /stackable folder via
10+
`check-permissions-ownership.sh` provided in stackable-base image ([#1054]).
11+
- hadoop: check for correct permissions and ownerships in /stackable folder via
12+
`check-permissions-ownership.sh` provided in stackable-base image ([#1029]).
13+
- hbase: check for correct permissions and ownerships in /stackable folder via
14+
`check-permissions-ownership.sh` provided in stackable-base image ([#1028]).
15+
- druid: check for correct permissions and ownerships in /stackable folder via
16+
`check-permissions-ownership.sh` provided in stackable-base image ([#1039]).
917
- spark-connect-client: A new image for Spark connect tests and demos ([#1034])
1018
- nifi: check for correct permissions and ownerships in /stackable folder via
1119
`check-permissions-ownership.sh` provided in stackable-base image ([#1027]).
20+
- opa: check for correct permissions and ownerships in /stackable folder via
21+
`check-permissions-ownership.sh` provided in stackable-base image ([#1038]).
22+
- superset: check for correct permissions and ownerships in /stackable folder via
23+
`check-permissions-ownership.sh` provided in stackable-base image ([#1053]).
24+
- trino: check for correct permissions and ownerships in /stackable folder via
25+
`check-permissions-ownership.sh` provided in stackable-base image ([#1025]).
1226

1327
### Changed
1428

@@ -17,15 +31,27 @@ All notable changes to this project will be documented in this file.
1731

1832
### Fixed
1933

34+
- hadoop: reduce docker image size by removing the recursive chown/chmods in the final image ([#1029]).
35+
- hbase: reduce docker image size by removing the recursive chown/chmods in the final image ([#1028]).
36+
- druid: reduce docker image size by removing the recursive chown/chmods in the final image ([#1039]).
2037
- nifi: reduce docker image size by removing the recursive chown/chmods in the final image ([#1027]).
38+
- opa: reduce docker image size by removing the recursive chown/chmods in the final image ([#1038]).
2139
- spark-k8s: reduce docker image size by removing the recursive chown/chmods in the final image ([#1042]).
40+
- trino: reduce docker image size by removing the recursive chown/chmods in the final image ([#1025]).
2241
- Add `--locked` flag to `cargo install` commands for reproducible builds ([#1044]).
2342

43+
[#1025]: https://github.com/stackabletech/docker-images/pull/1025
2444
[#1027]: https://github.com/stackabletech/docker-images/pull/1027
45+
[#1028]: https://github.com/stackabletech/docker-images/pull/1028
46+
[#1029]: https://github.com/stackabletech/docker-images/pull/1029
2547
[#1034]: https://github.com/stackabletech/docker-images/pull/1034
48+
[#1038]: https://github.com/stackabletech/docker-images/pull/1038
49+
[#1039]: https://github.com/stackabletech/docker-images/pull/1039
2650
[#1042]: https://github.com/stackabletech/docker-images/pull/1042
2751
[#1044]: https://github.com/stackabletech/docker-images/pull/1044
2852
[#1050]: https://github.com/stackabletech/docker-images/pull/1050
53+
[#1053]: https://github.com/stackabletech/docker-images/pull/1053
54+
[#1054]: https://github.com/stackabletech/docker-images/pull/1054
2955

3056
## [25.3.0] - 2025-03-21
3157

airflow/Dockerfile

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ ARG PRODUCT
2828
ARG STATSD_EXPORTER
2929
ARG PYTHON
3030
ARG TARGETARCH
31+
ARG STACKABLE_USER_UID
3132

3233
COPY airflow/constraints-${PRODUCT}-python${PYTHON}.txt /tmp/constraints.txt
3334
COPY --from=opa-auth-manager-builder /tmp/opa-auth-manager/dist/opa_auth_manager-0.1.0-py3-none-any.whl /tmp/
@@ -85,9 +86,17 @@ else
8586
end)' /tmp/sbom.json > /stackable/app/airflow-${PRODUCT}.cdx.json
8687
EOF
8788

88-
WORKDIR /stackable
8989
COPY --from=statsd_exporter-builder /statsd_exporter/statsd_exporter /stackable/statsd_exporter
9090
COPY --from=statsd_exporter-builder /statsd_exporter/statsd_exporter-${STATSD_EXPORTER}.cdx.json /stackable/statsd_exporter-${STATSD_EXPORTER}.cdx.json
91+
COPY --from=gitsync-image --chown=${STACKABLE_USER_UID}:0 /git-sync /stackable/git-sync
92+
93+
RUN <<EOF
94+
mkdir -pv /stackable/airflow
95+
mkdir -pv /stackable/airflow/dags
96+
mkdir -pv /stackable/airflow/logs
97+
chmod --recursive g=u /stackable
98+
EOF
99+
91100

92101
FROM stackable/image/vector AS airflow-main-image
93102

@@ -99,22 +108,26 @@ ARG TARGETARCH
99108
ARG STACKABLE_USER_UID
100109

101110
LABEL name="Apache Airflow" \
102-
maintainer="[email protected]" \
103-
vendor="Stackable GmbH" \
104-
version="${PRODUCT}" \
105-
release="${RELEASE}" \
106-
summary="The Stackable image for Apache Airflow." \
107-
description="This image is deployed by the Stackable Operator for Apache Airflow."
108-
109-
COPY airflow/licenses /licenses
110-
COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/entrypoint.sh /entrypoint.sh
111-
COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/run-airflow.sh /run-airflow.sh
111+
maintainer="[email protected]" \
112+
vendor="Stackable GmbH" \
113+
version="${PRODUCT}" \
114+
release="${RELEASE}" \
115+
summary="The Stackable image for Apache Airflow." \
116+
description="This image is deployed by the Stackable Operator for Apache Airflow."
112117

113118
ENV HOME=/stackable
114119
ENV AIRFLOW_USER_HOME_DIR=/stackable
115120
ENV PATH=$PATH:/bin:$HOME/app/bin
116121
ENV AIRFLOW_HOME=$HOME/airflow
117122

123+
COPY --from=airflow-build-image --chown=${STACKABLE_USER_UID}:0 /stackable/ ${HOME}/
124+
COPY --from=airflow-build-image --chown=${STACKABLE_USER_UID}:0 /stackable/git-sync ${HOME}/git-sync
125+
126+
COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/entrypoint.sh /entrypoint.sh
127+
COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/run-airflow.sh /run-airflow.sh
128+
129+
COPY airflow/licenses /licenses
130+
118131
# Update image and install needed packages
119132
RUN <<EOF
120133
microdnf update
@@ -142,33 +155,33 @@ rm -rf /var/cache/yum
142155
# Get the correct `tini` binary for our architecture.
143156
# It is used as an init alternative in the entrypoint
144157
curl -o /usr/bin/tini "https://repo.stackable.tech/repository/packages/tini/tini-${TINI}-${TARGETARCH}"
158+
159+
# fix missing permissions
145160
chmod a+x /entrypoint.sh
146161
chmod a+x /run-airflow.sh
147162
chmod +x /usr/bin/tini
163+
EOF
148164

149-
mkdir -pv ${AIRFLOW_HOME}
150-
mkdir -pv ${AIRFLOW_HOME}/dags
151-
mkdir -pv ${AIRFLOW_HOME}/logs
165+
# ----------------------------------------
166+
# Checks
167+
# This section is to run final checks to ensure the created final images
168+
# adhere to several minimal requirements like:
169+
# - check file permissions and ownerships
170+
# ----------------------------------------
152171

153-
# All files and folders owned by root to support running as arbitrary users
154-
# This is best practice as all container users will belong to the root group (0)
155-
chown -R ${STACKABLE_USER_UID}:0 /stackable
156-
chmod -R g=u /stackable
172+
# Check that permissions and ownership in ${HOME} are set correctly
173+
# This will fail and stop the build if any mismatches are found.
174+
RUN <<EOF
175+
/bin/check-permissions-ownership.sh ${HOME} ${STACKABLE_USER_UID} 0
157176
EOF
158177

159178
# ----------------------------------------
160-
# Attention: We are changing the group of all files in /stackable directly above
161-
# If you do any file based actions (copying / creating etc.) below this comment you
162-
# absolutely need to make sure that the correct permissions are applied!
163-
# chown ${STACKABLE_USER_UID}:0
179+
# Attention: Do not perform any file based actions (copying/creating etc.) below this comment because the permissions would not be checked.
164180
# ----------------------------------------
165181

166182
USER ${STACKABLE_USER_UID}
167183
WORKDIR /stackable
168184

169-
COPY --from=airflow-build-image --chown=${STACKABLE_USER_UID}:0 /stackable/ ${HOME}/
170-
COPY --from=gitsync-image --chown=${STACKABLE_USER_UID}:0 /git-sync /stackable/git-sync
171-
172185
ENTRYPOINT ["/usr/bin/tini", "--", "/run-airflow.sh"]
173186
CMD []
174187

druid/Dockerfile

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ microdnf update
2323
# This requirement is documented in docs/development/build.md and version 5.1 or later is required.
2424
# UBI 9 ships with 5.4.x so that should be fine
2525
#
26-
microdnf install \
27-
python-pyyaml
26+
microdnf install python-pyyaml
2827

2928
microdnf clean all
3029
rm -rf /var/cache/yum
@@ -44,10 +43,12 @@ COPY --chown=${STACKABLE_USER_UID}:0 druid/stackable/patches/${PRODUCT} /stackab
4443
# are still working in the cache directory.
4544

4645
RUN --mount=type=cache,id=maven-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository \
47-
--mount=type=cache,id=npm-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.npm \
48-
--mount=type=cache,id=cache-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.cache \
49-
<<EOF
46+
--mount=type=cache,id=npm-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.npm \
47+
--mount=type=cache,id=cache-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.cache \
48+
<<EOF
49+
curl "https://repo.stackable.tech/repository/packages/druid/apache-druid-${PRODUCT}-src.tar.gz" | tar -xzC .
5050
cd "$(/stackable/patchable --images-repo-root=src checkout druid ${PRODUCT})" && \
51+
5152
mvn --batch-mode --no-transfer-progress clean install -Pdist,stackable-bundle-contrib-exts -DskipTests -Dmaven.javadoc.skip=true
5253
mv distribution/target/apache-druid-${PRODUCT}-bin/apache-druid-${PRODUCT} /stackable/
5354
mv distribution/target/bom.json /stackable/apache-druid-${PRODUCT}/apache-druid-${PRODUCT}.cdx.json
@@ -68,6 +69,9 @@ fi
6869

6970
# Install OPA authorizer extension.
7071
curl "https://repo.stackable.tech/repository/packages/druid/druid-opa-authorizer-${AUTHORIZER}.tar.gz" | tar -xzC /stackable/apache-druid-${PRODUCT}/extensions
72+
73+
# change groups
74+
chmod -R g=u /stackable
7175
EOF
7276

7377
FROM stackable/image/java-base AS final
@@ -100,32 +104,45 @@ LABEL io.k8s.display-name="${NAME}"
100104

101105

102106
COPY --chown=${STACKABLE_USER_UID}:0 --from=druid-builder /stackable/apache-druid-${PRODUCT} /stackable/apache-druid-${PRODUCT}
107+
103108
COPY --chown=${STACKABLE_USER_UID}:0 druid/stackable/bin /stackable/bin
104109
COPY --chown=${STACKABLE_USER_UID}:0 druid/licenses /licenses
105110

106111
RUN <<EOF
107112
microdnf update
108113
microdnf clean all
109114
rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}\n" | sort > /stackable/package_manifest.txt
115+
chown ${STACKABLE_USER_UID}:0 /stackable/package_manifest.txt
116+
chmod g=u /stackable/package_manifest.txt
110117
rm -rf /var/cache/yum
111118

112-
ln -s /stackable/apache-druid-${PRODUCT} /stackable/druid
119+
ln -sf /stackable/apache-druid-${PRODUCT} /stackable/druid
120+
chown -h ${STACKABLE_USER_UID}:0 stackable/druid
113121

114122
# Force to overwrite the existing 'run-druid'
115123
ln -sf /stackable/bin/run-druid /stackable/druid/bin/run-druid
124+
chown -h ${STACKABLE_USER_UID}:0 /stackable/druid/bin/run-druid
116125

117-
# All files and folders owned by root group to support running as arbitrary users.
118-
# This is best practice as all container users will belong to the root group (0).
119-
chown -R ${STACKABLE_USER_UID}:0 /stackable
120-
chmod -R g=u /stackable
126+
# fix missing permissions
127+
chmod -R g=u /stackable/bin
128+
chmod g=u /stackable/apache-druid-${PRODUCT}
121129
EOF
122130

123131
# ----------------------------------------
124-
# Attention: We are changing the group of all files in /stackable directly above
125-
# If you do any file based actions (copying / creating etc.) below this comment you
126-
# absolutely need to make sure that the correct permissions are applied!
127-
# chown ${STACKABLE_USER_UID}:0
132+
# Checks
133+
# This section is to run final checks to ensure the created final images
134+
# adhere to several minimal requirements like:
135+
# - check file permissions and ownerships
136+
# ----------------------------------------
137+
138+
# Check that permissions and ownership in /stackable are set correctly
139+
# This will fail and stop the build if any mismatches are found.
140+
RUN <<EOF
141+
/bin/check-permissions-ownership.sh /stackable ${STACKABLE_USER_UID} 0
142+
EOF
143+
128144
# ----------------------------------------
145+
# Attention: Do not perform any file based actions (copying/creating etc.) below this comment because the permissions would not be checked.
129146

130147
USER ${STACKABLE_USER_UID}
131148
ENV PATH="${PATH}":/stackable/druid/bin

0 commit comments

Comments
 (0)