,假设我们有三个服务 -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服务共享./webroot
。docker-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端口并将请求重定向到指定容器的服务器。