如何使用docker-composer运行node js docker container来管理php app资产

时间:2018-02-20 13:27:55

标签: node.js docker docker-compose

让我们说我们有三项服务   - 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

我不确定这是正确的策略,我正在与网络和节点服务共享./webrootdocker-compose up -d只启动mysql和web,无法启动节点容器,可能没有设置有效的入口点。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您想将节点js与PHP服务分开使用,则必须另外设置两个选项以使节点保持正常运行,一个是stdin_open,另一个是tty,像下面这样

stdin_open: true
tty: true

这等效于CLI命令-it,例如波纹管

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

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

ports:
  - 3000:3000

端口结构为systemPort:containerInnerPort

这意味着将端口3000从节点容器内部发布到系统上的端口3000,以另一种方式使容器内部的端口3000可以在系统上访问,并且可以像localhost:3000一样访问此端口。

最后,您的节点服务将像下面这样

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