从同一节点项目运行2个不同的容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从同一节点项目运行2个不同的容器相关的知识,希望对你有一定的参考价值。

我有一个节点项目,在根目录上有一个Web服务器和一个服务。

--myNodeProj
  --app.js //the web server
  --service.js //an update service

在我的package.json中,我有以下内容:

"scripts": 
    "start": "node app.js",
    "service": "node service.js"
  ,

对于我的DockerFile,我有:

FROM node:8

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

CMD将运行app.js(webserver)。如何使用该服务构建另一个容器?我是否创建了另一个Dockerfile? docker build命令看起来会不同吗?

答案

您可以覆盖命令 - docker run <image> node service.js

https://docs.docker.com/engine/reference/run/#general-form

另一答案

我最终使用docker-compose。您需要使用以下代码创建docker-compose.yml文件:

version: '3'
services:
  web:
    # will build ./docker/web/Dockerfile
    build:
      context: .
      dockerfile: ./docker/web/Dockerfile
    ports:
      - "3000:3000"
    env_file:
      - web.env
  service:
    # will build ./docker/service/Dockerfile
    build:
      context: .
      dockerfile: ./docker/service/Dockerfile
    env_file:
      - service.env

这个文件引用了构建容器的2个Dockerfiles:

为了服务

FROM node:8

# Create app directory
WORKDIR /usr/src/service

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

CMD [ "node", "service.js" ]

对于网络:

FROM node:8

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

#EXPOSE 8080
CMD [ "npm", "start" ]

请注意,我只能进行一次NPM启动。我直接使用node调用服务。

当我想构建容器时,我发出命令:

docker-compose build

以上是关于从同一节点项目运行2个不同的容器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用端口号删除 docker 容器

Kubernetes-Pod基本概念(六)

Cassandra 多个节点位于同一服务器上的不同数据中心

关于在同一端口上运行多个应用程序

Kubernetes学习笔记-了解kubernetes机理-同节点/不同节点pod通信20220723

从多个 docker 容器读取/写入同一个文件