docker-compose-数据库迁移和其他前/后脚本

Raj*_*thi 5 django docker docker-compose

我有一个示例django应用程序,正在尝试使用docker启动并运行。

docker-compose up调出网络,数据库和其他容器以及它们之间的链接。但是可能需要运行之前和之后的脚本。

我的方案中的示例脚本示例:

git
pip
docker
docker-compose
wget
Run Code Online (Sandbox Code Playgroud)

脚本示例:

数据库迁移,通常是docker run web...在容器启动并运行后使用手动完成的。

目前,我在应用程序的根目录下有一个deploy.sh,它遵循这样的逻辑..(我在启动时选择了一个Ubuntu映像)

#assuming I always choose ubuntu base image
sudo apt-get install x
sudo apt-get install y
sudo apt-get install z
docker-compose build .; docker-compose up -d;
docker-compose run web "python manage.py makemigrations"
Run Code Online (Sandbox Code Playgroud)

我的问题:

1)运行这些命令的最佳方法是什么?

2)每次部署都从头开始运行数据库迁移吗?还是由卷来解决此问题?

Bur*_*lid 4

您有两个选择:

  1. 您可以在镜像的 dockerfile 中运行这些命令;由于每个 dockerfile 在 compose 运行时运行 - 您的图像将具有这些命令的结果。当您进行操作系统级升级和配置引导(如您的apt-get命令)时,这特别有用。

  2. 对于运行时级别的配置(系统启动后需要执行的操作),请使用commanddocker-compose.yml 文件中的指令。这些将是您的迁移(如果您需要每次都运行它们)。

如果您想在 docker compose 运行期间保留数据(也就是说,重新启动容器时您的数据应该保留);那么您需要针对主机的持久映射或共享的数据卷 - 您也可以在 docker-compose.yml 中进行配置。

docker-compose 将愉快地运行您提供的任何脚本 - 它不知道是否需要运行它,它只是执行命令。您需要确保您的前、后、引导脚本足够智能,即使它们的有效结果已经应用,它们也可以重复。