邮政「;docker run“;命令

邮政「;docker run“;命令,docker,dockerfile,Docker,Dockerfile,我正在寻找一种方法,一旦我运行了“docker run”,就可以在docker文件中运行一些命令 我的用例是我有两个容器,Web(Apache,PHP),DB(MySQL) 当我在Web容器上执行“docker run”并且链接到DB容器时。我想在我的Web容器中执行迁移脚本 我可以使用“docker exec”进入机箱并运行运行运行正常的迁移。如果可能的话,我只想用Dockerfile或其他provisioner自动完成这项工作 谢谢 SimonDocker设计用于运行一个进程,但可以运行多个

我正在寻找一种方法,一旦我运行了“docker run”,就可以在docker文件中运行一些命令

我的用例是我有两个容器,Web(Apache,PHP),DB(MySQL)

当我在Web容器上执行“docker run”并且链接到DB容器时。我想在我的Web容器中执行迁移脚本

我可以使用“docker exec”进入机箱并运行运行运行正常的迁移。如果可能的话,我只想用Dockerfile或其他provisioner自动完成这项工作

谢谢
Simon

Docker设计用于运行一个进程,但可以运行多个进程。您应该看看supervisor,请参见

Docker设计用于运行一个进程,但可以运行多个进程。您应该看看supervisor,请参见

Docker设计用于运行一个进程,但可以运行多个进程。您应该看看supervisor,请参见

Docker设计用于运行一个进程,但可以运行多个进程。您应该查看supervisor,请参见

在任何一个图像中都有一个脚本(在DB图像中使用脚本似乎更有意义),并在启动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
然后:


只要在两个映像中都有一个脚本(在DB映像中使用它似乎更有意义),并在启动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
然后:


只要在两个映像中都有一个脚本(在DB映像中使用它似乎更有意义),并在启动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
然后:


只要在两个映像中都有一个脚本(在DB映像中使用它似乎更有意义),并在启动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
然后:


如果您真的想让db迁移成为docker容器运行的一部分,那么可以使用一个更复杂的脚本作为命令,它将首先执行迁移脚本,然后运行web服务

如果您真的想让db迁移成为docker容器运行的一部分,您可以使用一个更复杂的脚本作为命令,它将首先执行迁移脚本,然后运行web服务

如果您真的想让db迁移成为docker容器运行的一部分,您可以使用一个更复杂的脚本作为命令,它将首先执行迁移脚本,然后运行web服务

如果您真的想让db迁移成为docker容器运行的一部分,您可以使用一个更复杂的脚本作为命令,它将首先执行迁移脚本,然后运行web服务

我喜欢使用卷进行数据库迁移的想法。我唯一的问题是,我的迁移与应用程序紧密耦合,因此运行迁移的唯一方法是使用正确的版本等在主机上安装PHP/Composer/Phinx等。这似乎违背了使用Docker的目的。我想先启动MySQL容器,然后运行Apache容器,然后运行迁移,然后自动运行迁移。即使我要使用一个基本映像(我会及时进行),迁移仍然需要仔细检查,以获取最近的更改。您也可以让您的docker入口点进行迁移,然后启动(如果确实需要)。我会更新答案。我一直认为ENTRYPOINT更适合决定使用哪个shell。然后CMD决定在该shell中运行什么。但这似乎也起了作用。在更新中-e应该是--entrypoint-我喜欢使用卷进行数据库迁移的想法。我唯一的问题是,我的迁移与应用程序紧密耦合,因此运行迁移的唯一方法是使用正确的版本等在主机上安装PHP/Composer/Phinx等。这似乎违背了使用Docker的目的。我想先启动MySQL容器,然后运行Apache容器,然后运行迁移,然后自动运行迁移。即使我要使用一个基本映像(我会及时进行),迁移仍然需要仔细检查,以获取最近的更改。您也可以让您的docker入口点进行迁移,然后启动(如果确实需要)。我会更新答案。我一直认为ENTRYPOINT更适合决定使用哪个shell。然后CMD决定在该shell中运行什么。但这似乎也起了作用。在更新中-e应该是--entrypoint-我喜欢使用卷进行数据库迁移的想法。我唯一的问题是,我的迁移与应用程序紧密耦合,因此运行迁移的唯一方法是使用正确的版本等在主机上安装PHP/Composer/Phinx等。这似乎违背了使用Docker的目的。我想先启动MySQL容器,然后运行Apache容器,然后运行迁移,然后自动运行迁移。即使我要使用一个基本映像(我会及时使用),迁移仍然需要仔细检查,以获取最近的更改