2017-07-09 57 views
0

我想爲我的應用程序依賴LEMP堆棧設置Docker。爲此,我計劃使用Docker組合來爲Nginx生成一個容器,一個用於PHP-FPM,一個用於MySQL。Docker組合爲Nginx/PHP-FPM /作曲家

這對於在線教程中的基本插圖用例非常有效,但是當我嘗試將其應用於我的用例時,我遇到了一個設計問題。爲了給出一點上下文,我的web應用程序依賴於Composer for PHP依賴性和Gulp + Bower for CSS/JS依賴性(以及LESS編譯,資產最小化等)。

問題是我需要構建應用程序(即安裝所有依賴項並運行一些吞吐任務),並將此構建的結果提供給Nginx和PHP-FPM容器。

這是我來到這麼遠:

泊塢窗,compose.yml:

version: "3" 

networks: 
    database: 
    server: 

volumes: 
    mysql-data: 
    source: 

services: 
    php: 
    build: . 
    volumes: 
     - source:/app:ro 
    restart: always 
    networks: 
     - database 
     - server 
    depends_on: 
     - mysql 

    mysql: 
    image: mysql:5.7 
    volumes: 
     - mysql-data:/var/lib/mysql 
    restart: always 
    networks: 
     - database 
    environment: 
     MYSQL_ROOT_PASSWORD: rootpassword 
     MYSQL_USER: test 
     MYSQL_PASSWORD: test 
     MYSQL_DATABASE: test 

    nginx: 
    image: nginx 
    volumes: 
     - source:/app:ro 
    restart: always 
    networks: 
     - server 
    depends_on: 
     - php 

Dockerfile:

FROM php:7.1-fpm 
WORKDIR /app 

# Install dependencies 
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - 
RUN apt-get update && apt-get install -y \ 
    git \ 
    nodejs \ 
    zip 
RUN curl -sL https://getcomposer.org/installer | php -- --install-dir /usr/bin --filename composer 

# Get application dependencies 
COPY composer.json ./ 
RUN composer install -o 

COPY package.json gulpfile.js bower.json ./ 
RUN npm install 
RUN npm run gulp 
RUN npm run rev 

# Copy application 
COPY . ./ 

然而,由於碼頭工人初學者,我不確定依靠捲來構建應用程序的結果還是構建步驟是正確的運行應用程序的其中一個容器的一部分。

在此先感謝您的任何幫助或建議!

薩科

回答

0

看看本作PHP7-FPM - NGINX - MySQL的 - ELK:https://github.com/maxpou/docker-symfony 這對集裝箱管理:https://portainer.io

我的定製與節點/咕嘟咕嘟

/php7-泊塢窗文件FPM/Dockerfile

FROM php:7.0-fpm 

RUN apt-get update && apt-get install -y \ 
    git \ 
    unzip \ 
    wget \ 
    ntp 

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - 
RUN apt-get install -y nodejs 
RUN npm config set registry "http://registry.npmjs.org/" 
RUN npm install -g gulp bower 

# Install Composer 
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 
RUN composer --version 

# Set timezone 
RUN rm /etc/localtime 
RUN ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime 
RUN "date" 

# Type docker-php-ext-install to see available extensions 
RUN docker-php-ext-install pdo_mysql 

RUN apt-get update && apt-get install -y \ 
     libfreetype6-dev \ 
     libjpeg62-turbo-dev \ 
     libmcrypt-dev \ 
     libpng12-dev \ 
    && docker-php-ext-install -j$(nproc) iconv mcrypt \ 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
    && docker-php-ext-install -j$(nproc) gd 

# install xdebug 
#RUN pecl install xdebug 
#RUN docker-php-ext-enable xdebug 
#RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 

RUN apt-get update \ 
    && apt-get -y install \ 
      libmagickwand-dev \ 
     --no-install-recommends \ 
    && pecl install imagick \ 
    && docker-php-ext-enable imagick \ 
    && rm -r /var/lib/apt/lists/* 

RUN echo "file_uploads = On\n" \ 
     "memory_limit = 500M\n" \ 
     "upload_max_filesize = 500M\n" \ 
     "post_max_size = 500M\n" \ 
     "max_execution_time = 600\n" \ 
     > /usr/local/etc/php/conf.d/uploads.ini 

RUN echo "realpath_cache_ttl = 7200\n" \ 
      "realpath_cache_size = 4M\n" \ 
     > /usr/local/etc/php/conf.d/opti-symfony.ini 

RUN echo "date.timezone=Europe/Paris" \ 
     > /usr/local/etc/php/conf.d/time-zone.ini 

RUN docker-php-ext-install opcache 

WORKDIR /var/www/symfony 

如果你有一個錯誤給我們;)

快樂泊塢

1

然而,由於碼頭工人初學者,我不知道這是正確的依賴於應用程序的構建結果的捲上,或有構建步驟的一個組成部分運行應用程序的容器。

簡短回答:命名卷是正確的方法來處理此問題。

在以前版本的撰寫中,您可以使用volumes-from選項來引用不同容器中的現有卷。這在v3中已被棄用,正在被您看起來正在實施的命名卷取代。我提到volumes-from,因爲我認爲它在展示卷的意圖方面做得很好 - 在容器之間持久化數據 - 其中命名卷的描述性較小。