Docker 安装编程环境
本章将介绍如何使用 Docker 快速搭建 Python、Node.js、Rust 和 Java 编程环境。
Python 环境
快速运行
bash
# 运行 Python 交互式环境
docker run -it --rm python:3.12 python
# 运行 Python 脚本
docker run -it --rm -v $(pwd):/app -w /app python:3.12 python script.py搭建开发环境
bash
docker run -it \
--name python-dev \
-v $(pwd):/app \
-w /app \
-p 8000:8000 \
python:3.12 /bin/bash在容器内:
bash
pip install flask
python -c "import flask; print(flask.__version__)"Dockerfile 示例
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 镜像
| 镜像 | 大小 | 说明 |
|---|---|---|
| python:3.12 | ~1 GB | 完整版,包含编译工具 |
| python:3.12-slim | ~150 MB | 精简版,适合大多数场景 |
| python:3.12-alpine | ~50 MB | 最小版,可能缺少某些依赖 |
Node.js 环境
快速运行
bash
# 运行 Node.js 交互式环境
docker run -it --rm node:20 node
# 运行脚本
docker run -it --rm -v $(pwd):/app -w /app node:20 node index.js搭建开发环境
bash
docker run -it \
--name node-dev \
-v $(pwd):/app \
-w /app \
-p 3000:3000 \
node:20 /bin/bash在容器内:
bash
npm init -y
npm install express
node -e "console.log('Node.js ' + process.version)"Dockerfile 示例
dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]常用 Node.js 镜像
| 镜像 | 大小 | 说明 |
|---|---|---|
| node:20 | ~1 GB | 完整版 |
| node:20-slim | ~200 MB | 精简版 |
| node:20-alpine | ~130 MB | Alpine 版,最小 |
Rust 环境
快速运行
bash
# 运行 Rust 交互式环境
docker run -it --rm rust:latest /bin/bash
# 编译并运行 Rust 程序
docker run -it --rm -v $(pwd):/app -w /app rust:latest bash -c "rustc main.rs && ./main"搭建开发环境
bash
docker run -it \
--name rust-dev \
-v $(pwd):/app \
-w /app \
rust:latest /bin/bash在容器内:
bash
# 创建新项目
cargo new hello-world
cd hello-world
cargo runDockerfile 示例(多阶段构建)
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"]Rust 多阶段构建效果显著:
| 阶段 | 大小 |
|---|---|
| 构建镜像(含 Rust 工具链) | ~1.5 GB |
| 运行镜像(仅二进制文件) | ~80 MB |
Java 环境
快速运行
bash
# 运行 Java 交互式环境
docker run -it --rm eclipse-temurin:21 /bin/bash
# 编译并运行 Java 程序
docker run -it --rm -v $(pwd):/app -w /app eclipse-temurin:21 bash -c "javac Main.java && java Main"搭建开发环境
bash
docker run -it \
--name java-dev \
-v $(pwd):/app \
-w /app \
-p 8080:8080 \
eclipse-temurin:21 /bin/bash使用 Maven 构建
bash
docker run -it --rm \
-v $(pwd):/app \
-v maven-repo:/root/.m2 \
-w /app \
maven:3.9-eclipse-temurin-21 mvn packageDockerfile 示例(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 镜像
| 镜像 | 说明 |
|---|---|
| eclipse-temurin:21 | 完整 JDK |
| eclipse-temurin:21-jre | 仅 JRE(运行环境) |
| eclipse-temurin:21-jre-alpine | Alpine 版 JRE,最小 |
| maven:3.9-eclipse-temurin-21 | 包含 Maven 的 JDK |
通用技巧
使用数据卷缓存依赖
bash
# 缓存 npm 依赖
docker run -v npm-cache:/root/.npm -v $(pwd):/app -w /app node:20 npm install
# 缓存 Maven 依赖
docker run -v maven-repo:/root/.m2 -v $(pwd):/app -w /app maven:3.9 mvn package
# 缓存 pip 依赖
docker run -v pip-cache:/root/.cache/pip -v $(pwd):/app -w /app python:3.12 pip install -r requirements.txt使用 Docker Compose 管理开发环境
yaml
# docker-compose.yml
services:
app:
image: node:20
working_dir: /app
volumes:
- .:/app
- node_modules:/app/node_modules
ports:
- "3000:3000"
command: npm run dev
volumes:
node_modules:本章小结
Docker 让搭建编程环境变得简单快捷,无需在宿主机上安装各种语言运行时和工具链。通过多阶段构建,可以将最终镜像体积控制在很小的范围内。