gpt4 book ai didi

deployment - 如何在开发中编辑 Docker 容器中的代码?

转载 作者:IT老高 更新时间:2023-10-28 12:34:17 28 4
gpt4 key购买 nike

我所有网站的代码都在 /srv 下在我的容器里。

我的 Dockerfile 使用 git 下载代码并将其作为镜像的一部分,以便更轻松地部署到生产环境。

但是我该如何在开发中编辑代码呢?我认为使用卷是解决方案,例如:-v /docker/mycontainer/srv:/srv .但它会覆盖容器中的目录。如果这是我第一次运行它,它会清空它,因为主机中没有任何内容。所以我在 Dockerfile 中所做的一切都会丢失。

/srv/myapp里面也有目录和文件我想在我的应用程序的不同版本之间共享,例如:/srv/myapp/user-uploads .这是 common practice在专业的网络开发中。

那么我该怎么做才能做到所有这些事情呢?:

  • 在开发中编辑/srv 中的代码
  • 在不同版本之间共享/srv/myapp/user-uploads
  • 让 Dockerfile 下载代码。在我看来,在 Docker 之外执行“git clone”或“git pull”会破坏 Docker 的目的。此外,还有一些我无法在主机中运行的东西,例如数据库迁移或其他特定于应用的脚本。

有没有办法进行反向卷挂载?我的意思是让容器覆盖主机,而不是相反。

我认为一种解决方案可能是在运行容器的守护程序之前将/srv 复制到/srv.deployment-copy。然后当我运行守护程序时,检查/srv.deployment-copy 是否存在并将所有内容复制回/srv。这样,我可以将/srv 用作卷,并且仍然可以使用 Dockerfile 将代码部署到它。我已经为所有 docker 命令使用了别名,因此自动化这将不是问题。你怎么看?

最佳答案

我发现在开发中编辑代码的最佳方法是像往常一样安装所有内容(包括克隆应用的存储库),但将容器中的所有代码移至 /srv/myapp.deploy.dev。然后使用 /srv/myapprw 卷启动容器,并使用 init.d 脚本清理该卷并复制其中的新内容,如下所示:

rm -r /srv/myapp/*
rm -r /srv/myapp/.[!.]*
cp -r /srv/myapp.deploy.dev/. /srv/myapp
rm -r /srv/myapp.deploy.dev

关于deployment - 如何在开发中编辑 Docker 容器中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842920/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com