初始化django应用程序与docker构成

我是docker-compose中的新手,我有一个docker,里面有我的django实例和一个mysql数据库。 我想创build一个自动configuration的容器,只在第一个docker运行时运行一个命令。 在这个命令中,我想要完成以下任务:

  1. 进行初始数据库迁移
  2. 创buildpipe理员超级用户
  3. 将一个mysql备份导入到数据库中

在此之后,系统应该继续启动djangotestingnetworking服务器。

有没有什么办法可以让docker-compose在第一次运行的时候运行一个命令,或者在django中有任何替代方法来控制系统是否已经configuration和更新?

为了澄清这里是我的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 

谢谢。

在@ cricket_007的评论之后,终于find了解决这个问题的棘手的解决scheme。 我已经为数据库服务和我的Web服务创build了一个sh脚本。 另外,我在我的文件夹web_local.version和web_server.version中创build了两个版本文件。

web_local.version已被添加到我的.gitignore,因为这个文件是用来存储当前的应用程序版本。

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

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

 #!/bin/bash FILE="web_local.version" if [ -f "$FILE" ]; then echo "File $FILE exist." if diff ./web_server.version ./web_local.version > /dev/null; then echo "model version up to date :)" else echo "model updated!!" python manage.py migrate cp ./web_server.version ./$FILE fi else echo "File $FILE does not exist" sleep 10 #added because the first time db take a long time to init and the script doesn't wait until db is finished cp ./web_server.version ./$FILE python manage.py migrate fi python manage.py runserver 0.0.0.0:8000 

我想有更多的正式解决scheme,但是这个解决scheme对于我的情况是有用的,因为它允许我们的团队保持相同的模拟数据库和通过git同步的相同模型,并且我们有一个零时间的configuration环境,只用一个命令就可以运行。