Jesús Estévez
Just another simple developer
Please puts your hands up if some times your code was working fine in Dev but not in Production
Introduction
Quick overview
Basic:
DockerFile
Docker build -> docker images
Docker run -> container
Docker-compose
Advanced:
Docker Swarm
Setup
Scalability
Resources
Deploy
For other Month
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
RUN dotnet restore "HeatMeterWebApi/HeatMeterWebApi.csproj"
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
RUN dotnet restore "HeatMeterWebApi/HeatMeterWebApi.csproj"
COPY . .
WORKDIR /src/HeatMeterWebApi
RUN dotnet build "HeatMeterWebApi.csproj" -c Release -o /app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
RUN dotnet restore "HeatMeterWebApi/HeatMeterWebApi.csproj"
COPY . .
WORKDIR /src/HeatMeterWebApi
RUN dotnet build "HeatMeterWebApi.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "HeatMeterWebApi.csproj" -c Release -o /app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
RUN dotnet restore "HeatMeterWebApi/HeatMeterWebApi.csproj"
COPY . .
WORKDIR /src/HeatMeterWebApi
RUN dotnet build "HeatMeterWebApi.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "HeatMeterWebApi.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
RUN dotnet restore "HeatMeterWebApi/HeatMeterWebApi.csproj"
COPY . .
WORKDIR /src/HeatMeterWebApi
RUN dotnet build "HeatMeterWebApi.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "HeatMeterWebApi.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HeatMeterWebApi.dll"]
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["HeatMeterWebApi/HeatMeterWebApi.csproj", "HeatMeterWebApi/"]
RUN dotnet restore "HeatMeterWebApi/HeatMeterWebApi.csproj"
COPY . .
WORKDIR /src/HeatMeterWebApi
RUN dotnet build "HeatMeterWebApi.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "HeatMeterWebApi.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HeatMeterWebApi.dll"]
version: '3.5'
version: '3.5'
services:
heatmeterwebapi:
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: heatmeterwebapi:latest
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
version: '3.5'
services:
heatmeterwebapi:
image: kamstrupmalaga/heatmeterwebapi:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44000:80"
deploy:
replicas: 3
version: '3.5'
services:
heatmeterwebapi:
image: kamstrupmalaga/heatmeterwebapi:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44000:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
version: '3.5'
services:
heatmeterwebapi:
image: kamstrupmalaga/heatmeterwebapi:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44000:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
resources:
limits:
cpus: '0.50'
memory: 500M
version: '3.5'
services:
heatmeterwebapi:
image: kamstrupmalaga/heatmeterwebapi:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44000:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
resources:
limits:
cpus: '0.50'
memory: 500M
reservations:
cpus: '0.25'
memory: 20M
Defining a simple Test Case
Variables
HTTP Default values
Using Variable and default HTTP values
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
healthcheck:
test: curl --fail -s http://localhost:44318/api/values || exit 1
interval: 1m30s
timeout: 10s
retries: 3
Health
check
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
jmeter:
container_name: jmeter
image: vmarrazzo/jmeter
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
jmeter:
container_name: jmeter
image: vmarrazzo/jmeter
volumes:
- .:/mnt/jmeter
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
jmeter:
container_name: jmeter
image: vmarrazzo/jmeter
volumes:
- .:/mnt/jmeter
entrypoint: jmeter -n -t /mnt/jmeter/Jmeter/TestPlan.jmx
-j /mnt/jmeter/Jmeter/TestPlan.log -l /mnt/jmeter/Jmeter/TestPlan.jtl
-JSERVERNAME=heatmeterwebapi -JPORTNUMBER=80
version: '3.5'
services:
heatmeterwebapi:
container_name: heatmeterwebapi
image: kamstrupmalaga/heatmeterwebapi:latest
build:
context: HeatMeterWebApi/
dockerfile: Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "44318:80"
jmeter:
container_name: jmeter
image: vmarrazzo/jmeter
volumes:
- .:/mnt/jmeter
entrypoint: jmeter -n -t /mnt/jmeter/Jmeter/TestPlan.jmx
-j /mnt/jmeter/Jmeter/TestPlan.log -l /mnt/jmeter/Jmeter/TestPlan.jtl
-JSERVERNAME=heatmeterwebapi -JPORTNUMBER=80
depends_on:
- heatmeterwebapi
By Jesús Estévez