2016-07-15 150 views
1

我想從Docker容器中運行我的Symfony3應用程序。據我所知,我可以用docker安裝/創建多個圖像,並將它們旋轉到容器中,以容納我的應用程序。Docker容器中的Symfony環境

我如何可以做到這一點我是經歷在泊塢一些碼頭,我看到了,我可以有一個碼頭工人的圖像,如:

  • Ubuntu的
  • PHP
  • 的Nginx - >正如我瞭解它就像一個Apache服務器,所以理論上它會處理所有的請求和響應。

但我仍然很難理解將多個圖像旋轉到一個容器的概念。

另外我也看到了一些名爲DockerFile的東西,它顯然可以將我的開發環境構建到一個容器中,我也可以使用它。

問題1: 有人可以澄清整個過程我仍然覺得它很難包圍我的頭。

問題2: 我該如何構建DockerFile,它是什麼?

+0

你最好打賭的是通過一些教程來工作,並回到這裏帶着你遇到的具體問題或問題。請參閱:https://docs.docker.com/engine/getstarted/和其他地方。 – ldg

回答

3

您不想將多個圖像旋轉到一個容器中。有可能你甚至不需要docker文件(但是對於PHP,你可能會這樣做)。

關於碼頭工人通常的口頭禪是「每個容器中的一個過程」,並與它一起工作了幾個月之後,我覺得這是很好的建議,即使它並不總是可以實現的。對於PHP應用程序,無論是交響樂,蛋糕,Laravel,Wordpress等等,這都是我的方式。我使用apache,聽起來你可能更熟悉apache。如果需要,你可以很容易地用官方的nginx容器替換我的例子。

  • 一個容器中運行PHP-FPM
  • 一個容器中運行的Apache(httpd的)
  • 如果你需要一個數據庫,爲MySQL
  • 可選的,作曲家的容器一個容器。
  • 搬運工-組成編排所有這些容器

我通常使用official httpd containerthe official mysql container,我程度offical php fpm container如所描述的,包括我需要的器官功能障礙綜合徵。下面是在可能需要爲自己的應用一些外部庫增加了一個PHP-FPM dockerfile的例子:

FROM php:5.5-fpm 

RUN apt-get update && apt-get install -y \ 
    php5-mysql \ 
    php5-curl \ 
    php5-common \ 
    php5-gd \ 
    php5-imagick \ 
    php5-intl \ 
    php5-dev \ 
    php5-sqlite \ 
    php5-xdebug \ 
    php5-memcached \ 
    \ 
    libmemcached-dev \ 
    libmcrypt-dev \ 
    libfreetype6-dev \ 
    libxml2-dev \ 
    libmagickwand-dev \ 
    libjpeg62-turbo-dev \ 
    libpng-dev && \ 
    \ 
    docker-php-ext-install pdo pdo_mysql && \ 
    docker-php-ext-install soap && \ 
    docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ && \ 
    docker-php-ext-install gd && \ 
    docker-php-ext-install iconv mcrypt && \ 
    \ 
    pecl install imagick && \ 
    docker-php-ext-enable imagick && \ 
    pecl install memcached && \ 
    docker-php-ext-enable memcached && \ 
    \ 
    pecl install xdebug && \ 
    docker-php-ext-enable xdebug && \ 
    \ 
    mkdir -p /app/content && \ 
    mkdir -p /app/usr/local/apache2 && \ 
    cd /app/usr/local/apache2 && \ 
    ln -s ../../../content htdocs 

COPY copy/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini 

這將構建我實際用於開發的圖像。除了安裝的依賴性,它副本XDebug的一個配置,並設置文件夾結構,以保持我的應用程序。

您將建立此容器是這樣的:

docker build -f nameoffile.Dockerfile -t myhubaccount/myphpcontainer \ ./path/to/folder/where/dockerfile/is

這將構建標記爲myhubaccount/myphpcontainer你的機器上的圖像,你可以參考它在你撰寫的文件。

基本撰寫文件,告訴這些容器如何互相交談可能是這個樣子:

泊塢窗,compose.yml

version: '2' 

services: 
    httpd: 
    image: httpd:latest 
    volumes: 
     - ./docker_conf/httpd.conf:/usr/local/apache2/conf/httpd.conf 
     - ./webroot:/usr/local/apache2/htdocs 
    ports: 
     - "80:80" 
    links: 
     - fpm 
    logging: 
     options: 
     max-size: "0" 

database: 
    image: mysql 
    ports: 
    - "3306:3306" 
    volumes: 
    - ./schema.sql:/docker-entrypoint-initdb.d/schema.sql 
    environment: 
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 
    MYSQL_DATABASE: development 
    logging: 
    options: 
     max-size: "5k" 

fpm: 
    image: myhubaccount/myphpcontainer 
    volumes: 
    - ./webroot:/app/content 
    links: 
    - database 
    logging: 
    options: 
     max-size: "50k" 

我認爲這是有益的突出幾個部分這個文件的。首先,對於php-fpm,你需要設置apache來與fpm服務器通信。 httpd下的links對象告訴容器有一個域名爲「fpm」的另一個容器,並且docker知道如何解析該名稱,所以任何與fpm服務器的通信都可以使用該名稱。我們必須在httpd容器中裝入(在卷下)apache配置。它看起來像默認的配置,但這個部分加入到容納PHP-FPM:

ProxyTimeout 30 
<FilesMatch ".*\.php$"> 
    SetHandler "proxy:fcgi://fpm:9000" 
</FilesMatch> 

這告訴Apache對於PHP文件請求轉發到服務器FPM和服務的結果。

ports條目導致容器的端口80被轉發到碼頭工機器的端口80。這是linux上的本地主機,或者Mac和Windows上的docker-machine ip。你可以用控制檯命令docker-machine ip找到這個IP地址。

我們在mysql容器上做同樣的事情,以便我們直接使用Mysql Workbench這樣的工具訪問mysql。你可以閱讀官方mysql容器允許的環境變量以及它們的功能。

對於fpm我們有links,如果需要與數據庫交談。在這種情況下,數據庫的主機名只是「數據庫」。

logging項目不是必需的,只是個人偏好讓日誌輸出變得過度。

將所有這些設置好後,您就可以用docker-compose up調出環境。如果您想查看容器的外觀,可以在運行容器上使用docker-compose exec fpm bash獲得外殼,將「fpm」替換爲您要查看的容器的名稱。需要注意的是容器必須包含bash二進制文件。所有這些在這裏都有,但有些容器沒有。

我希望這給出了足夠的PHP特定的示例來幫助您圍繞Docker類型的作品進行包裝。我會建議重新閱讀Docker和Docker Compose的文檔。如果您有興趣構建自己的容器,我還建議閱讀Dockerfiles官方圖片。 The docs有鏈接到Docker團隊認爲是示例的Dockerfiles。

+0

不能要求更好的答案非常感謝你的時間。 – John