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:

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