Aby uruchomić aplikację ASP.NET Core, wygenerowałem plik dockerfile, który buduje aplikację i kopiuje kod źródłowy w kontenerze, który jest pobierany przez Git przy użyciu Jenkinsa. Dlatego w moim obszarze roboczym wykonuję następujące czynności w pliku docker:
WORKDIR /app
COPY src src
Chociaż Jenkins poprawnie aktualizuje pliki na moim hoście za pomocą Git, Docker nie stosuje tego do mojego obrazu.
Mój podstawowy skrypt do budowania:
#!/bin/bash
imageName=xx:my-image
containerName=my-container
docker build -t $imageName -f Dockerfile .
containerRunning=$(docker inspect --format="{{ .State.Running }}" $containerName 2> /dev/null)
if [ "$containerRunning" == "true" ]; then
docker stop $containerName
docker start $containerName
else
docker run -d -p 5000:5000 --name $containerName $imageName
fi
Próbowałem różnych rzeczy, takich jak --rm
i --no-cache
parametrów, docker run
a także zatrzymywanie / usuwanie kontenera przed zbudowaniem nowego. Nie jestem pewien, co tu robię źle. Wygląda na to, że docker poprawnie aktualizuje obraz, ponieważ wywołanie COPY src src
spowodowałoby identyfikator warstwy i brak wywołania pamięci podręcznej:
Step 6 : COPY src src
---> 382ef210d8fd
Jaki jest zalecany sposób aktualizacji kontenera?
Mój typowy scenariusz byłby następujący: aplikacja działa na serwerze w kontenerze Docker. Teraz części aplikacji są aktualizowane, np. Poprzez modyfikację pliku. Teraz kontener powinien działać w nowej wersji. Wydaje się, że Docker zaleca budowanie nowego obrazu zamiast modyfikowania istniejącego kontenera, więc myślę, że ogólny sposób przebudowy, tak jak ja, jest właściwy, ale niektóre szczegóły implementacji muszą zostać poprawione.