Docker基础开发环境和live环境
Docker based development environment and live environment
我对 Docker 还比较陌生,但我非常喜欢它的设计方式。
我即将更改我们的项目发布工作流程,我有一些问题,我希望有人可以分享一些经验,看看什么是最好的解决方法。
我们使用 Vagrant 来管理开发环境。我们的项目使用基于 PHP 的框架。我的目标是尽可能地模拟开发人员机器上的实时环境。
据我所知Docker。一旦测试完成,我可以使用 CI 创建最终容器,在发布之前将其推送到我们自己的 Docker Hub,服务器可以只获取新版本的容器,我们可以进行无痛发布.这部分对我来说很清楚。通过这种方式,给定版本的源代码被烘焙到容器中。
尽管我的问题是我不希望开发人员在开发项目时提交 Docker 图片。我希望他们使用 Git 并使用 Vagrant 和 Docker 在本地构建环境。
在这种情况下,我必须将项目源代码作为一个卷(而不是容器的一部分),以确保开发人员可以看到实时编辑、调试等。
有没有简单的方法可以做到这一点?我是否需要使用 2 Docker 个文件
一个 Docker 文件用于开发环境,一个用于实时发布,区别在于如何管理源代码?
如有任何想法或反馈,我们将不胜感激。对我来说,主要的挑战是拥有一个开发环境,在这个环境中源代码的编辑和调试非常容易,同时我有可能创建一个最终的容器镜像,其中包含来自我的 CI.[=11= 的可交付软件的所有内容。 ]
提前致谢。
我一直在使用不同的脚本和文件系统标志来达到类似的效果。
不同的脚本:当您启动 Docker 容器时,您可以将命令传递给 运行。该命令可能是与您希望容器执行的角色相对应的 bash 脚本的名称。例如,要以开发角色启动它,您可以使用
docker run -t -i $tag /etc/rc.dev
虽然发布角色只是默认角色(它是用 CMD 指定的脚本):
docker run -t -i $tag
文件系统标志:您可以通过将标志文件放置在使用 VOLUME 挂载的外部文件夹中来控制容器的启动和行为方式。例如,我的发布主机有一个外部 SMTP 服务器,但是当容器用于开发时,它必须启动它自己的 SMTP 服务器。为此,我在外部文件系统中放置了一个标志,“/var/your_project/flags/start_postfix”,容器的启动脚本如下检查该标志:
if [ -e /var/your_project/flags/start_postfix ]; then
/etc/init.d/rsyslog start
/etc/init.d/postfix start
fi
那么你会如何使用这些?
一种选择是将 SSH 密钥和其他类型的开发人员凭据放在开发人员主机上的 VOLUME 安装文件夹中。容器启动脚本随后将检测 SSH 密钥的存在并切换到开发角色,在该角色中它将使用密钥从 Git.
中提取项目的新版本
我对 Docker 还比较陌生,但我非常喜欢它的设计方式。 我即将更改我们的项目发布工作流程,我有一些问题,我希望有人可以分享一些经验,看看什么是最好的解决方法。
我们使用 Vagrant 来管理开发环境。我们的项目使用基于 PHP 的框架。我的目标是尽可能地模拟开发人员机器上的实时环境。
据我所知Docker。一旦测试完成,我可以使用 CI 创建最终容器,在发布之前将其推送到我们自己的 Docker Hub,服务器可以只获取新版本的容器,我们可以进行无痛发布.这部分对我来说很清楚。通过这种方式,给定版本的源代码被烘焙到容器中。
尽管我的问题是我不希望开发人员在开发项目时提交 Docker 图片。我希望他们使用 Git 并使用 Vagrant 和 Docker 在本地构建环境。
在这种情况下,我必须将项目源代码作为一个卷(而不是容器的一部分),以确保开发人员可以看到实时编辑、调试等。
有没有简单的方法可以做到这一点?我是否需要使用 2 Docker 个文件 一个 Docker 文件用于开发环境,一个用于实时发布,区别在于如何管理源代码?
如有任何想法或反馈,我们将不胜感激。对我来说,主要的挑战是拥有一个开发环境,在这个环境中源代码的编辑和调试非常容易,同时我有可能创建一个最终的容器镜像,其中包含来自我的 CI.[=11= 的可交付软件的所有内容。 ]
提前致谢。
我一直在使用不同的脚本和文件系统标志来达到类似的效果。
不同的脚本:当您启动 Docker 容器时,您可以将命令传递给 运行。该命令可能是与您希望容器执行的角色相对应的 bash 脚本的名称。例如,要以开发角色启动它,您可以使用
docker run -t -i $tag /etc/rc.dev
虽然发布角色只是默认角色(它是用 CMD 指定的脚本):
docker run -t -i $tag
文件系统标志:您可以通过将标志文件放置在使用 VOLUME 挂载的外部文件夹中来控制容器的启动和行为方式。例如,我的发布主机有一个外部 SMTP 服务器,但是当容器用于开发时,它必须启动它自己的 SMTP 服务器。为此,我在外部文件系统中放置了一个标志,“/var/your_project/flags/start_postfix”,容器的启动脚本如下检查该标志:
if [ -e /var/your_project/flags/start_postfix ]; then
/etc/init.d/rsyslog start
/etc/init.d/postfix start
fi
那么你会如何使用这些?
一种选择是将 SSH 密钥和其他类型的开发人员凭据放在开发人员主机上的 VOLUME 安装文件夹中。容器启动脚本随后将检测 SSH 密钥的存在并切换到开发角色,在该角色中它将使用密钥从 Git.
中提取项目的新版本