Skip to content

egbakou/NoSQL.MongoDB.Api

Repository files navigation

Documentation

Run MongoDB locally

Difference between mongo and mongodb/community-server : r/mongodb (reddit.com)

services:
  nosqlmongodbapi:
    container_name: nosqlmongodbapi
    image: nosqlmongodbapi
    build:
      context: .
      dockerfile: NoSQL.MongoDB.Api/Dockerfile
    ports:
        - "8082:8080"
        - "8083:8081"
    environment:
        - ASPNETCORE_ENVIRONMENT=Development
        # https://www.mongodb.com/docs/manual/reference/connection-string/#connection-string-components
        # when using specific user other than admin, database name should be specified and authSource should not be used
        - MongoDB__ConnectionString=mongodb://dev:S3cr3tPFGDdcv34@mongo:27017/sample_mflix
        - MongoDB__Database=sample_mflix
    depends_on:
      - mongo
  
  # mongo
  mongo:
    container_name: mongo
    image: bitnami/mongodb:latest
    ports:
      - "27017:27017"
    environment:
      - MONGODB_DATABASE=sample_mflix
      - MONGODB_ROOT_USERNAME=root
      - MONGODB_ROOT_PASSWORD=S3cr3tPFGDssw0rd
    volumes:
      - mongo-data:/bitnami/mongodb
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js
  
  # mongo-express
  mongo-express:
    container_name: mongo-express
    image: mongo-express
    ports:
      - "8081:8081"
    environment:
      - ME_CONFIG_MONGODB_SERVER=mongo
      - ME_CONFIG_MONGODB_PORT=27017
      - ME_CONFIG_BASICAUTH_USERNAME=admin
      - ME_CONFIG_BASICAUTH_PASSWORD=StrongPassword
      - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
      - ME_CONFIG_MONGODB_ADMINUSERNAME=root
      - ME_CONFIG_MONGODB_ADMINPASSWORD=S3cr3tPFGDssw0rd


volumes:
    mongo-data: {}

mongosh Methods - MongoDB Manual v7.0

// mongo-init.js is the script that will be run when the container is started. https://stackoverflow.com/questions/63172735/mongodb-database-could-not-be-created-on-docker-container-startup

// https://www.mongodb.com/docs/manual/reference/method/
// Move to the admin database, always created by default: https://stackoverflow.com/a/68253550
db = db.getSiblingDB('admin');
// log in as the root user
db.auth('root', 'S3cr3tPFGDssw0rd');

// create and move to the new database
db = db.getSiblingDB('sample_mflix');

// create the user with read and write access
db.createUser({
    user: 'dev',
    pwd: 'S3cr3tPFGDdcv34',
    roles: [
        {
            role: 'readWrite',
            db: 'sample_mflix'
        }
    ]
});

// create the collection
db.createCollection('movies');
db.createCollection('actors');

bitnami/mongodb could be replaced by mongo(The Official docker image maintained by the Docker community)

  # mongo
  mongo:
    container_name: mongo
    image: mongo:7.0.10-rc0-jammy
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=S3cr3tPFGDssw0rd
      - MONGO_INITDB_DATABASE=sample_mflix
    volumes:
      - mongo-data:/data/db
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js

Replication

how to run mongodb replica set in docker compose - Stack Overflow

containers/bitnami/mongodb/README.md at main · bitnami/containers (github.com)

https://stackoverflow.com/a/76985800

General Connection Tab - MongoDB Compass

services:
    nosqlmongodbapi:
        container_name: nosqlmongodbapi
        image: nosqlmongodbapi
        build:
            context: .
            dockerfile: NoSQL.MongoDB.Api/Dockerfile
        ports:
            - "127.0.0.1:8082:8080"
            - "127.0.0.1:8083:8081"
        environment:
            - ASPNETCORE_ENVIRONMENT=Development
            # https://www.mongodb.com/docs/manual/reference/connection-string/#connection-string-components
            - MongoDB__ConnectionString=mongodb://dev:S3cr3tPFGDdcv34@mongodb-primary:27017/sample_mflix?authSource=sample_mflix
            - MongoDB__Database=sample_mflix
    mongodb-primary:
        container_name: mongo-primary
        image: bitnami/mongodb:7.0.9
        ports:
            - "27017:27017"
        environment:
            - MONGODB_ADVERTISED_HOSTNAME=mongodb-primary
            - MONGODB_REPLICA_SET_MODE=primary
            - MONGODB_REPLICA_SET_NAME=rs0
            - MONGODB_REPLICA_SET_KEY=replicasetkey
            - MONGODB_DATABASE=sample_mflix
            - MONGODB_ROOT_USERNAME=root
            - MONGODB_ROOT_PASSWORD=S3cr3tPFGDssw0rd
        volumes:
            - mongodb-primary-data:/bitnami/mongodb
            - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js
    
    mongodb-secondary:
        container_name: mongo-secondary
        image: bitnami/mongodb:7.0.9
        ports:
            - "27027:27017"
        environment:
            - MONGODB_ADVERTISED_HOSTNAME=mongodb-secondary
            - MONGODB_REPLICA_SET_MODE=secondary
            - MONGODB_REPLICA_SET_NAME=rs0
            - MONGODB_REPLICA_SET_KEY=replicasetkey
            # primary info
            - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
            - MONGODB_INITIAL_PRIMARY_PORT=27017
            - MONGODB_INITIAL_PRIMARY_ROOT_USERNAME=root
            - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=S3cr3tPFGDssw0rd
        volumes:
            - mongodb-secondary-data:/bitnami/mongodb
        depends_on:
            -   mongodb-primary
    
    mongo-express:
        container_name: mongo-express
        image: mongo-express
        ports:
            - "127.0.0.1:8081:8081"
        environment:
            - ME_CONFIG_MONGODB_SERVER=mongo-primary
            - ME_CONFIG_MONGODB_PORT=27017
            - ME_CONFIG_BASICAUTH_USERNAME=admin
            - ME_CONFIG_BASICAUTH_PASSWORD=StrongPassword
            - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
            - ME_CONFIG_MONGODB_ADMINUSERNAME=root
            - ME_CONFIG_MONGODB_ADMINPASSWORD=S3cr3tPFGDssw0rd

volumes:
    mongodb-primary-data: {}
    mongodb-secondary-data: {}