Skip to content

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.py

Development Environment

bash
docker run -it --name python-dev -v $(pwd):/app -w /app -p 8000:8000 python:3.12 /bin/bash

Dockerfile 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

ImageSizeNotes
python:3.12~1 GBFull, includes build tools
python:3.12-slim~150 MBSlim, suitable for most cases
python:3.12-alpine~50 MBSmallest, 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.js

Development Environment

bash
docker run -it --name node-dev -v $(pwd):/app -w /app -p 3000:3000 node:20 /bin/bash

Dockerfile 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:

StageSize
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

ImageNotes
eclipse-temurin:21Full JDK
eclipse-temurin:21-jreJRE only (runtime)
eclipse-temurin:21-jre-alpineAlpine JRE, smallest
maven:3.9-eclipse-temurin-21JDK 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.txt

Chapter 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.

Further Reading

Content is for learning and research only.