1717# permissions and limitations under the License.
1818#
1919# --------------------------------------------------------------------
20- FROM rockylinux/rockylinux:9
21-
22- ARG CODEBASE_VERSION_VAR=${CODEBASE_VERSION_VAR}
23- ARG TIMEZONE_VAR="America/Los_Angeles"
20+ # Multi-stage Dockerfile for Apache Cloudberry Sandbox Environment
21+ # --------------------------------------------------------------------
22+ # This Dockerfile uses pre-built Apache Cloudberry build images to
23+ # compile and install a specific release version of Cloudberry, then
24+ # creates a runtime environment for testing and development.
25+ # --------------------------------------------------------------------
2426
25- ENV container=docker
26- ENV MULTINODE=false
27+ # Build stage: Use pre-built image to compile Cloudberry
28+ FROM apache/incubator-cloudberry:cbdb-build-rocky9-latest as builder
2729
28- RUN dnf update -y && \
29- dnf install -y systemd \
30- systemd-libs && \
31- dnf clean all
30+ ARG CODEBASE_VERSION_VAR=${CODEBASE_VERSION_VAR}
3231
33- # Clean up unnecessary systemd units
34- RUN [ -d /lib/systemd/system/sysinit.target.wants ] && find /lib/systemd/system/sysinit.target.wants/ -type l -not -name 'systemd-tmpfiles-setup.service' -delete || echo "Directory /lib/systemd/system/sysinit.target.wants does not exist" && \
35- [ -d /lib/systemd/system/multi-user.target.wants ] && find /lib/systemd/system/multi-user.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/multi-user.target.wants does not exist" && \
36- find /etc/systemd/system/*.wants/ -type l -delete || echo "Directory /etc/systemd/system/*.wants does not exist" && \
37- [ -d /lib/systemd/system/local-fs.target.wants ] && find /lib/systemd/system/local-fs.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/local-fs.target.wants does not exist" && \
38- [ -d /lib/systemd/system/sockets.target.wants ] && find /lib/systemd/system/sockets.target.wants/ -type l -not -name '*udev*' -delete || echo "Directory /lib/systemd/system/sockets.target.wants does not exist" && \
39- [ -d /lib/systemd/system/basic.target.wants ] && find /lib/systemd/system/basic.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/basic.target.wants does not exist" && \
40- [ -d /lib/systemd/system/anaconda.target.wants ] && find /lib/systemd/system/anaconda.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/anaconda.target.wants does not exist"
32+ # Download and extract the specified release version
33+ RUN wget -O /tmp/cloudberry-${CODEBASE_VERSION_VAR}.zip https://github.com/apache/cloudberry/archive/refs/tags/${CODEBASE_VERSION_VAR}.zip && \
34+ cd /tmp/ && \
35+ unzip /tmp/cloudberry-${CODEBASE_VERSION_VAR}.zip && \
36+ mv /tmp/cloudberry-${CODEBASE_VERSION_VAR} /tmp/cloudberry && \
37+ rm -f /tmp/cloudberry-${CODEBASE_VERSION_VAR}.zip
4138
42- COPY ./configs/* /tmp/
39+ # Copy build scripts into the container
40+ COPY devops/build/automation/cloudberry/scripts /tmp/build-scripts
4341
44- RUN echo root:cbdb@123 | chpasswd && \
45- dnf makecache && \
46- dnf install -y yum-utils \
47- epel-release \
48- git && \
49- yum-config-manager --disable epel-cisco-openh264 && \
50- dnf makecache && \
51- yum-config-manager --disable epel && \
52- dnf install -y --enablerepo=epel \
53- the_silver_searcher \
54- bat \
55- htop && \
56- dnf install -y bison \
57- cmake3 \
58- ed \
59- flex \
60- gcc \
61- gcc-c++ \
62- glibc-langpack-en \
63- go \
64- initscripts \
65- iproute \
66- less \
67- m4 \
68- net-tools \
69- openssh-clients \
70- openssh-server \
71- passwd \
72- perl \
73- rsync \
74- sudo \
75- tar \
76- unzip \
77- util-linux-ng \
78- wget \
79- sshpass \
80- which && \
81- dnf install -y apr-devel \
82- bzip2-devel \
83- krb5-devel \
84- libcurl-devel \
85- libevent-devel \
86- libxml2-devel \
87- libzstd-devel \
88- openldap-devel \
89- openssl-devel \
90- pam-devel \
91- perl-ExtUtils-Embed \
92- perl-Test-Simple \
93- perl-core \
94- python3-devel \
95- readline-devel \
96- zlib-devel && \
97- dnf install -y --enablerepo=crb \
98- libuv-devel \
99- libyaml-devel \
100- perl-IPC-Run && \
101- dnf install -y --enablerepo=epel \
102- xerces-c-devel
42+ # Build Cloudberry using the official build scripts
43+ RUN cd /tmp/cloudberry && \
44+ export SRC_DIR=/tmp/cloudberry && \
45+ export BUILD_DESTINATION=/usr/local/cloudberry-db && \
46+ /tmp/build-scripts/configure-cloudberry.sh && \
47+ /tmp/build-scripts/build-cloudberry.sh
10348
104- RUN cp /tmp/90-cbdb-sysctl.conf /etc/sysctl.conf && \
105- cp /tmp/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf && \
106- cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \
107- echo "cdw" > /tmp/gpdb-hosts && \
108- echo "/usr/local/lib" >> /etc/ld.so.conf && \
109- echo "/usr/local/lib64" >> /etc/ld.so.conf && \
110- ldconfig && \
111- chmod 777 /tmp/gpinitsystem_singlenode && \
112- chmod 777 /tmp/init_system.sh && \
113- hostname > ~/orig_hostname && \
114- /usr/sbin/groupadd gpadmin && \
115- /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \
116- setcap cap_net_raw+ep /usr/bin/ping && \
117- echo "cbdb@123"|passwd --stdin gpadmin && \
118- echo "gpadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
119- echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
120- echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \
121- echo "source /usr/local/cloudberry-db/greenplum_path.sh" >> /home/gpadmin/.bashrc && \
122- mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \
123- chown -R gpadmin:gpadmin /data0 && \
124- ssh-keygen -A && \
125- echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
49+ # Runtime stage: Use the same base image for runtime environment
50+ FROM apache/incubator-cloudberry:cbdb-build-rocky9-latest
12651
127- RUN wget -O /tmp/cloudberry-${CODEBASE_VERSION_VAR}.zip https://github.com/apache/cloudberry/archive/refs/tags/${CODEBASE_VERSION_VAR}.zip && \
128- cd /tmp/ && \
129- unzip /tmp/cloudberry-${CODEBASE_VERSION_VAR}.zip && \
130- mv /tmp/cloudberry-${CODEBASE_VERSION_VAR} /tmp/cloudberry && \
131- rm -f /tmp/cloudberry-${CODEBASE_VERSION_VAR}.zip
52+ ARG CODEBASE_VERSION_VAR=${CODEBASE_VERSION_VAR}
13253
133- RUN cd /tmp/cloudberry && \
134- ./configure --prefix=/usr/local/cloudberry-db \
135- --enable-cassert \
136- --enable-debug-extensions \
137- --enable-ic-proxy \
138- --enable-mapreduce \
139- --enable-orafce \
140- --enable-orca \
141- --enable-pxf \
142- --enable-tap-tests \
143- --with-gssapi \
144- --with-ldap \
145- --with-libxml \
146- --with-openssl \
147- --with-pam \
148- --with-perl \
149- --with-pgport=5432 \
150- --with-python \
151- --with-pythonsrc-ext
54+ # Environment variables (only those not already set in base image)
55+ ENV MULTINODE=false
15256
153- RUN cd /tmp/cloudberry && \
154- make -j$(nproc) && \
155- make install
57+ # Copy built Cloudberry from builder stage
58+ COPY --from=builder /usr/local/cloudberry-db /usr/local/cloudberry-db
15659
157- RUN cd /tmp/cloudberry/contrib && \
158- make -j$(nproc) && \
159- make install
60+ # Runtime configuration (only what's needed beyond base image)
61+ RUN echo root:cbdb@123 | chpasswd && \
62+ cp ./configs/90-cbdb-sysctl.conf /etc/sysctl.conf && \
63+ echo "cdw" > /tmp/gpdb-hosts && \
64+ chmod 777 ./configs/gpinitsystem_singlenode && \
65+ chmod 777 ./configs/init_system.sh && \
66+ hostname > ~/orig_hostname && \
67+ echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \
68+ echo "source /usr/local/cloudberry-db/greenplum_path.sh" >> /home/gpadmin/.bashrc && \
69+ mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \
70+ chown -R gpadmin:gpadmin /data0
16071
16172# ----------------------------------------------------------------------
16273# Set the Default User and Command
@@ -167,10 +78,9 @@ RUN cd /tmp/cloudberry/contrib && \
16778# testing and functional verification.
16879# ----------------------------------------------------------------------
16980USER gpadmin
170- ENV USER=gpadmin
17181WORKDIR /home/gpadmin
17282
17383EXPOSE 5432 22
17484
17585VOLUME [ "/sys/fs/cgroup" ]
176- CMD ["bash","-c","/tmp /init_system.sh"]
86+ CMD ["bash","-c","./configs /init_system.sh"]
0 commit comments