@@ -174,13 +174,57 @@ RUN /opt/rbenv/plugins/ruby-build/install.sh \
174174# Configure gem mirror
175175RUN echo "---\n :sources:\n - https://gems.ruby-china.com/" > /home/coder/.gemrc
176176
177- # Layer 8: Directory structure and config files
177+ # Layer 8: Database and Middleware Clients
178+
179+ # PostgreSQL client (official PostgreSQL apt repository)
180+ RUN mkdir -p /etc/apt/keyrings \
181+ && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/keyrings/postgresql-keyring.gpg \
182+ && chmod 644 /etc/apt/keyrings/postgresql-keyring.gpg \
183+ && echo "deb [signed-by=/etc/apt/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.list \
184+ && apt-get update \
185+ && apt-get install -y --no-install-recommends postgresql-client-17 \
186+ && rm -rf /var/lib/apt/lists/*
187+
188+ # Docker CLI (official Docker apt repository, client only)
189+ RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
190+ && chmod 644 /etc/apt/keyrings/docker.gpg \
191+ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list \
192+ && apt-get update \
193+ && apt-get install -y --no-install-recommends docker-ce-cli docker-buildx-plugin docker-compose-plugin \
194+ && rm -rf /var/lib/apt/lists/*
195+
196+ # MySQL and Redis clients (Debian standard packages)
197+ RUN apt-get update && apt-get install -y --no-install-recommends \
198+ default-mysql-client \
199+ redis-tools \
200+ && rm -rf /var/lib/apt/lists/*
201+
202+ # Kafka CLI tools
203+ ENV KAFKA_VERSION=3.9.0
204+ ENV KAFKA_SCALA_VERSION=2.13
205+ ENV KAFKA_HOME=/opt/kafka
206+
207+ RUN curl -fsSL "https://archive.apache.org/dist/kafka/${KAFKA_VERSION}/kafka_${KAFKA_SCALA_VERSION}-${KAFKA_VERSION}.tgz" -o /tmp/kafka.tgz \
208+ && mkdir -p ${KAFKA_HOME} \
209+ && tar -xzf /tmp/kafka.tgz -C ${KAFKA_HOME} --strip-components=1 \
210+ && rm -f /tmp/kafka.tgz \
211+ && chmod +x ${KAFKA_HOME}/bin/*
212+
213+ # Create symlinks for frequently used Kafka tools
214+ RUN ln -s ${KAFKA_HOME}/bin/kafka-topics.sh /usr/local/bin/kafka-topics \
215+ && ln -s ${KAFKA_HOME}/bin/kafka-console-consumer.sh /usr/local/bin/kafka-console-consumer \
216+ && ln -s ${KAFKA_HOME}/bin/kafka-console-producer.sh /usr/local/bin/kafka-console-producer \
217+ && ln -s ${KAFKA_HOME}/bin/kafka-consumer-groups.sh /usr/local/bin/kafka-consumer-groups \
218+ && ln -s ${KAFKA_HOME}/bin/kafka-configs.sh /usr/local/bin/kafka-configs \
219+ && ln -s ${KAFKA_HOME}/bin/kafka-acls.sh /usr/local/bin/kafka-acls
220+
221+ # Layer 9: Directory structure and config files
178222# Create system-wide PATH config (not affected by volume mounts on /home/coder)
179223# This ensures tools are accessible in all shell types (login/non-login, interactive/non-interactive)
180224RUN echo '#!/bin/sh\n \
181225# Development tools PATH configuration\n \
182226# Note: Symlinks in /usr/local/bin provide fallback, this is additional coverage\n \
183- export PATH=/opt/go-tools/bin:/opt/rbenv/bin:/opt/rbenv/shims:/usr/local/go/bin:/home/coder/go/bin:/opt/temurin-21-jdk/bin:/opt/conda/bin:$PATH' > /etc/profile.d/dev-tools.sh \
227+ export PATH=/opt/kafka/bin:/opt/ go-tools/bin:/opt/rbenv/bin:/opt/rbenv/shims:/usr/local/go/bin:/home/coder/go/bin:/opt/temurin-21-jdk/bin:/opt/conda/bin:$PATH' > /etc/profile.d/dev-tools.sh \
184228 && chmod +x /etc/profile.d/dev-tools.sh
185229
186230# Create config templates directory (for volume mount compatibility)
@@ -190,7 +234,7 @@ RUN mkdir -p /opt/dev-configs
190234# bashrc append content template
191235RUN echo '\n \
192236# Restore Docker ENV PATH (VS Code terminal resets PATH)\n \
193- export PATH=/opt/go-tools/bin:/opt/rbenv/bin:/opt/rbenv/shims:/opt/temurin-21-jdk/bin:/opt/conda/bin:/usr/local/go/bin:/home/coder/go/bin:$PATH\n \
237+ export PATH=/opt/kafka/bin:/opt/ go-tools/bin:/opt/rbenv/bin:/opt/rbenv/shims:/opt/temurin-21-jdk/bin:/opt/conda/bin:/usr/local/go/bin:/home/coder/go/bin:$PATH\n \
194238\n \
195239# User-installed gem executables path\n \
196240export RUBY_GEM_ABI=${RUBY_GEM_ABI:-4.0.0}\n \
0 commit comments