Docker构成了Nginx / PHP-FPM / Composer

时间:2017-07-09 08:22:21

标签: php nginx docker docker-compose dockerfile

我正在尝试依靠LEMP堆栈为我的应用程序设置Docker。为此,我计划使用Docker compose为Nginx生成一个容器,一个用于PHP-FPM,一个用于MySQL。

这对于在线教程中的基本插图用例来说效果很好,但是当我尝试将它应用到我的用例时,我很难解决设计问题。

为了给出一些上下文,我的Web应用程序依赖于Composer for PHP依赖项和Gulp + Bower for CSS / JS依赖项(以及LESS编译,资产最小化等)。

问题是我需要构建应用程序(即安装所有依赖项并运行一些gulp任务)并将此构建的结果提供给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 . ./

但是,作为Docker初学者,我不确定依赖卷来获取应用程序的构建结果,或者让构建步骤成为运行应用程序的其中一个容器的一部分。

提前感谢您的任何帮助或建议!

尼古拉斯

2 个答案:

答案 0 :(得分:1)

  

但是,作为Docker初学者,我不确定依赖卷来获取应用程序的构建结果,或者让构建步骤成为运行应用程序的其中一个容器的一部分。

简短回答:命名卷是处理此问题的正确方法。

在以前版本的compose中,您可以使用volumes-from选项引用其他容器中的现有卷。这在v3中已弃用,由您似乎正确实现的命名卷替换。我提到volumes-from,因为我认为它很好地展示了卷的意图 - 在容器之间保存数据 - 命名卷的描述性稍差。

答案 1 :(得分:0)

请看PHP7-FPM - NGINX - MySQL - ELK:https://github.com/maxpou/docker-symfony 这适用于容器管理:https://portainer.io

带有Node / Gulp的自定义docker文件

/ PHP7-FPM / Dockerfile

FROM php:7.0-fpm

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

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 \
        libpng-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

如果您有错误,请提供给我们;)

快乐的Docker