Code Monkey home page Code Monkey logo

docker-demo's Introduction

Moleculer logo

Moleculer

Demo project for Docker

This is an example project to try Moleculer with Docker and Kubernetes.

Usage with Docker

Run a container with all services

docker run -e SERVICES=services -p 3000:3000 moleculer/demo

Run every services in an individual container

In this case you should also start a transporter, e.g. NATS.

docker run -d -e SERVICEDIR=services -e SERVICES=greeter moleculer/demo
docker run -d -e SERVICEDIR=services -e SERVICES=products moleculer/demo
docker run -d -e SERVICEDIR=services -e SERVICES=api -p 3000:3000 moleculer/demo

Usage with Docker Compose

This command starts all services in individual containers, a NATS server as transporter, a MongoDB server & Traefik as reverse proxy.

docker-compose up -d

Usage with Docker Swarm

This command starts all services in individual containers, a NATS server as transporter, a MongoDB server & Traefik as reverse proxy.

docker stack deploy -c docker-compose.yml moleculer

Usage with Kubernetes

This command starts all services in individual pods, a NATS server as transporter, a MongoDB server and register an ingress for API service via http://moleculer.127.0.0.1.nip.io/ URL.

kubectl apply -f https://raw.githubusercontent.com/moleculerjs/docker-demo/master/k8s.yaml

Result

NAME                                           READY   STATUS    RESTARTS   AGE
pod/nats-6c745f949b-8g994                      1/1     Running   0          23h
pod/moleculer-demo-api-6958b5475b-5qfxx        1/1     Running   0          4h37m
pod/moleculer-demo-greeter-6c875544b6-jbcjf    1/1     Running   0          4h37m
pod/moleculer-demo-greeter-6c875544b6-fx829    1/1     Running   0          4h37m
pod/moleculer-demo-api-6958b5475b-mwbc8        1/1     Running   0          4h36m
pod/mongo-555c4f494f-xjvx8                     1/1     Running   0          3h15m
pod/moleculer-demo-products-784446b876-fdlrz   1/1     Running   0          3h8m
pod/moleculer-demo-products-784446b876-5qfrc   1/1     Running   0          3h8m

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
service/nats    ClusterIP   10.43.193.134   <none>        4222/TCP    23h
service/api     ClusterIP   10.43.121.57    <none>        3000/TCP    22h
service/mongo   ClusterIP   10.43.80.140    <none>        27017/TCP   3h15m

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nats                      1/1     1            1           23h
deployment.apps/moleculer-demo-greeter    2/2     2            2           23h
deployment.apps/moleculer-demo-api        2/2     2            2           23h
deployment.apps/mongo                     1/1     1            1           3h15m
deployment.apps/moleculer-demo-products   2/2     2            2           4h37m

NAME                                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/nats-6c745f949b                      1         1         1       23h
replicaset.apps/moleculer-demo-greeter-6c875544b6    2         2         2       4h37m
replicaset.apps/moleculer-demo-api-6958b5475b        2         2         2       4h37m
replicaset.apps/mongo-555c4f494f                     1         1         1       3h15m
replicaset.apps/moleculer-demo-products-784446b876   2         2         2       3h8m

If you don't have installed ingress controller, execute this script to install Nginx Ingress Controller.

If you don't have installed storage controller, execute this script to install Longhorn Storage Controller.

Services

  • api: API Gateway services
  • calc: Sample service with heavy mathematical calculation to test auto scaling of K8s.
  • greeter: Sample service with hello and welcome actions.
  • products: Sample DB service with MongoDB if process.env.MONGO_URI is defined, otherwise with NeDB.

Test the running project

In case of Docker or Docker Compose

export HOSTNAME=127.0.0.1:3000

In case of Kubernetes

export HOSTNAME=moleculer.127.0.0.1.nip.io

Call the greeter.hello action

curl http://$HOSTNAME/api/hello

Call the greeter.welcome action with params

curl http://$HOSTNAME/api/greeter/welcome?name=Moleculer

Create a product item

curl -X POST -H "Content-Type: application/json" -d '{"name": "Samsung Galaxy S10", "category": "phones", "price": 299.99, "quantity": 10}' http://$HOSTNAME/api/products

List all products

curl http://$HOSTNAME/api/products

Connect from CLI

  1. Port forwarding the NATS service port
    kubectl port-forward --address 0.0.0.0 service/nats 4222

    If you have firewall, don't forget to allow this port.

  2. Connect to the deployed application from Moleculer CLI
    moleculer connect nats://<YOUR-CLUSTER-IP-ADDRESS>:4222

Horizontal Pod Auto Scaling

The deployment script contains a HorizontalPodAutoscaler definition for the calc service. It scales the number of calc service pod between 2 and 5 by CPU usages.

Benchmark the calc.pi action to increase the CPU usages to trigger the K8s Horizontal Pod Autoscaler:

ab -c 5 -n 500 http://moleculer.127.0.0.1.nip.io/api/pi

License

This project is available under the MIT license.

Contact

Copyright (c) 2016-2020 MoleculerJS

@moleculerjs @MoleculerJS

docker-demo's People

Contributors

icebob avatar mhm0ud avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.