我正在尝试依靠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初学者,我不确定依赖卷来获取应用程序的构建结果,或者让构建步骤成为运行应用程序的其中一个容器的一部分。
提前感谢您的任何帮助或建议!
尼古拉斯
答案 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