Python 使用docker容器设置开发环境时,如何管理开发任务?

Python 使用docker容器设置开发环境时,如何管理开发任务?,python,django,docker,gunicorn,Python,Django,Docker,Gunicorn,我一直在研究docker,了解到目前为止我读到的几乎所有东西。我构建了一些图像,将容器链接在一起,装入了卷,甚至运行了一个django应用程序示例 有一件事我不能完全理解,那就是建立一个开发环境。docker的全部意义在于能够将您的环境带到任何地方,以便您所做的一切都是可移植的和一致的。例如,如果我在生产环境中运行由gunicorn提供服务的django应用程序,我需要重新启动服务器,以便代码更改生效;当您在本地笔记本电脑环境中进行项目时,这并不理想。如果我对模型或视图进行了更改,但我不想附加到

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

有一件事我不能完全理解,那就是建立一个开发环境。docker的全部意义在于能够将您的环境带到任何地方,以便您所做的一切都是可移植的和一致的。例如,如果我在生产环境中运行由gunicorn提供服务的django应用程序,我需要重新启动服务器,以便代码更改生效;当您在本地笔记本电脑环境中进行项目时,这并不理想。如果我对模型或视图进行了更改,但我不想附加到容器,请停止gunicorn,然后在每次更改代码时重新启动它

我也不确定如何运行管理命令
python manage.py syncdb
需要我进入容器内部并运行命令。我还使用south管理数据和模式迁移
python manage.py migrate
。其他人如何处理这个问题

调试是另一个问题。我是否需要将所有日志保存到某个地方以便查看?我通常只是查看django开发服务器的输出,以查看错误和打印

似乎我必须制作一个特殊的dev环境容器,它有一系列的解决方法;但这似乎完全违背了该工具的初衷。有什么建议吗

进行更多研究后更新:

谢谢你的回复。他们让我走上了正确的道路

我最终发现,如果让您协调卷的链接和装载,您可以运行命令。fig运行容器\u name python manage.py syncdb。它看起来很不错,我已经能够使用它设置我的开发环境

制作了一张我如何使用vagrant设置的图表。

我只是跑

fig up

在与我的fig.yml文件相同的目录中,它执行链接容器和启动服务器所需的所有操作。在我的mac电脑上工作时,我只是在运行开发服务器,这样当我更改python代码时,它就会重新启动。

在我当前的工作中,我们设置了一个名为django_admin的bash脚本。您可以这样运行它:

django_admin <management command>
脚本如下所示:

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 $@

我猜你也可以连接这样的东西来管理.py。我通常将实际的CMD封装在一个启动bash shell的脚本中。以容器为例。脚本中的最后两行是:

/opt/jetty/bin/jetty.sh restart
bash
这将启动jetty,然后打开一个shell

现在,我可以使用以下命令在容器中输入shell并运行任何命令或查看日志。完成后,我可以使用Ctrl-p+Ctrl-q从容器中分离

docker attach CONTAINER_NAME

Fig现在已被Docker Compose取代。
docker attach CONTAINER_NAME