Init django应用程序与docker-compose

时间:2016-05-06 14:00:11

标签: python django docker docker-compose

我是docker-compose的新手,我的django实例和mysql数据库都有一个docker。我想创建一个自动配置的容器,它只在第一个docker run上运行命令。在此命令中,我想执行以下任务:

  1. 进行初始数据库迁移
  2. 创建管理员超级用户
  3. 将mysql备份导入数据库
  4. 在此之后,系统应继续启动django测试网络服务器。

    有没有办法告诉docker-compose在首次运行时运行一个命令,还是在django中有任何替代方法来控制系统是否已经配置和更新?

    为了澄清这里我的dockfile和docker-compose.yml:

    FROM python:3.4
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    ADD requirements.txt /code/
    RUN pip install -r requirements.txt
    ADD . /code/
    
    ####################
    
    version: '2'
    services:
    db:
       image: "mysql:5.6"
       ports:
         - 3306:3306
       environment:
         MYSQL_ROOT_PASSWORD: xxxxxx
         MYSQL_DATABASE: xxxxxx
         MYSQL_USER: xxxxx
         MYSQL_PASSWORD: xxxxxxx
     web:
       build: .
       command: python manage.py runserver 0.0.0.0:8000
       volumes:
         - .:/code
       ports:
         - "8000:8000"
       depends_on:
         - db
    

    感谢。

1 个答案:

答案 0 :(得分:5)

根据@ cricket_007的评论,最后我找到了解决问题的棘手解决方案。我已经为数据库服务和我的Web服务创建了一个sh脚本。另外,我在我的文件夹web_local.version和web_server.version中创建了两个版本文件。

web_local.version已添加到我的.gitignore中,因为此文件用于存储当前的应用版本。

start_web.sh脚本是一个简单的脚本,用于比较文件夹是否包含web_local.version文件。在这种情况下,项目已经过去配置,脚本会检查当前应用程序版本是否与服务器版本相比更新。在所有情况都是最新的情况下,只需运行一个Web服务器,否则运行迁移以更新模型,然后运行Web服务器。

以下是引用的web_start.sh脚本:

+

我认为有更多正式的解决方案,但这个解决方案对我的情况有用,因为它允许我们的团队维护相同的模拟数据库和通过git同步的相同模型,我们只用一个命令运行零时间配置环境。