Skip to content

Commit 9e822b1

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

22 files changed

+5582
-0
lines changed

docker/Dockerfile.agent

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
# Multi-stage Dockerfile for Apache Ambari Agent
2+
# Based on best practices from Apache Pinot and other Apache projects
3+
4+
# Build stage
5+
FROM ubuntu:22.04 AS builder
6+
7+
# Build arguments
8+
ARG MAVEN_VERSION=3.9.6
9+
ARG JAVA_VERSION=11
10+
11+
# Set environment variables
12+
ENV DEBIAN_FRONTEND=noninteractive
13+
ENV JAVA_HOME=/usr/lib/jvm/java-${JAVA_VERSION}-openjdk-amd64
14+
ENV MAVEN_HOME=/opt/maven
15+
ENV PATH=$PATH:$MAVEN_HOME/bin
16+
17+
# Install build dependencies
18+
RUN apt-get update && apt-get install -y \
19+
openjdk-${JAVA_VERSION}-jdk \
20+
maven \
21+
curl \
22+
wget \
23+
git \
24+
build-essential \
25+
python3 \
26+
python3-pip \
27+
python3-dev \
28+
rpm \
29+
alien \
30+
&& rm -rf /var/lib/apt/lists/*
31+
32+
# Set working directory
33+
WORKDIR /workspace
34+
35+
# Copy source code
36+
COPY . .
37+
38+
# Build Ambari Agent
39+
RUN mvn clean install -pl ambari-agent -DskipTests -Drat.skip=true \
40+
&& mvn clean package rpm:rpm -pl ambari-agent -DskipTests
41+
42+
# Runtime stage
43+
FROM ubuntu:22.04 AS runtime
44+
45+
# Runtime arguments
46+
ARG JAVA_VERSION=11
47+
48+
# Set environment variables
49+
ENV DEBIAN_FRONTEND=noninteractive
50+
ENV JAVA_HOME=/usr/lib/jvm/java-${JAVA_VERSION}-openjdk-amd64
51+
ENV AMBARI_AGENT_HOME=/opt/ambari-agent
52+
ENV PATH=$PATH:$AMBARI_AGENT_HOME/bin
53+
54+
# Create ambari user
55+
RUN groupadd -r ambari && useradd -r -g ambari -d /home/ambari -s /bin/bash ambari \
56+
&& mkdir -p /home/ambari \
57+
&& chown -R ambari:ambari /home/ambari
58+
59+
# Install runtime dependencies
60+
RUN apt-get update && apt-get install -y \
61+
openjdk-${JAVA_VERSION}-jre-headless \
62+
python3 \
63+
python3-pip \
64+
curl \
65+
wget \
66+
netcat \
67+
procps \
68+
net-tools \
69+
sudo \
70+
openssh-server \
71+
rsync \
72+
psmisc \
73+
&& rm -rf /var/lib/apt/lists/*
74+
75+
# Install Python dependencies
76+
RUN pip3 install requests psutil pyyaml
77+
78+
# Copy built artifacts from builder stage
79+
COPY --from=builder /workspace/ambari-agent/target/rpm/ambari-agent/RPMS/x86_64/*.rpm /tmp/
80+
81+
# Convert and install RPM packages
82+
RUN cd /tmp && \
83+
for rpm in *.rpm; do \
84+
alien -d --scripts "$rpm"; \
85+
done && \
86+
dpkg -i *.deb && \
87+
rm -f /tmp/*.rpm /tmp/*.deb
88+
89+
# Create necessary directories
90+
RUN mkdir -p /var/lib/ambari-agent \
91+
/var/log/ambari-agent \
92+
/etc/ambari-agent/conf \
93+
/opt/ambari-agent \
94+
&& chown -R ambari:ambari /var/lib/ambari-agent \
95+
/var/log/ambari-agent \
96+
/etc/ambari-agent \
97+
/opt/ambari-agent
98+
99+
# Copy configuration files and scripts
100+
COPY docker/config/agent/ /etc/ambari-agent/conf/
101+
COPY docker/scripts/ /usr/local/bin/
102+
103+
# Make scripts executable
104+
RUN chmod +x /usr/local/bin/*.sh
105+
106+
# Create startup script
107+
RUN cat > /usr/local/bin/start-ambari-agent.sh << 'EOF'
108+
#!/bin/bash
109+
set -e
110+
111+
# Wait for Ambari Server
112+
echo "Waiting for Ambari Server at ${AMBARI_SERVER_HOST:-ambari-server}:${AMBARI_SERVER_PORT:-8080}..."
113+
while ! nc -z ${AMBARI_SERVER_HOST:-ambari-server} ${AMBARI_SERVER_PORT:-8080}; do
114+
echo "Ambari Server not ready, waiting..."
115+
sleep 10
116+
done
117+
echo "Ambari Server is ready!"
118+
119+
# Configure agent
120+
echo "Configuring Ambari Agent..."
121+
cat > /etc/ambari-agent/conf/ambari-agent.ini << EOL
122+
[server]
123+
hostname=${AMBARI_SERVER_HOST:-ambari-server}
124+
url_port=${AMBARI_SERVER_PORT:-8080}
125+
secured_url_port=8441
126+
127+
[agent]
128+
prefix=/var/lib/ambari-agent/data
129+
cache_dir=/var/lib/ambari-agent/cache
130+
log_dir=/var/log/ambari-agent
131+
pidfile=/var/run/ambari-agent/ambari-agent.pid
132+
hostname_script=/var/lib/ambari-agent/hostname.sh
133+
134+
[security]
135+
keysdir=/var/lib/ambari-agent/keys
136+
server_crt=ca.crt
137+
passphrase_env_var_name=AMBARI_PASSPHRASE
138+
139+
[heartbeat]
140+
state_interval=6
141+
dirs=/etc/hadoop,/etc/hadoop/conf,/etc/hbase,/etc/hcatalog,/etc/hive,/etc/oozie,/etc/sqoop,/var/run/hadoop,/var/run/zookeeper,/var/run/hbase,/var/run/hive,/var/run/oozie,/var/log/hadoop,/var/log/zookeeper,/var/log/hbase,/var/log/hive,/var/log/oozie
142+
rpms=hadoop,zookeeper,hbase,hive
143+
EOL
144+
145+
# Create hostname script
146+
cat > /var/lib/ambari-agent/hostname.sh << 'EOL'
147+
#!/bin/bash
148+
echo $(hostname -f)
149+
EOL
150+
chmod +x /var/lib/ambari-agent/hostname.sh
151+
152+
# Start SSH daemon
153+
sudo service ssh start
154+
155+
# Start Ambari Agent
156+
echo "Starting Ambari Agent..."
157+
exec ambari-agent start --debug=${AMBARI_DEBUG:-false}
158+
EOF
159+
160+
RUN chmod +x /usr/local/bin/start-ambari-agent.sh
161+
162+
# Configure SSH
163+
RUN mkdir -p /var/run/sshd && \
164+
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
165+
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
166+
167+
# Configure sudo for ambari user
168+
RUN echo "ambari ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
169+
170+
# Switch to ambari user
171+
USER ambari
172+
173+
# Expose SSH port
174+
EXPOSE 22 5006
175+
176+
# Health check
177+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
178+
CMD /usr/local/bin/health-check.sh agent
179+
180+
# Set working directory
181+
WORKDIR /home/ambari
182+
183+
# Default command
184+
CMD ["/usr/local/bin/start-ambari-agent.sh"]
185+
186+
# Development stage
187+
FROM runtime AS development
188+
189+
# Switch back to root for development tools
190+
USER root
191+
192+
# Install development dependencies
193+
RUN apt-get update && apt-get install -y \
194+
maven \
195+
git \
196+
vim \
197+
less \
198+
htop \
199+
strace \
200+
tcpdump \
201+
&& rm -rf /var/lib/apt/lists/*
202+
203+
# Create Maven cache directory
204+
RUN mkdir -p /home/ambari/.m2 && \
205+
chown -R ambari:ambari /home/ambari/.m2
206+
207+
# Switch back to ambari user
208+
USER ambari
209+
210+
# Mount point for source code
211+
VOLUME ["/workspace"]
212+
213+
# Default command for development
214+
CMD ["bash"]

0 commit comments

Comments
 (0)