首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将本地存储库代码更改合并到正在运行的容器中

将本地存储库代码更改合并到正在运行的容器中
EN

Stack Overflow用户
提问于 2020-03-03 18:11:42
回答 1查看 25关注 0票数 0

我是Docker的新手,我从上周开始使用docker。有几件事让我很困惑。

关于基础知识,我知道在Docker中,Docker文件用于使用build命令创建Docker镜像

构建Docker映像后,即可将其上传到Docker注册表中

使用Docker Image,任何用户都可以运行代码来创建Docker容器

从Docker Registry中,用户可以随时获取Docker Image并构建新的容器。

现在假设,我已经从docker repo下载并构建了3个镜像,并使用dockerfile制作了一个镜像(都使用了1个docker-compose.yml文件)。我的疑问: 1)如果我从git克隆我的团队的‘dev分支(只由master分支组成,他们在这个新分支中添加了他们的1个特性),那么我需要使用docker-compose up吗?如果是,那么我现有的镜像是否会被修改,或者在内部会发生什么? 2)我使用exec -it name bash在容器中进行更改。如何保存本地更改并执行docker重新启动重建来获得这些更改(在此过程中我的映像是否被修改) 3)我们到底何时需要重新构建映像,然后使用‘container_name’命令

很抱歉,如果这些问题听起来很幼稚,但相信我,我已经花了很多时间来研究和弄清楚docker中的事情是如何工作的。

EN

回答 1

Stack Overflow用户

发布于 2020-03-03 20:00:12

切勿使用docker exec在容器内进行更改:一旦容器退出并被删除,这些更改就会丢失。docker exec是一个非常有用的调试工具,但它不应该是您的核心Docker工作流的一部分。(例如,在您问题的前半部分的四个步骤中,它根本没有显示出来。)

出于本地开发的目的,实际上将镜像上传到注册表是可选的。您可以docker build一张图片,然后立即docker run它,而不是上传它。

如果运行docker-compose up,具体会发生什么取决于docker-compose.yml文件是包含build:行还是包含image:行。如果两者都有,那么当Compose构建映像时,它将具有指定的名称和标记,这可能会与注册表中的映像重叠。现有的图像永远不会被修改,但是一次只能有一个图像有一个给定的名称和标签,所以如果你手动docker-compose build的话,可能会导致上一个图像被隐藏(docker images会用一个<none>标签显示它)。

当您进行了本地更改并重新构建了映像时,docker-compose up知道删除并重新创建现有容器。新的容器将基于新的图像,并将具有新的代码。(以这种方式删除和重新创建容器是非常例行公事的,而且Compose也知道如何对各种其他配置更改执行此操作。)

对我来说,一个通常工作得很好的工作流程是在本地开发一个给定的服务,并让它完全通过自己的单元测试,而根本不涉及Docker。一旦你做到了这一点,然后运行docker-compose build来获得一个新的镜像,并在你的本地环境中进行集成测试。如果您对此感到满意,那么请致力于源代码控制,并让您的持续集成系统从中构建和推送Docker映像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60504836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档