我试图依靠LEMP堆栈为我的应用程序设置Docker。为此,我计划使用Docker compose来为Nginx生成一个容器,为PHP-FPM生成一个容器,为MySQL生成一个容器。
对于在线教程中找到的基本插图用例来说,这一切都很好,但是当我尝试将其应用于我的用例时,我就遇到了设计问题。
为了提供一些背景信息,我的Web应用程序依赖于PHP依赖于Composer,依赖于CSS / JS依赖于Gulp + Bower(以及LESS编译, Assets 最小化等)。
问题是我需要构建应用程序(即安装所有依赖项并运行一些gulp任务),并将构建结果提供给Nginx和PHP-FPM容器。
到目前为止,这是我得出的结论:
docker-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初学者,我不确定依靠卷来获取应用程序的构建结果,还是让构建步骤成为运行该应用程序的容器之一的一部分是不正确的。
预先感谢您的任何帮助或建议!
尼古拉斯
最佳答案
However, as a Docker beginner, I am not sure it is right to rely on a volume for the build result of the application, or to have the build steps part of one of the containers running the application.
简短答案:命名卷是处理此问题的正确方法。
在早期版本的compose中,您将使用
volumes-from
选项来引用其他容器中的现有卷。在v3中已弃用该功能,而已替换为您似乎已正确实现的命名卷。我之所以提到volumes-from
,是因为我认为它很好地表现了卷的意图-在容器之间持久保存数据-其中命名卷的描述较少。
关于php - Docker为Nginx/PHP-FPM/Composer撰写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44994418/