情境:我想要一个docker结构,我可以在一个公共根目录下拥有不同的项目。 (通常具有平均结构)但使用不同的图像(并非全部在平均图像中)。我想要为我为特定项目创建的容器中共享的所有项目,但只启动我想要的项目配置。该图像只是安装了基本的依赖关系,每个应用程序的模块细节都由docker-compose覆盖安装。
这是我理想的结构:
apps
| +--app1
| | +--node_modules //empty in host
| | +--package.json
| | +--docker-compose.app1.yml //override compose
| | +--index.js
| | +--...
| +--app2
| | +--node_modules //empty in host
| | +--...
| ....
| +--node_modules //global node_modules folder (empty in host)
| docker-compose.yml //principal compose
| Dockerfile //my personalized nodejs image config
我正在使用中间解决方案:
apps
| +--app1
| | +--index.js
| | +--...
| +--app2
| | +--index.js
| | +--...
| ....
| +--node_modules //global for all projects (empty in host)
| docker-compose.yml //principal compose
| docker-compose.app1.yml //override for app1
| docker-compose.app2.yml //override for app2
| ....
| Dockerfile //my personalized nodejs image config
DOCKERFILE
FROM node #base image
# User no root
RUN useradd --user-group --create-home --shell /bin/false apps
ENV HOME=/home/apps #my home folder
# Copy modules config and dependencies
COPY package.json npm-shrinkwrap.json $HOME/
RUN chown -R apps:apps $HOME/ #changing permissions no root user
WORKDIR $HOME
RUN npm install #install modules
RUN npm cache clean #clean cache
# user no root active
USER apps
Docker-compose
version: "2"
services:
web:
build: .
image: myNodejs:0.1
container_name: my_nodejs
volumes:
- .:/home/apps #sharing my host route with the container
- /home/apps/curso_mean/node_modules # route to node_modules
Docker-compose.app1
version: "2"
services:
web:
container_name: app1
command: node app1/index.js
ports:
- "3000:3000"
environment:
- NODE_ENV=development
启动app1的命令
docker-compose -f docker-compose.yml -f docker-compose.app1.yml up -d
这里的问题是我对所有项目都有相同的node_modules并安装在映像中(我更喜欢在compose中安装)但我只使用一个映像,我可以为每个项目配置不同的配置。 / p>
问题