一旦我运行“docker run”,我正在寻找一种设置一些命令以在我的 Dockerfile 中运行的方法
我的用例是我有 2 个容器,Web(Apache,PHP),DB(MySQL)
当我在 Web 容器上执行“docker run”并链接到 DB 容器时。我想在我的 Web 容器中执行迁移脚本。
我可以使用“docker exec”进入盒子并运行有效的迁移。如果可能的话,我只想使用 Dockerfile 或使用另一个配置程序来自动执行此操作。
谢谢西蒙
一旦我运行“docker run”,我正在寻找一种设置一些命令以在我的 Dockerfile 中运行的方法
我的用例是我有 2 个容器,Web(Apache,PHP),DB(MySQL)
当我在 Web 容器上执行“docker run”并链接到 DB 容器时。我想在我的 Web 容器中执行迁移脚本。
我可以使用“docker exec”进入盒子并运行有效的迁移。如果可能的话,我只想使用 Dockerfile 或使用另一个配置程序来自动执行此操作。
谢谢西蒙
只需在任一图像中都有一个脚本(似乎更有意义地将它放在您的数据库图像中),然后在启动 Web 服务器之前执行它。更好的是,将 MySQL 数据存储在一个卷中,以便在下次运行或重新启动 db 容器时不必担心迁移:
# migrate data into your volume
docker run --name mysql-data -v /my/mysql/data mysqlImage migrate.sh
# run mysql
docker run --name mysql -d --volumes-from mysql-data mysqlImage
# run www
docker run --name www -d --link mysql:mysql phpImage
您也可以将入口点设置为自定义脚本,我们称之为/my/run.sh
:
#!/usr/bin/env bash
mysqlimport ...
# don't know the syntax, but run apache in non-daemon mode
apache
然后:
docker run --name www -d --link mysql:mysql --entrypoint /my/run.sh phpImage
Docker 是为运行一个进程而设计的,但也可以运行多个进程。您应该查看主管,请参阅https://docs.docker.com/articles/using_supervisord/
如果你真的想让 db 迁移成为 docker 容器运行的一部分,你可能有一个更复杂的脚本作为命令,它首先执行迁移脚本,然后运行 Web 服务。