docker-compose - 数据库迁移和其他 pre/post 脚本
docker-compose - database migrations and other pre/post scripts
我有一个示例 Django 应用程序,我正在尝试使用 docker 启动并 运行ning docker。
docker-compose up
显示 web、db 和其他容器以及它们之间的链接。但是有可能需要 运行..
的 pre 和 post 脚本
我的场景中的前置脚本示例:
git
pip
docker
docker-compose
wget
post-脚本示例:
数据库迁移,通常在容器启动并 运行ning 后使用 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"
我的问题:
1) 运行 这些命令的最佳方式是什么?
2) 每次部署(从头开始?)时数据库迁移 运行 - 还是按卷处理此问题?
您有两个选择:
您可以在图像的 docker 文件中 运行 这些命令;因为当 compose 是 运行ning 时每个 docker 文件都是 运行 - 你的图像将有这些命令的结果。这在您进行 os 级升级和配置 bootstrapping(就像您的 apt-get
命令)时特别有用。
对于运行时间级别的配置(系统启动后你需要做的事情),在你的docker-[中使用command
指令=28=] 文件。这些将是您的迁移(如果您每次都需要 运行)。
如果你想保留你的数据across 运行s of docker compose(也就是说,你的数据应该在你重新启动容器);那么您需要针对您的 host 的持久映射或共享的数据量 - 您也可以在 docker-compose.yml 中进行配置。
docker-compose 会很乐意 运行 您提供的任何脚本 - 它不知道是否需要 运行 它,它只是执行命令.您需要确保您的 pre、post、bootstrap 脚本足够智能,即使它们的有效结果已经应用,它们也可以重复。
我有一个示例 Django 应用程序,我正在尝试使用 docker 启动并 运行ning docker。
docker-compose up
显示 web、db 和其他容器以及它们之间的链接。但是有可能需要 运行..
我的场景中的前置脚本示例:
git
pip
docker
docker-compose
wget
post-脚本示例:
数据库迁移,通常在容器启动并 运行ning 后使用 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"
我的问题:
1) 运行 这些命令的最佳方式是什么?
2) 每次部署(从头开始?)时数据库迁移 运行 - 还是按卷处理此问题?
您有两个选择:
您可以在图像的 docker 文件中 运行 这些命令;因为当 compose 是 运行ning 时每个 docker 文件都是 运行 - 你的图像将有这些命令的结果。这在您进行 os 级升级和配置 bootstrapping(就像您的
apt-get
命令)时特别有用。对于运行时间级别的配置(系统启动后你需要做的事情),在你的docker-[中使用
command
指令=28=] 文件。这些将是您的迁移(如果您每次都需要 运行)。
如果你想保留你的数据across 运行s of docker compose(也就是说,你的数据应该在你重新启动容器);那么您需要针对您的 host 的持久映射或共享的数据量 - 您也可以在 docker-compose.yml 中进行配置。
docker-compose 会很乐意 运行 您提供的任何脚本 - 它不知道是否需要 运行 它,它只是执行命令.您需要确保您的 pre、post、bootstrap 脚本足够智能,即使它们的有效结果已经应用,它们也可以重复。