繁体   English   中英

如何使用Docker为每个服务创建mongo数据库

[英]How to create a mongo database per service with Docker

我正在努力拥有多个服务(NodeJS,Spring-boot),每个服务都有自己的MongoDB每服务数据库服务器(最终针对GCP和K8),以便我可以将数据分开。 我将使用Docker compose一起启动服务和数据库。 但是,当我运行多个服务时,自然会遇到端口冲突。 这是一个典型的docker-compose文件:

version: '3'

# Define the services/containers to be run
services:
  myapp: #name of your service
    build: ./ # specify the directory of the Dockerfile
    ports:
      - "3000:3000" #specify ports forwarding
    links:
      - database # link this service to the database service
    volumes:
      - .:/usr/src/app
    depends_on:
      - database

  database: # name of the service
    image: mongo # specify image to build container from
    volumes:
        - ./data:/data/db
    ports:
        - "27017:27017"

我正在寻找如何执行此操作的示例。 我的想法是,每个撰写文件都将拥有自己的端口,每个服务都将在内部映射到那些端口?

您可以YAML部署和解释一个吊舱所有的容器(一个吊舱是一组容器)。 您的部署可能如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: application-deployment
  labels:
    app: application
spec:
  selector:
    matchLabels:
      app: application
  template:
    metadata:
      labels:
        app: application
    spec:
      containers:
      - name: application
        image: application:version
        ports:
        - containerPort: 3000
      name: database
        image: database:version
        ports:
        - containerPort: 27017

它只是在集群内部部署。 您需要将其公开到集群之外。 我建议您为此使用Ingress

在这里,您将在pod内拥有数据库。 您也可以在同一名称空间中为数据库和您的应用程序创建2个部署。

另外,您需要手动构建Docker映像或为此使用CI工具。 您可以通过名称空间管理环境(prod,pre-prod,dev,test)。 一个环境的一个名称空间将为您提供完全隔离。 另外,要管理所有这些,我建议您使用Helmkops之类的工具。

Kubernetes和Docker-compose之间有很多区别,但主要区别是设计。 在Kubernetes中,每个应用程序级别都有更多实体,您可以对其进行管理。 在Docker-compose中,您将所有服务都配置在一处,通常很难管理某些特定的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM