Docker:仅从一个图像创建多个容器

时间:2016-07-15 16:29:14

标签: node.js docker docker-compose

情境:我想要一个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>

问题

  • 可能有第一个结构吗?
  • 是否可以在docker-compose覆盖中安装特定模块执行多个命令或其他方式并保持全局node_modules安装在映像中?

0 个答案:

没有答案