如何使用Docker-Composer运行Node js Docker容器来管理PHP App Assets



,假设我们有三个服务 -PHP Apache - mysql -nodejs

我知道如何使用Docker-Compose设置应用程序将MySQL与PHP Apache服务链接。我想知道我们如何添加node.js服务只是为了管理JS/CSS资产。Node.js服务的目的是仅管理JavaScript/CSS资源。由于Docker提供了这种灵活性,因此我想知道使用Docker服务而不是在我的主机计算机上设置Node.js。

version: '3.2'
services:
  web:
    build: .
    image: lap
    volumes:
      - ./webroot:/var/www/app
      - ./configs/php.ini:/usr/local/etc/php/php.ini
      - ./configs/vhost.conf:/etc/apache2/sites-available/000-default.conf
    links:
      - dbs:mysql
  dbs:
    image: mysql
    ports:
      - "3307:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=rest
      - MYSQL_DATABASE=symfony_rest
      - MYSQL_USER=restman
    volumes:
      - /var/mysql:/var/lib/mysql
      - ./configs/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
  node:
    image: node
    volumes:
      - ./webroot:/var/app
    working_dir: /var/app

我不确定这是正确的策略,我正在与Web和Node服务共享./webrootdocker-compose up -d仅启动mySQL和Web,并且无法启动节点容器,可能没有有效的入口点集。

如果要使用节点JS与PHP服务分开,则必须设置两个选项以使节点保持启动,一个是stdin_open,另一个是tty,例如Bellow

stdin_open: true
tty: true

这等同于CLI命令-it,例如Bellow

docker container run --name nodeapp -it node:latest

如果您有一个单独的端口来运行节点应用程序(例如,前端与后端完全分开,必须像必须运行npm run start命令一样独立于后端运行它才能运行前端应用程序(,则必须发布您的港口像Bellow

ports:
  - 3000:3000

端口结构是systemPort:containerInnerPort

这意味着从内部节点容器中发布端口3000到系统上的端口3000,另一种方式,您可以在系统上访问容器内部的端口3000,您可以访问此端口,例如localhost:3000

最后,您的节点服务就像Bellow

node:
  image: node
  stdin_open: true
  tty: true
  volumes:
    - ./webroot:/var/app
  working_dir: /var/app

您还可以添加nginx服务到docker-compose,而nginx可以照顾将请求转发到PHP容器或node.js容器。您需要一些绑定到80端口并将请求重定向到指定容器的服务器。

最新更新