Add Docker support for FoodsharingSiegen project

Introduced Docker setup, including `docker-compose.yml`, `dockerfile.server`, and related Python helper scripts (`image-create.py`, `image-push.py`, `publish-project.py`, `publish-aio.py`) for building, managing, and deploying Docker images. Updated `.gitignore` to exclude published files, and renamed a field label in the Blazor component for better clarity.
This commit is contained in:
Andre Beging
2025-03-28 16:29:43 +01:00
parent 3d92833199
commit 859b0c3712
8 changed files with 206 additions and 2 deletions

63
Docker/image-create.py Normal file
View File

@@ -0,0 +1,63 @@
#!/usr/bin/env python3
import subprocess
from datetime import datetime
def image_exists_on_server(full_image_tag):
"""
Check if a Docker image exists on the remote server.
Uses 'docker manifest inspect' which returns 0 if the image is found.
Debug output is printed for inspection.
"""
try:
subprocess.run(
["docker", "manifest", "inspect", full_image_tag],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
check=True
)
print(f"[DEBUG] Found image on server: {full_image_tag}")
return True
except subprocess.CalledProcessError as e:
print(f"[DEBUG] Image not found on server: {full_image_tag}. Error: {e.stderr.strip()}")
return False
def get_date_tag(base_tag, today):
"""
Given the base image tag (e.g. 'ghcr.io/troogs/fs-onboarding/server')
and today's date, find the first available tag in the format YYYYMMDD-i
that is not already present on the remote server.
"""
i = 1
while True:
date_tag = f"{today}-{i}"
full_tag = f"{base_tag}:{date_tag}"
print(f"[DEBUG] Checking tag {date_tag}: {full_tag}")
if not image_exists_on_server(full_tag):
print(f"[DEBUG] Tag {date_tag} is available for use.")
return date_tag
else:
print(f"[DEBUG] Tag {date_tag} is already in use. Incrementing index.")
i += 1
def main():
# Get today's date in YYYYMMDD format.
today = datetime.now().strftime("%Y%m%d")
print(f"Using date tag base: {today}")
base_image_tag = "ghcr.io/troogs/fs-onboarding/server"
date_tag = get_date_tag(base_image_tag, today)
print(f"Common date tag determined: {date_tag}")
# Build command using the common date tag for the server image.
command = (
f"docker build -f dockerfile.server "
f"-t {base_image_tag}:latest "
f"-t {base_image_tag}:{date_tag} ..\\"
)
print(f"Executing: {command}")
subprocess.run(command, shell=True, check=True)
if __name__ == "__main__":
main()