在使用Docker容器设置开发环境时,如何pipe理开发任务?

我一直在研究docker,并了解到目前为止所读到的几乎所有东西。 我已经build立了几个图像,链接在一起的容器,装卷,甚至有一个示例django应用程序运行。

我无法想象的一件事是build立一个开发环境。 docker工人的重点是能够把你的环境带到任何地方,这样你所做的一切都是可移植的,一致的。 如果我正在运行由gunicorn服务的生产中的django应用程序,则需要重新启动服务器以使代码更改生效; 当您在本地笔记本电脑环境中处理项目时,这并不理想。 如果我对模型或视图进行了更改,我不想将其附加到容器上,请停止gunicorn,然后每次更改代码时重新启动它。

我也不知道我将如何运行pipe理命令。 python manage.py syncdb将需要我进入容器内部并运行命令。 我也使用南来pipe理数据和模式迁移python manage.py migrate 。 其他人如何处理这个问题?

debugging是另一个问题。 我必须以某种方式让我所有的日志保存在某个地方,这样我才能看到这些东西吗? 我通常只看django开发服务器的输出来查看错误和打印。

看来,我将不得不做一个特殊的开发环境容器,有一堆解决方法; 这似乎是它首先完全打败了工具的目的。 有什么build议么?

做更多的研究后更新:

感谢您的回应。 他们让我走在正确的道路上。

我结束了发现无花果http://www.fig.sh/它让你编排连接和安装卷,你可以运行命令。 无法运行容器名python manage.py syncdb。 这似乎很不错,我已经能够使用它设置我的开发环境。

做了一个关于如何使用vagrant https://www.vagrantup.com/来设置它的图表。 在这里输入图像说明

我只是跑步

 fig up 

在与我的fig.yml文件相同的目录中,并且完成链接容器和启动服务器所需的一切。 我只是在我的Mac上运行开发服务器,以便它在我更改Python代码时重新启动。

在我目前的演出中,我们设置了一个名为django_admin的bash脚本。 你这样运行:

 django_admin <management command> 

例:

 django_admin syncdb 

脚本看起来像这样:

 docker run -it --rm \ -e PYTHONPATH=/var/local \ -e DJANGO_ENVIRON=LOCAL \ -e LC_ALL=en_US.UTF-8 \ -e LANG=en_US.UTF-8 \ -v /src/www/run:/var/log \ -v /src/www:/var/local \ --link mysql:db \ localhost:5000/www:dev /var/local/config/local/django-admin $@ 

我猜你也可以像这样hook到manage.py

我通常将我的实际CMD包装在启动bash shell的脚本中。 以Docker-Jetty容器为例。 脚本的最后两行是:

 /opt/jetty/bin/jetty.sh restart bash 

这将启动docker,然后打开一个shell。

现在我可以使用以下命令在容器中input一个shell,并运行任何命令或查看日志。 一旦我完成,我可以使用Ctrl-P + Ctrl-q从容器中分离。

 docker attach CONTAINER_NAME