为了运行ASP.NET Core应用程序,我生成了一个dockerfile,该文件构建了该应用程序,并将源代码复制到了容器中,该容器由Git使用Jenkins获取。因此,在我的工作区中,我在dockerfile中执行以下操作:
WORKDIR /app
COPY src src
虽然Jenkins使用Git正确更新了主机上的文件,但Docker并未将此文件应用于我的映像。
我的基本构建脚本:
#!/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
并在构建新容器之前停止/删除了容器。我不确定我在做什么错。似乎docker正在正确更新映像,因为COPY src src
会导致图层ID且没有缓存调用:
Step 6 : COPY src src
---> 382ef210d8fd
推荐的更新容器的方法是什么?
我的典型场景是:应用程序在Docker容器中的服务器上运行。现在,应用程序的某些部分已更新,例如通过修改文件。现在,容器应运行新版本。Docker似乎建议构建一个新映像而不是修改现有容器,因此我认为像我一样进行重建的一般方法是正确的,但是实现中的一些细节必须改进。