php - Docker为Nginx/PHP-FPM/Composer撰写

标签 php nginx docker docker-compose dockerfile

我试图依靠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/

相关文章:

docker - 我可以将kubernetes放在docker容器中吗?

php - 如何将多维数组插入数据库?

php - 使用 PHP mysqli_query 的单个 SELECT 查询的隔离级别

ruby-on-rails - 如何在同一个 ec2 实例中运行两个 unicorn 环境

docker - 使用 nginx 和 docker 测试本地子域

docker - 通过 docker 连接到 vpn 的最佳实践

wordpress - Docker 命名卷位置 Mac

PHP 将主类别移至子类别下

php - 服务器发送的事件 PHP 阻塞流

ruby - 如何通过 Thin/nginx 访问事件机器 websockets?