Halo, kalau kamu merasa tulisan saya ngebantu kamu, kamu bisa ucapkan terima kasih lewat saweria.

Hello, if you find this article helpful, you can express your gratitude through saweria.



Ini saya ambil dari jawaban Stackoverflow - Mongo container with a replica set with only one node in docker-compose, setelah seharian mencari dan ga dapat tutorial yang works, jadi saya tulis saja disini.


Kasus

Perlu Mongo Replica tapi ga ada resource (cuma ada 1 server/mau coba di local laptop aja)


Mongo Cluster

  1. Buat Dockerfile, isi dengan
#since i only need mongo5, i didnt test with another version
FROM mongo:5.0
RUN echo "rs.initiate({'_id':'rs-test', members: [{'_id':1, 'host':'127.0.0.1:27017'}]});" > "/docker-entrypoint-initdb.d/init_replicaset.js"
#create key file, it a must!
RUN echo "12345678euysusahbingit" > "/tmp/key.file"
RUN chmod 600 /tmp/key.file
RUN chown 999:999 /tmp/key.file

CMD ["mongod", "--replSet", "rs-withdraw", "--bind_ip_all", "--keyFile", "/tmp/key.file"]
  1. Buat docker-compose.yml
services:
  mongo-replica:
    build: .
    image: mongo-replica
    container_name: mongo-1
    restart: always
    logging:
      driver: none
    ports:
      - 27017:27017
    healthcheck:
      test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo -u usernameKamu -p passWord --quiet) -eq 1
      interval: 10s
      start_period: 30s
    environment:
      MONGO_INITDB_ROOT_USERNAME: usernameKamu
      MONGO_INITDB_ROOT_PASSWORD: passWord
      MONGO_INITDB_DATABASE: testDB
    deploy:
      resources:
        limits:
          memory: 1G
    networks:
      - mongo-net

networks:
  mongo-net:
    name: mongo-replica-net
  1. Jalankan docker compose up -d
Single Instance Read as Primary

Single Instance Read as Primary