我们如何使用不当前目录的子项目的项目和路径来引入docker服务并构建容器?
示例:
/ application-a <- needs api01 & api03 (not api02)
- .git
- docker-compose.yml
/ src
/ application-a <- needs api01 & api02 (not api03)
- .git
- docker-compose.yml
/ src
/ api01
- .git
- Dockerfile
/ src
/ api02
- .git
- Dockerfile
/ src
/ api03
- .git
- Dockerfile
/ src
我尝试的每条路径都会导致错误。大多数错误都在抱怨背景。
我们公司正在使用Express将大约50个Web服务从.NET移植到微服务。但是,并非所有前端和消费应用程序都需要访问所有后端服务。我们还希望限制只访问那些需要访问的项目和回购。
目标是让用户签出他们需要的api服务,然后检查他们正在处理的一个主要应用程序。源文件夹最终会在开发人员的笔记本电脑上相互平行。
我会爱在相关应用程序的docker-compose.yml
内执行此操作...
version: '2'
services:
api01:
build:
context: ..
container_name: api01
command:
bash -c "npm install && nodemon"
volumes:
- app01/src:/var/www
working_dir: /var/www
ports:
- "3000"
networks:
- backend
api02:
build:
context: ..
container_name: api02
command:
bash -c "npm install && nodemon"
volumes:
- app02/src:/var/www
working_dir: /var/www
ports:
- "3000"
networks:
- backend
networks:
backend:
driver: bridge
提前谢谢。
答案 0 :(得分:0)
将目录名称添加到context:
和volumes:
路径似乎可以解决此问题:
version: '2'
services:
api01:
build:
context: ../app01
container_name: api01
command:
bash -c "npm install && nodemon"
volumes:
- ../app01/src:/var/www
working_dir: /var/www
ports:
- "3000"
networks:
- backend
答案 1 :(得分:0)
我建议采用略有不同的方法。我使用了一个元库 - 基本上是一个包含其他存储库的外部存储库。
以下是几个实现: https://github.com/mateodelnorte/meta http://gitslave.sourceforge.net/
您可以拥有多个元存储库,其中包含子存储库的不同子集。如果它们重叠就没问题。在这个meta repo里面是放置docker-compose文件的理想场所。
您的开发人员的工作流程如下:
meta git clone git@github.com:yourOrg/project-name.git
cd project-name
docker-compose up
你的docker-compose.yml文件看起来像这样:
version: "2"
networks:
service:
site:
services:
rabbitmq:
image: rabbitmq
hostname: rabbitmq
networks:
- service
redis:
image: redis
networks:
- service
mongo:
image: mongo
networks:
- site
site:
build: ./nycnode-site
ports:
- "3000:3000"
volumes:
- ./nycnode-site:/home/app/site
- /home/app/site/node_modules
environment:
- MONGO_URI=mongodb://mongo:27017/nycnode
- NODE_ENV=development
networks:
- site
meetup-ingestor:
build: ./nycnode-meetup-ingestor
volumes:
- ./nycnode-meetup-ingestor:/home/app/meetup-ingestor
- /home/app/meetup-ingestor/node_modules
environment:
- RABBITMQ_URL=amqp://rabbitmq:5672
- REDIS.HOST=redis
- NODE_ENV=development
networks:
- service
user-ingestor:
build: ./nycnode-user-ingestor
volumes:
- ./nycnode-user-ingestor:/home/app/user-ingestor
- /home/app/user-ingestor/node_modules
environment:
- RABBITMQ_URL=amqp://rabbitmq:5672
- REDIS.HOST=redis
- NODE_ENV=development
networks:
- service
youtube-ingestor:
build: ./nycnode-youtube-ingestor
volumes:
- ./nycnode-youtube-ingestor:/home/app/youtube-ingestor
- /home/app/youtube-ingestor/node_modules
environment:
- RABBITMQ_URL=amqp://rabbitmq:5672
- REDIS.HOST=redis
- NODE_ENV=development
networks:
- service
denormalizer:
build: ./nycnode-denormalizer
volumes:
- ./nycnode-denormalizer:/home/app/denormalizer
- /home/app/denormalizer/node_modules
ports:
- "3001:3001"
environment:
- RABBITMQ_URL=amqp://rabbitmq:5672
- REDIS.HOST=redis
- MONGO_URL=mongodb://mongo:27017/nycnode
- NODE_ENV=development
networks:
- service
- site
此外,没有什么能阻止你拥有多个docker-compose.yml文件。
您可以使用-f
标记
docker-compose -f docker-compose-subset-A.yml up