Language-Specific Frameworks
This outline explores using Docker Compose with specific language frameworks.
Node.js
Example: tree/master/examples/nodejs
Dockerfile:
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
docker-compose.yml:
version: '3.7'
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- ./:/app
environment:
NODE_ENV: development
Python
Examples:
- Flask: tree/master/examples/flask
- Django: tree/master/examples/django
Dockerfile (Flask):
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["flask", "run", "--host=0.0.0.0"]
docker-compose.yml (Flask):
version: '3.7'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- ./:/app
Java
Example: tree/master/examples/spring-boot
Dockerfile:
FROM openjdk:11-jre-slim
WORKDIR /app
COPY target/*.jar app.jar
CMD ["java", "-jar", "app.jar"]
docker-compose.yml:
version: '3.7'
services:
web:
build: .
ports:
- "8080:8080"
volumes:
- ./:/app
Go
Example: tree/master/examples/go
Dockerfile:
FROM golang:1.16-alpine
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o main .
CMD ["./main"]
docker-compose.yml:
version: '3.7'
services:
web:
build: .
ports:
- "8080:8080"
volumes:
- ./:/app
Rust
Example: tree/master/examples/rust
Dockerfile:
FROM rust:1.58-alpine
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
RUN cargo install cargo-watch
COPY src ./src
RUN cargo build --release
CMD ["cargo", "run", "--release"]
docker-compose.yml:
version: '3.7'
services:
web:
build: .
ports:
- "8080:8080"
volumes:
- ./:/app