2016-09-23 46 views
3

我下載了docker的debian映像,並且我已經從它創建了一個容器。 我haver在這個容器(從/ bin/bash)上成功安裝了apache和mysql。啓動後臺apache/mysql docker container的奇怪方法

我想讓這個碼頭容器在後臺運行。

我已經嘗試了很多教程(我已經用Dockerfile創建了圖像),但沒有任何效果。 Apache和MySQL被root身份運行...

所以我都推出此命令:

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

那我也附有EXEC命令/斌/ bash和我手動啓動mysql和的Apache2(在/ etc /init.d/腳本)。當我鍵入CTRL-D時,bash被殺死,但容器仍然在背景中,並且mysql和apache還活着!

我想知道這種方法是正確的還是它的東西很醜?有沒有最好的方法來做到這一點? 我不想寫一個Dockerfile來描述如何安裝apache和mysql。我用我的應用程序和所有先決條件製作了我自己的圖像。 我只想從我的映像啓動一個容器並自動啓動apache和mysql。

我有第二個問題:使用我的方法,容器不會重新加載,如果我重新啓動物理計算機。我怎樣才能啓動它的自動化與數據的持久性?

謝謝

回答

2

我會建議在單獨的容器中使用運行mysql和apache。此外,該泊塢窗樞紐已經有容器的圖像,你可以重複使用:

以下是介紹如何啓動一個docker-compose文件的例子Drupal的

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 

哪個端口上暴露出的Drupal 8080

$ 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的安裝,配置它連接到一個名爲 「DB」 主持人,這是MySQL的容器。
+0

事實上,我想存儲我的應用程序文件(PHP),我的空數據庫結構的圖像。 – Bob5421

+0

@ Bob5421這就是卷映射的來源。您可以配置存儲的位置。將其存儲在圖像中效率較低,不建議。 –

+0

你的意思是應該爲/ var/www創建一個分區,然後將此分區掛載到/ var/www並保留一個officiel apache2映像? – Bob5421