奇怪的方式启动一个背景的Apache / MySQLdocker容器

我下载了docker的debian映像,并从中创build了一个容器。 我haver成功地在这个容器上安装了apache和mysql(从/ bin / bash)。

我想让这个docker容器在后台运行。

我已经尝试了很多教程(我已经用Dockerfile创build了图像),但没有任何真正的作品。 Apache和MySQL是以root身份运行的…

所以我发起了这个命令:

docker run -d -p 80:80 myimagefile /bin/bash -c "while true; do sleep 10; done" 

然后我用exec命令连接了一个/ bin / bash,我手动启动了mysql和apache2(/etc/init.d/ scripts)。 当我键入CTRL-D,bash被杀死,但容器仍然在后台,与MySQL和Apache活着!

我想知道这个方法是正确的还是丑陋的? 有没有最好的方法来做到这一点? 我不想写一个Dockerfile来描述如何安装apache和mysql。 我已经用自己的应用和所有先决条件来形成我自己的形象。 我只是想从我的图像启动一个容器,并自动启动apache和mysql。

我有第二个问题:用我的方法,容器不重新加载,如果我重新启动物理计算机。 我怎样才能启动它的自动化与数据的持久性?

谢谢

我会build议在不同的容器中使用运行mysql和apache。 此外,docker中心已经有了可以重复使用的容器图像:

以下是描述如何启动Drupal的docker-compose文件的示例

 version: '2' services: db: image: mysql environment: - MYSQL_ROOT_PASSWORD=letmein - MYSQL_DATABASE=drupal - MYSQL_USER=drupal - MYSQL_PASSWORD=drupal volumes: - /var/lib/mysql web: image: drupal depends_on: - db ports: - "8080:80" volumes: - /var/www/html/sites - /var/www/private 

运行如下

 $ docker-compose up -d Creating dockercompose_db_1 Creating dockercompose_web_1 

在8080端口上公开Drupal

 $ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------- dockercompose_db_1 docker-entrypoint.sh mysqld Up 3306/tcp dockercompose_web_1 apache2-foreground Up 0.0.0.0:8080->80/tcp 

注意:

  • 运行drupal安装程序时,将其configuration为连接到名为“db”的主机,该主机是mysql容器。