我所有网站的代码都在下面/srv
在我的容器中。
我的 Dockerfile 使用 git 下载代码,并将其作为映像的一部分,以便更轻松地部署到生产环境。
那么在开发中如何编辑代码呢?我认为使用卷是解决方案,例如:-v /docker/mycontainer/srv:/srv
。但它会覆盖容器中的目录。如果这是我第一次运行它,它会清空它,因为主机中没有任何内容。所以我在 Dockerfile 中所做的一切都会丢失。
里面还有目录和文件/srv/myapp
我想在我的应用程序的不同版本之间共享,例如:/srv/myapp/user-uploads
。这是一个常见做法 http://astrails.com/blog/2008/12/17/deployment-process-requirements在专业的网络开发中。
那么我该怎么做才能做到所有这些事情呢?:
- 在开发中编辑 /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
。然后使用以下命令启动容器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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)