Section 4 of 6

Docker Containers

🎯 What You'll Learn

  • What is Docker
  • Creating Dockerfile
  • Building images
  • Running containers
  • Docker Compose

What is Docker?

Docker packages applications and dependencies into containers that run consistently across different environments.

Dockerfile

Dockerfile Dockerfile
# Build stage
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["InvenTrack.csproj", "./"]
RUN dotnet restore "InvenTrack.csproj"
COPY . .
RUN dotnet build "InvenTrack.csproj" -c Release -o /app/build

# Publish stage
FROM build AS publish
RUN dotnet publish "InvenTrack.csproj" -c Release -o /app/publish

# Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "InvenTrack.dll"]

.dockerignore

.dockerignore Text
bin/
obj/
out/
.vs/
.vscode/
*.user
*.suo

Build and Run

Build Image Bash
docker build -t inventtrack:latest .
Run Container Bash
docker run -d -p 8080:80 --name inventtrack inventtrack:latest
View Logs Bash
docker logs inventtrack -f

Docker Compose

Run multiple containers together.

docker-compose.yml YAML
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ConnectionStrings__DefaultConnection=Server=db;Database=InvenTrack;User=sa;Password=YourPassword123!
    depends_on:
      - db

  db:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=YourPassword123!
    ports:
      - "1433:1433"
    volumes:
      - sqldata:/var/opt/mssql

volumes:
  sqldata:
Run with Docker Compose Bash
# Start services
docker-compose up -d

# View logs
docker-compose logs -f

# Stop services
docker-compose down

Useful Docker Commands

Docker Commands Bash
# List running containers
docker ps

# List all containers
docker ps -a

# Stop container
docker stop inventtrack

# Remove container
docker rm inventtrack

# List images
docker images

# Remove image
docker rmi inventtrack:latest

# Execute command in container
docker exec -it inventtrack bash

Key Takeaways

  • Docker: Containerize applications
  • Dockerfile: Multi-stage build (SDK → publish → runtime)
  • docker build: Create image
  • docker run: Start container
  • Docker Compose: Multi-container applications
  • Volumes: Persist data