Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3b3eb2792 | ||
|
|
f8492f5450 | ||
|
|
23b884767d | ||
|
|
ff0e8a0c7f |
@@ -1,18 +1,6 @@
|
||||
name: 'Build docker container'
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: "Select branch to build"
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- 9.0-alpine-24
|
||||
- 9.0-alpine-23
|
||||
- 9.0-alpine-22
|
||||
- 9.0-alpine-21
|
||||
- 8.0-alpine-22
|
||||
- 8.0-alpine-21
|
||||
release:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -22,83 +10,6 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Set build variables for docker build
|
||||
id: variables-test
|
||||
uses: https://git.claeyscloud.com/david/gitea-actions/conditional-variables@main
|
||||
with:
|
||||
context: |
|
||||
branch=${{ inputs.branch }}
|
||||
rules: |
|
||||
- conditions:
|
||||
- branch == 9.0-alpine-24
|
||||
- branch == 9.0-alpine-23
|
||||
set:
|
||||
DOTNET_SDK_VERSION=9.0
|
||||
DOTNET_RUNTIME_VERSION=9.0.18
|
||||
- conditions:
|
||||
- branch == 9.0-alpine-24
|
||||
set:
|
||||
ALPINE_VERSION=24
|
||||
- name: Dump contexts
|
||||
env:
|
||||
GITEA_CONTEXT: ${{ toJson(gitea) }}
|
||||
JOB_CONTEXT: ${{ toJson(job) }}
|
||||
RUNNER_CONTEXT: ${{ toJson(runner) }}
|
||||
STRATEGY_CONTEXT: ${{ toJson(strategy) }}
|
||||
MATRIX_CONTEXT: ${{ toJson(matrix) }}
|
||||
run: |
|
||||
echo "=== ENVIRONMENT VARIABLES ==="
|
||||
echo '${{ toJson(steps.variables-test.outputs) }}'
|
||||
# echo "$GITEA_CONTEXT"
|
||||
# echo "$JOB_CONTEXT"
|
||||
# echo "$RUNNER_CONTEXT"
|
||||
# echo "$STRATEGY_CONTEXT"
|
||||
# echo "$MATRIX_CONTEXT"
|
||||
- name: Set build variables for docker build
|
||||
id: variables
|
||||
run: |
|
||||
case "${{ inputs.branch }}" in
|
||||
9.0-alpine-24)
|
||||
echo "DOTNET_SDK_VERSION=9.0" >> $GITHUB_OUTPUT
|
||||
echo "DOTNET_RUNTIME_VERSION=9.0.18" >> $GITHUB_OUTPUT
|
||||
echo "ALPINE_VERSION=3.24" >> $GITHUB_OUTPUT
|
||||
echo "IS_LATEST=true" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
9.0-alpine-23)
|
||||
echo "DOTNET_SDK_VERSION=9.0" >> $GITHUB_OUTPUT
|
||||
echo "DOTNET_RUNTIME_VERSION=9.0.18" >> $GITHUB_OUTPUT
|
||||
echo "ALPINE_VERSION=3.23" >> $GITHUB_OUTPUT
|
||||
echo "IS_LATEST=false" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
9.0-alpine-22)
|
||||
echo "DOTNET_SDK_VERSION=9.0" >> $GITHUB_OUTPUT
|
||||
echo "DOTNET_RUNTIME_VERSION=9.0" >> $GITHUB_OUTPUT
|
||||
echo "ALPINE_VERSION=3.22" >> $GITHUB_OUTPUT
|
||||
echo "IS_LATEST=false" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
9.0-alpine-21)
|
||||
echo "DOTNET_SDK_VERSION=9.0" >> $GITHUB_OUTPUT
|
||||
echo "DOTNET_RUNTIME_VERSION=9.0" >> $GITHUB_OUTPUT
|
||||
echo "ALPINE_VERSION=3.21" >> $GITHUB_OUTPUT
|
||||
echo "IS_LATEST=false" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
8.0-alpine-22)
|
||||
echo "DOTNET_SDK_VERSION=8.0" >> $GITHUB_OUTPUT
|
||||
echo "DOTNET_RUNTIME_VERSION=8.0" >> $GITHUB_OUTPUT
|
||||
echo "ALPINE_VERSION=3.22" >> $GITHUB_OUTPUT
|
||||
echo "IS_LATEST=false" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
8.0-alpine-21)
|
||||
echo "DOTNET_SDK_VERSION=8.0" >> $GITHUB_OUTPUT
|
||||
echo "DOTNET_RUNTIME_VERSION=8.0" >> $GITHUB_OUTPUT
|
||||
echo "ALPINE_VERSION=3.21" >> $GITHUB_OUTPUT
|
||||
echo "IS_LATEST=false" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported branch"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
- name: Install Docker
|
||||
run: |
|
||||
echo "Checking docker installation"
|
||||
@@ -121,13 +32,13 @@ jobs:
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
labels: |
|
||||
org.opencontainers.image.documentation=https://git.claeyscloud.com/david/net-base/README.md
|
||||
org.opencontainers.image.documentation=https://git.claeyscloud.com/david/epg-info-docker/src/branch/main/README.md
|
||||
images: |
|
||||
git.claeyscloud.com/david/net-base
|
||||
tags: |
|
||||
type=raw,value=${{ inputs.branch }}
|
||||
type=raw,value=latest,enable=${{ steps.variables.outputs.IS_LATEST == 'true' }}
|
||||
type=semver,pattern={{raw}}
|
||||
type=sha
|
||||
type=semver,pattern={{version}}
|
||||
- name: Generate random password for certificate
|
||||
id: password
|
||||
run:
|
||||
@@ -135,11 +46,7 @@ jobs:
|
||||
- name: Build and push
|
||||
uses: https://github.com/docker/build-push-action@v5
|
||||
with:
|
||||
build-args: |
|
||||
CERT_PASSWORD=${{ steps.password.outputs.secret }}
|
||||
DOTNET_SDK_VERSION=${{ steps.variables.outputs.DOTNET_SDK_VERSION }}
|
||||
DOTNET_RUNTIME_VERSION=${{ steps.variables.outputs.DOTNET_RUNTIME_VERSION }}
|
||||
ALPINE_VERSION=${{ steps.variables.outputs.ALPINE_VERSION }}
|
||||
build-args: CERT_PASSWORD=${{ steps.password.outputs.secret }}
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
|
||||
+4
-4
@@ -1,9 +1,9 @@
|
||||
ARG CERT_PASSWORD
|
||||
ARG DOTNET_SDK_VERSION=10.0.100
|
||||
ARG DOTNET_RUNTIME_VERSION=10.0.0
|
||||
ARG DOTNET_SDK_VERSION=9.0.308
|
||||
ARG DOTNET_RUNTIME_VERSION=9.0.11
|
||||
ARG ALPINE_VERSION=3.22
|
||||
ARG CONFIG_DIRECTORY_ARG=/config
|
||||
FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_SDK_VERSION}-alpine${ALPINE_VERSION} AS build-env
|
||||
FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_SDK_VERSION}-alpine${ALPINE_VERSION}-amd64 AS build-env
|
||||
ARG CONFIG_DIRECTORY_ARG
|
||||
ENV CONFIG_DIRECTORY=$CONFIG_DIRECTORY_ARG
|
||||
ARG CERT_PASSWORD
|
||||
@@ -13,7 +13,7 @@ RUN mkdir $CONFIG_DIRECTORY \
|
||||
&& rm -rf /var/cache/apk/* \
|
||||
&& dotnet dev-certs https --export-path /config/aspnetapp.pem --password "$CERT_PASSWORD" --format PEM
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:${DOTNET_RUNTIME_VERSION}-alpine${ALPINE_VERSION}
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:${DOTNET_RUNTIME_VERSION}-alpine${ALPINE_VERSION}-amd64
|
||||
ARG CONFIG_DIRECTORY_ARG
|
||||
ENV CONFIG_DIRECTORY=$CONFIG_DIRECTORY_ARG
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||
|
||||
@@ -66,8 +66,8 @@ docker build --build-arg CERT_PASSWORD=supersecretpassword . -t net-base
|
||||
| Argument | Description | Default |
|
||||
|-----------------------------------------------------|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
|
||||
| CERT_PASSWORD | The password for the generated certificate | N/A **(required)** |
|
||||
| DOTNET_SDK_VERSION | The [SDK](https://mcr.microsoft.com/en-us/artifact/mar/dotnet/sdk/tags) version used to generate the development certificate | 10.0.100 |
|
||||
| DOTNET_RUNTIME_VERSION | The [runtime](https://mcr.microsoft.com/en-us/artifact/mar/dotnet/aspnet/tags) version used as a base | 10.0.0 |
|
||||
| DOTNET_SDK_VERSION | The [SDK](https://mcr.microsoft.com/en-us/artifact/mar/dotnet/sdk/tags) version used to generate the development certificate | 9.0.308 |
|
||||
| DOTNET_RUNTIME_VERSION | The [runtime](https://mcr.microsoft.com/en-us/artifact/mar/dotnet/aspnet/tags) version used as a base | 9.0.11 |
|
||||
| ALPINE_VERSION | The version of [alpine linux](https://www.alpinelinux.org/) used as a base| 3.22 |
|
||||
|
||||
## Security implications
|
||||
@@ -93,25 +93,8 @@ Depending on your use-case you event might consider to use docker networking in
|
||||
The included certificate is generated through the _dotnet dev-certs_ command. This is a very convenient and suitable way to generate development certificates through the dotnet SDK.
|
||||
|
||||
The password used to generate the certificate is randomly generated through the `openssl rand -base64 12` at build time.
|
||||
If you inspect the image layers you'll able to easily see it.
|
||||
I think this is fine for development purposes and just want to get things up and running, although this is not recommended for production use at all.
|
||||
You can generate your own password and certificates in the following way :
|
||||
|
||||
```sh
|
||||
# generate a random secure password
|
||||
openssl rand -base64 12
|
||||
# use the .net cli to generate your own certificates with your chosen password
|
||||
dotnet dev-certs https --export-path /config/aspnetapp.pem --password "YOUR PASSWORD" --format PEM
|
||||
```
|
||||
After this you only need to map your own certificates with the **ASPNETCORE_Kestrel__Certificates__** variables.
|
||||
|
||||
### Versioning
|
||||
|
||||
Recently Microsoft decided to update the base images to alpine 3.22.
|
||||
Before 2025-11-11 the latest supported version was alpine 3.21.
|
||||
In order to support these changes the naming scheme will need to be changed.
|
||||
Going forward specefic tags will be vailable for the different versions: by example `9.0.11-alpine-21` and `9.0.11-alpine-22`.
|
||||
By default alpine 22 will be used and the older versions will be supported as long Microsoft does.
|
||||
The build agent used for the build is hosted on my own infrastructure but I don't have any access to it (neither do I intend to do so).<br/>
|
||||
However if you feel uncomfortable with this fact, feel free to build the image yourself.
|
||||
|
||||
## FAQ
|
||||
|
||||
|
||||
Reference in New Issue
Block a user