我应该在docker容器外还是在docker集装箱cli中运行django命令



我刚刚开始对我的Django应用程序进行码头化,到目前为止一切都很顺利,但我需要知道在容器中运行Django命令是最佳实践吗

docker container exec -it con_name python manage.py startup app_name

或者我应该在集装箱外面运行它

python manage.py startup app_name

谢谢

我尽量避免使用docker exec。作为一个调试工具,它非常有用,但它不应该是与容器交互的正常方式。

您特别谈到了启动应用程序。在这里使用一个普通的Python虚拟环境是可以的,忽略Docker,即使你最终要通过容器进行部署;与容器数据库配对的主机开发环境也可以是一个很好的组合。

否则,运行服务器的应该是Dockerfile CMD。服务器将是容器运行的单个进程,如果服务器退出,容器也会退出。

# requires manage.py to be executable and begin with the line
# #!/usr/bin/env python3
CMD ["./manage.py", "runserver", "--host", "0.0.0.0"]

manage.py脚本可以运行各种支持命令,比如运行数据库迁移。对此有几种方法。一个简单的方法是运行一个新容器,使用相同的网络设置和数据库配置,但使用备用命令。如果您使用Compose来启动主服务器,则有一个docker-compose run命令可以做到这一点:

docker-compose run myapp 
./manage.py migrate

(在Dockerfile中使用CMDENTRYPOINT有一个风格问题。我在这里显示的命令替换了CMD;同时替换ENTRYPOINT的语法要尴尬得多。这是我倾向于选择CMD的几个原因之一。(

对于这些支持命令,也可以从主机上运行它们,但数据库配置等内容会有所不同。尤其是像./manage.py makemigrations这样希望写回原始源树的命令最好在主机上运行。

在我的情况下,我运行类似于;startapp";在开发过程中,我在本地运行makemigrations,然后在部署阶段在容器内迁移,最后在由芹菜管理的第二个容器(同一映像(中运行定期任务。

最新更新