Для запуска приложения ASP.NET Core я создал файл dockerfile, который создает приложение и копирует исходный код в контейнере, который извлекается Git с помощью Jenkins. Поэтому в моей рабочей области я делаю следующее в файле docker:
WORKDIR /app
COPY src src
Пока Jenkins корректно обновляет файлы на моем хосте с помощью Git, Docker не применяет это к моему изображению.
Мой основной script для построения:
#!/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
Я пробовал разные вещи, такие как --rm
и --no-cache
для docker run
, а также останавливал/удалял контейнер до создания нового. Я не уверен, что я делаю неправильно здесь. Кажется, что докер обновляет изображение правильно, так как вызов COPY src src
приведет к идентификатору слоя и вызову кэш-памяти:
Step 6 : COPY src src
---> 382ef210d8fd
Каков рекомендуемый способ обновления контейнера?
Моим типичным сценарием было бы: Приложение запускается на сервере в контейнере Docker. Теперь часть приложения обновляется, например. путем изменения файла. Теперь контейнер должен запустить новую версию. Docker, похоже, рекомендует создать новый образ вместо изменения существующего контейнера, поэтому я думаю, что общий способ перестройки, как и я, прав, но некоторые детали в реализации должны быть улучшены.