From d58f874162dfaff2ed77c7646c7c1409cbf28be4 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 30 Oct 2023 16:39:11 +0100 Subject: [PATCH] Add docker support --- .dockerignore | 25 ++++++++++++++ .vscode/launch.json | 9 +++++ .vscode/tasks.json | 61 ++++++++++++++++++++++++++++++++++ GerbilManagerWebAPI/Dockerfile | 20 +++++++++++ GerbilManagerWebAPI/Program.cs | 5 ++- compose.yml | 21 ------------ docker-compose.debug.yml | 18 ++++++++++ docker-compose.yml | 41 +++++++++++++++++++++++ 8 files changed, 178 insertions(+), 22 deletions(-) create mode 100644 .dockerignore create mode 100644 GerbilManagerWebAPI/Dockerfile delete mode 100644 compose.yml create mode 100644 docker-compose.debug.yml create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3dbbcf3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/bin +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/.vscode/launch.json b/.vscode/launch.json index 4eab533..256dbc9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -28,6 +28,15 @@ "name": ".NET Core Attach", "type": "coreclr", "request": "attach" + }, + { + "name": "Docker .NET Launch", + "type": "docker", + "request": "launch", + "preLaunchTask": "docker-run: debug", + "netCore": { + "appProject": "${workspaceFolder}/GerbilManagerWebAPI/GerbilManagerWebAPI.csproj" + } } ] } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5008f35..e0133d3 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -36,6 +36,67 @@ "${workspaceFolder}/GerbilManager.sln" ], "problemMatcher": "$msCompile" + }, + { + "type": "docker-build", + "label": "docker-build: debug", + "dependsOn": [ + "build" + ], + "dockerBuild": { + "tag": "gerbilmanager:dev", + "target": "base", + "dockerfile": "${workspaceFolder}/GerbilManagerWebAPI/Dockerfile", + "context": "${workspaceFolder}", + "pull": true + }, + "netCore": { + "appProject": "${workspaceFolder}/GerbilManagerWebAPI/GerbilManagerWebAPI.csproj" + } + }, + { + "type": "docker-build", + "label": "docker-build: release", + "dependsOn": [ + "build" + ], + "dockerBuild": { + "tag": "gerbilmanager:latest", + "dockerfile": "${workspaceFolder}/GerbilManagerWebAPI/Dockerfile", + "context": "${workspaceFolder}", + "platform": { + "os": "linux", + "architecture": "amd64" + }, + "pull": true + }, + "netCore": { + "appProject": "${workspaceFolder}/GerbilManagerWebAPI/GerbilManagerWebAPI.csproj" + } + }, + { + "type": "docker-run", + "label": "docker-run: debug", + "dependsOn": [ + "docker-build: debug" + ], + "dockerRun": {}, + "netCore": { + "appProject": "${workspaceFolder}/GerbilManagerWebAPI/GerbilManagerWebAPI.csproj", + "enableDebugging": true, + "configureSsl": false + } + }, + { + "type": "docker-run", + "label": "docker-run: release", + "dependsOn": [ + "docker-build: release" + ], + "dockerRun": {}, + "netCore": { + "appProject": "${workspaceFolder}/GerbilManagerWebAPI/GerbilManagerWebAPI.csproj" + } } ] } \ No newline at end of file diff --git a/GerbilManagerWebAPI/Dockerfile b/GerbilManagerWebAPI/Dockerfile new file mode 100644 index 0000000..1268601 --- /dev/null +++ b/GerbilManagerWebAPI/Dockerfile @@ -0,0 +1,20 @@ +FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base +WORKDIR /app +EXPOSE 80 + +ENV ASPNETCORE_URLS=http://+:80 + +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:7.0 AS build +ARG configuration=Release +WORKDIR /src +COPY ["GerbilManagerWebAPI/GerbilManagerWebAPI.csproj", "GerbilManagerWebAPI/"] +RUN dotnet restore "GerbilManagerWebAPI/GerbilManagerWebAPI.csproj" +COPY . . +WORKDIR "/src/GerbilManagerWebAPI" +ARG configuration=Release +RUN dotnet publish "GerbilManagerWebAPI.csproj" -c $configuration -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=build /app/publish . +ENTRYPOINT ["dotnet", "GerbilManagerWebAPI.dll"] diff --git a/GerbilManagerWebAPI/Program.cs b/GerbilManagerWebAPI/Program.cs index b012fae..a5ecf8d 100644 --- a/GerbilManagerWebAPI/Program.cs +++ b/GerbilManagerWebAPI/Program.cs @@ -21,7 +21,10 @@ if (app.Environment.IsDevelopment()) app.UseSwaggerUI(); } -app.UseHttpsRedirection(); +if (app.Environment.IsDevelopment()) +{ + app.UseHttpsRedirection(); +} app.UseAuthorization(); diff --git a/compose.yml b/compose.yml deleted file mode 100644 index ddd5b66..0000000 --- a/compose.yml +++ /dev/null @@ -1,21 +0,0 @@ -services: -# frontend: - -# backend: -# image: - - database: - image: mcr.microsoft.com/mssql/server:2022-latest - environment: - - ACCEPT_EULA=Y - - MSSQL_SA_PASSWORD=StrongerThenYYou1 - - MSSQL_PID=Evaluation - ports: - - "1433:1433" - volumes: - - db-data:/var/opt/mssql - -volumes: - db-data: - - diff --git a/docker-compose.debug.yml b/docker-compose.debug.yml new file mode 100644 index 0000000..d2b09c1 --- /dev/null +++ b/docker-compose.debug.yml @@ -0,0 +1,18 @@ +# Please refer https://aka.ms/HTTPSinContainer on how to setup an https developer certificate for your ASP.NET Core service. + +version: '3.4' + +services: + gerbilmanagerwebapi: + image: gerbilmanagerwebapi + build: + context: . + dockerfile: GerbilManagerWebAPI/Dockerfile + args: + - configuration=Debug + ports: + - 80:80 + environment: + - ASPNETCORE_ENVIRONMENT=Development + volumes: + - ~/.vsdbg:/remote_debugger:rw diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8422a44 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,41 @@ +# Please refer https://aka.ms/HTTPSinContainer on how to setup an https developer certificate for your ASP.NET Core service. + +version: '3.4' + +services: + +# frontend: + + backend: + image: gerbilmanagerwebapi + build: + context: . + dockerfile: GerbilManagerWebAPI/Dockerfile + environment: + - ConnectionStrings:sqlConnection=server=database; database=GerbilManager; Integrated Security=true + ports: + - 80:80 + networks: + - net1 + depends_on: + - database + + database: + image: mcr.microsoft.com/mssql/server:2022-latest + environment: + - ACCEPT_EULA=Y + - MSSQL_SA_PASSWORD=StrongerThenYYou1 + - MSSQL_PID=Evaluation + ports: + - "1433:1433" + volumes: + - db-data:/var/opt/mssql + networks: + - net1 + +volumes: + db-data: + +networks: + net1: + name: network1 \ No newline at end of file