docker-compose 子目录编译、运行
公司开发物联网业务,使用Twisted 基于TCP协议开发的上位机服务,使用Django开发的Web后端,虽然是分别开发的,但两个服务之间有一定的耦合,比如上篇【基于Django & Channels & WebSocket & Twisted的物联网远程控制】就需要Web后端和Twisted共同完成,而Twisted上位机接收到下位机但上传数据后,是异步调用了Web后端进行数据入库的,所以两个服务还是一块启动的,再加上Redis, Postgresql数据库服务等,最终选择使用Docker Compose 一块发布管理。
两个服务是分开开发的,也就要放在不同的目录中。
1 | iot |
docker-compose.yml文件内容
1 | version: '3' |
tcp/Dockerfile
和 web/Dockerfile
的内容都是一样的,所不同的就是各自目录下的代码。1
2
3
4
5
6
7FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
ADD . /code/
这里讲一下需要注意的两个地方:
- docker-compose.yml中build后要加上目录,也可以用
context
参数指定 - 特别需要注意的,各个服务需要添加自己的volumes,也就是示例中的
1
2
3
4volumes:
- ./web:/code
volumes:
- ./tcp:/code
不然虽然能正常生成container,但运行的时候/code
下内容趋势iot
目录,不是单个服务下但目录代码,导致不能正常运行。
参考
[1]. Docker Tip #10: Project Structure With Multiple Dockerfiles and Docker Compose