Docker Install Programming Environments
This chapter covers how to quickly set up Python, Node.js, Rust, and Java development environments using Docker.
Python
Quick Run
bash
docker run -it --rm python:3.12 python
docker run -it --rm -v $(pwd):/app -w /app python:3.12 python script.pyDevelopment Environment
bash
docker run -it --name python-dev -v $(pwd):/app -w /app -p 8000:8000 python:3.12 /bin/bashDockerfile Example
dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]Python Image Variants
| Image | Size | Notes |
|---|---|---|
| python:3.12 | ~1 GB | Full, includes build tools |
| python:3.12-slim | ~150 MB | Slim, suitable for most cases |
| python:3.12-alpine | ~50 MB | Smallest, may lack some dependencies |
Node.js
Quick Run
bash
docker run -it --rm node:20 node
docker run -it --rm -v $(pwd):/app -w /app node:20 node index.jsDevelopment Environment
bash
docker run -it --name node-dev -v $(pwd):/app -w /app -p 3000:3000 node:20 /bin/bashDockerfile Example
dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]Rust
Quick Run
bash
docker run -it --rm rust:latest /bin/bash
docker run -it --rm -v $(pwd):/app -w /app rust:latest bash -c "rustc main.rs && ./main"Dockerfile Example (Multi-Stage)
dockerfile
FROM rust:1.77 AS builder
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
COPY src ./src
RUN cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y libssl3 ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/myapp /usr/local/bin/myapp
CMD ["myapp"]Multi-stage build impact:
| Stage | Size |
|---|---|
| Build image (with Rust toolchain) | ~1.5 GB |
| Runtime image (binary only) | ~80 MB |
Java
Quick Run
bash
docker run -it --rm eclipse-temurin:21 /bin/bash
docker run -it --rm -v $(pwd):/app -w /app eclipse-temurin:21 bash -c "javac Main.java && java Main"Dockerfile Example (Spring Boot)
dockerfile
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
FROM eclipse-temurin:21-jre-alpine
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]Java Image Variants
| Image | Notes |
|---|---|
| eclipse-temurin:21 | Full JDK |
| eclipse-temurin:21-jre | JRE only (runtime) |
| eclipse-temurin:21-jre-alpine | Alpine JRE, smallest |
| maven:3.9-eclipse-temurin-21 | JDK with Maven |
Tips: Cache Dependencies with Volumes
bash
docker run -v npm-cache:/root/.npm -v $(pwd):/app -w /app node:20 npm install
docker run -v maven-repo:/root/.m2 -v $(pwd):/app -w /app maven:3.9 mvn package
docker run -v pip-cache:/root/.cache/pip -v $(pwd):/app -w /app python:3.12 pip install -r requirements.txtChapter Summary
Docker makes setting up programming environments simple and fast. Multi-stage builds keep final images small. Use named volumes to cache dependencies across builds.