最佳答案
为了运行 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
我为 docker run
尝试了不同的东西,比如 --rm
和 --no-cache
参数,还停止/删除了正在构建的容器 之前。我不知道我哪里做错了。看起来 docker 正在正确地更新图像,因为调用 COPY src src
将导致一个图层 id 而没有缓存调用:
Step 6 : COPY src src
---> 382ef210d8fd
更新容器的推荐方法是什么?
我的典型场景是: 应用程序在 Docker 容器中的服务器上运行。现在应用程序的一部分已经更新,例如通过修改一个文件。现在容器应该运行新版本。Docker 似乎建议构建一个新的映像,而不是修改现有的容器,所以我认为像我这样重建的一般方法是正确的,但是实现中的一些细节需要改进。