【发布时间】:2017-05-10 09:42:47
【问题描述】:
为了运行 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 似乎建议构建一个新的镜像而不是修改一个现有的容器,所以我认为像我这样做的重建的一般方式是正确的,但是实现中的一些细节必须改进。
【问题讨论】:
-
您能否列出构建容器的具体步骤,包括构建命令和每个命令的完整输出?
标签: git jenkins docker asp.net-core dockerfile