一尘不染

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

docker

/srv我的容器中包含所有网站代码。

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

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

我还/srv/myapp希望在应用程序的不同版本之间共享目录和文件,例如:/srv/myapp/user- uploads。这是专业网站开发中的常见做法

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

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

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

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


阅读 1009

收藏
2020-06-17

共1个答案

一尘不染

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

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