发布“docker run”命令

时间:2015-02-18 20:15:39

标签: docker dockerfile

我正在寻找一种方法来设置一些命令在我的Dockerfile中运行,一旦我运行" docker run"

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

当我执行" docker run"在Web容器上,链接到数据库容器。我想在我的Web容器中执行迁移脚本。

我可以使用" docker exec"进入框并运行有效的迁移。我只想在可能的情况下使用Dockerfile或使用其他配置程序自动执行此操作。

由于 西蒙

3 个答案:

答案 0 :(得分:3)

在任一图像中都有一个脚本(似乎更适合它存在于您的数据库映像中),并在启动Web服务器之前执行它。更好的是,将MySQL数据存储在卷中,以便在下次运行或重新启动数据库容器时,您不必担心迁移:

# 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

答案 1 :(得分:1)

Docker旨在运行一个进程,但可以运行多个进程。你应该看一下主管,见https://docs.docker.com/articles/using_supervisord/

答案 2 :(得分:0)

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