Skip to content

Commit a0a6abd

Browse files
AMBARI-26544: Setting up docker images for Ambari for easy installation and testing
1 parent 1b20453 commit a0a6abd

File tree

8 files changed

+2719
-0
lines changed

8 files changed

+2719
-0
lines changed

docker/Dockerfile.base

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
# Apache Ambari Base Image
2+
# Multi-stage build for optimized production image
3+
4+
ARG UBUNTU_VERSION=22.04
5+
FROM ubuntu:${UBUNTU_VERSION} as base
6+
7+
# Metadata
8+
LABEL maintainer="Apache Ambari Community <dev@ambari.apache.org>"
9+
LABEL org.apache.ambari.version="3.0.0-SNAPSHOT"
10+
LABEL org.apache.ambari.component="base"
11+
LABEL org.opencontainers.image.source="https://github.com/apache/ambari"
12+
LABEL org.opencontainers.image.description="Apache Ambari Base Runtime Image"
13+
LABEL org.opencontainers.image.licenses="Apache-2.0"
14+
15+
# Build arguments
16+
ARG JAVA_VERSION=11
17+
ARG MAVEN_VERSION=3.9.6
18+
ARG NODE_VERSION=18
19+
ARG PYTHON_VERSION=3.10
20+
21+
# Environment variables
22+
ENV DEBIAN_FRONTEND=noninteractive
23+
ENV TZ=UTC
24+
ENV LANG=C.UTF-8
25+
ENV LC_ALL=C.UTF-8
26+
27+
# Create ambari user and group
28+
RUN groupadd -r ambari --gid=1000 && \
29+
useradd -r -g ambari --uid=1000 --home-dir=/opt/ambari --shell=/bin/bash ambari && \
30+
mkdir -p /opt/ambari && \
31+
chown -R ambari:ambari /opt/ambari
32+
33+
# Install system dependencies
34+
RUN apt-get update && \
35+
apt-get install -y --no-install-recommends \
36+
# Basic utilities
37+
curl \
38+
wget \
39+
unzip \
40+
zip \
41+
tar \
42+
gzip \
43+
ca-certificates \
44+
gnupg \
45+
lsb-release \
46+
# Network tools
47+
net-tools \
48+
netcat \
49+
telnet \
50+
openssh-client \
51+
# System tools
52+
sudo \
53+
vim \
54+
less \
55+
htop \
56+
procps \
57+
psmisc \
58+
# Build tools (for native dependencies)
59+
build-essential \
60+
gcc \
61+
g++ \
62+
make \
63+
# Python and pip
64+
python3 \
65+
python3-pip \
66+
python3-dev \
67+
python3-setuptools \
68+
python3-wheel \
69+
# Git for source management
70+
git \
71+
# Database clients
72+
postgresql-client \
73+
mysql-client \
74+
# SSL/TLS support
75+
openssl \
76+
# Time synchronization
77+
ntp \
78+
ntpdate \
79+
# Process management
80+
supervisor && \
81+
# Clean up
82+
apt-get clean && \
83+
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
84+
85+
# Install OpenJDK
86+
RUN apt-get update && \
87+
apt-get install -y --no-install-recommends openjdk-${JAVA_VERSION}-jdk && \
88+
apt-get clean && \
89+
rm -rf /var/lib/apt/lists/*
90+
91+
# Set JAVA_HOME
92+
ENV JAVA_HOME=/usr/lib/jvm/java-${JAVA_VERSION}-openjdk-amd64
93+
ENV PATH=${JAVA_HOME}/bin:${PATH}
94+
95+
# Install Maven
96+
RUN wget -q https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz -O /tmp/maven.tar.gz && \
97+
tar -xzf /tmp/maven.tar.gz -C /opt && \
98+
ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven && \
99+
rm /tmp/maven.tar.gz
100+
101+
ENV MAVEN_HOME=/opt/maven
102+
ENV PATH=${MAVEN_HOME}/bin:${PATH}
103+
104+
# Install Node.js and npm
105+
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - && \
106+
apt-get install -y nodejs && \
107+
npm install -g npm@latest && \
108+
npm install -g brunch@latest && \
109+
apt-get clean && \
110+
rm -rf /var/lib/apt/lists/*
111+
112+
# Install Python packages
113+
RUN pip3 install --no-cache-dir \
114+
setuptools \
115+
wheel \
116+
requests \
117+
pyyaml \
118+
jinja2 \
119+
psutil \
120+
six
121+
122+
# Create directory structure
123+
RUN mkdir -p \
124+
/var/log/ambari-server \
125+
/var/log/ambari-agent \
126+
/var/log/ambari-metrics-collector \
127+
/var/log/ambari-metrics-monitor \
128+
/var/run/ambari-server \
129+
/var/run/ambari-agent \
130+
/var/run/ambari-metrics-collector \
131+
/var/run/ambari-metrics-monitor \
132+
/var/lib/ambari-server \
133+
/var/lib/ambari-agent \
134+
/var/lib/ambari-metrics-collector \
135+
/etc/ambari-server/conf \
136+
/etc/ambari-agent/conf \
137+
/etc/ambari-metrics-collector/conf \
138+
/etc/ambari-metrics-monitor/conf && \
139+
chown -R ambari:ambari \
140+
/var/log/ambari-* \
141+
/var/run/ambari-* \
142+
/var/lib/ambari-* \
143+
/etc/ambari-*
144+
145+
# Configure sudo for ambari user
146+
RUN echo "ambari ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ambari && \
147+
chmod 0440 /etc/sudoers.d/ambari
148+
149+
# SSH configuration for multi-node setups
150+
RUN mkdir -p /home/ambari/.ssh && \
151+
ssh-keygen -t rsa -N '' -f /home/ambari/.ssh/id_rsa && \
152+
cat /home/ambari/.ssh/id_rsa.pub >> /home/ambari/.ssh/authorized_keys && \
153+
chmod 600 /home/ambari/.ssh/authorized_keys && \
154+
chmod 700 /home/ambari/.ssh && \
155+
chown -R ambari:ambari /home/ambari/.ssh
156+
157+
# Configure SSH daemon
158+
RUN mkdir -p /var/run/sshd && \
159+
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
160+
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
161+
sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
162+
163+
# Set up Maven repository cache
164+
RUN mkdir -p /home/ambari/.m2 && \
165+
chown -R ambari:ambari /home/ambari/.m2
166+
167+
# Health check script
168+
COPY docker/scripts/health-check.sh /usr/local/bin/health-check.sh
169+
RUN chmod +x /usr/local/bin/health-check.sh
170+
171+
# Entrypoint script
172+
COPY docker/scripts/entrypoint.sh /usr/local/bin/entrypoint.sh
173+
RUN chmod +x /usr/local/bin/entrypoint.sh
174+
175+
# Set working directory
176+
WORKDIR /opt/ambari
177+
178+
# Switch to ambari user
179+
USER ambari
180+
181+
# Default command
182+
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
183+
CMD ["bash"]
184+
185+
# Build stage for development
186+
FROM base as build
187+
188+
# Switch back to root for build tools
189+
USER root
190+
191+
# Install additional build dependencies
192+
RUN apt-get update && \
193+
apt-get install -y --no-install-recommends \
194+
# Additional build tools
195+
cmake \
196+
autoconf \
197+
automake \
198+
libtool \
199+
pkg-config \
200+
# Development headers
201+
libssl-dev \
202+
libffi-dev \
203+
libxml2-dev \
204+
libxslt1-dev \
205+
zlib1g-dev \
206+
# RPM building tools
207+
rpm \
208+
rpmbuild \
209+
# Debugging tools
210+
gdb \
211+
strace \
212+
tcpdump && \
213+
apt-get clean && \
214+
rm -rf /var/lib/apt/lists/*
215+
216+
# Install additional Python development packages
217+
RUN pip3 install --no-cache-dir \
218+
pytest \
219+
mock \
220+
coverage \
221+
flake8 \
222+
pylint
223+
224+
# Pre-download Maven dependencies for faster builds
225+
COPY pom.xml /tmp/pom.xml
226+
RUN cd /tmp && \
227+
mvn dependency:go-offline -B -q && \
228+
rm -rf /tmp/*
229+
230+
# Switch back to ambari user
231+
USER ambari
232+
233+
# Runtime stage for production
234+
FROM base as runtime
235+
236+
# Copy only necessary files from build stage
237+
# This keeps the runtime image smaller
238+
239+
# Health check
240+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
241+
CMD /usr/local/bin/health-check.sh
242+
243+
# Expose common ports
244+
EXPOSE 8080 8441 8440 6188 61888
245+
246+
# Default volumes
247+
VOLUME ["/var/log/ambari-server", "/var/log/ambari-agent", "/var/log/ambari-metrics-collector"]
248+
VOLUME ["/var/lib/ambari-server", "/var/lib/ambari-agent", "/var/lib/ambari-metrics-collector"]
249+
VOLUME ["/etc/ambari-server/conf", "/etc/ambari-agent/conf", "/etc/ambari-metrics-collector/conf"]

0 commit comments

Comments
 (0)