让我们说我们有三项服务 - 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
我不确定这是正确的策略,我正在与网络和节点服务共享./webroot
。 docker-compose up -d
只启动mysql和web,无法启动节点容器,可能没有设置有效的入口点。
答案 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