这次准备用docker-compose来搭建基本的node 前端开发环境
基本目录结构
λ ll |
docker-compose.yml
version: '3' |
- 基础nodejs服务
web-dev
,源码放在project下
web-dev 的dockerfile这次直接用了node:6这个版本几百MB,对容器内暴露为8000端口FROM node:6
ENV HOME=/code
ENV NPM_CONFIG_LOGLEVEL warn
COPY package.json $HOME/
WORKDIR $HOME
RUN npm install
COPY . $HOME/
EXPOSE 8000
CMD ["npm", "start"]
上面的compose里有把这个8000端口暴露给了本地
volumes:
- ./project:/code - /code/node_modules
这个配置是把本地的源码mount到容器里面,这样在本地更改源码也会映射到里面,并触发里面的webpack hotreload,这样就能够让开发环境代码更新,node_module这个mount是吧container里面npm install后生成的依赖挂载出来,以免程序中的依赖找不到
web-test
源码放在test目录下
由于本地开发的时候需要自己做假数据测试,和后端接口开发工作分离,所有我习惯有个测试的node服务,自己写接口来做数据接收和返回.dockerfile和dev一致
这里对容器内暴露3000端口是因为webpack里的proxy设置这里直接用web-test(服务名) 为域名进行访问
注意这里的host要设置为 ‘0.0.0.0’
dev中webpack配置proxy: {
'/stereo': 'http://stereo-dev.fenbeijinfu.com',
'/test': 'http://web-test:3000'
},
host:'0.0.0.0', // Defaults to `localhost`
port:8000 // Defaults to 8080depends_on参数是说 web-dev 这个服务是依赖于web-test,这样就会让web-test先于web-dev启动
兼容问题
这个node基本项目里用了rxjs这个库,但发现用es6的方式引入的部分operator会找不到
// import { Observable } from 'rxjs/Observable' |
后来改为这样才能找到,我猜测为linux上某些包,甚至是node和我mac上的不一样导致的,因为不是所有都找不到,例如forkjoin这个就不行
启动整个环境
- 这次就不需要一个一个启动了,也不需要在启动的时候注意顺序了
- docker-compose up 就可以看到两个容器按预期的顺序启动了,并且8000端口可以看到页面,里面的测试api也能正常访问到测试服务的接口