支持:在另外一個 docker-componse app 內訪問集羣支持:在宿主機訪問集羣node
事務功能須要集羣nginx
讀寫分離,異地容災git
docker-compose.yml
version: '3' services: mongo1: hostname: mongo1 container_name: localmongo1 image: mongo restart: always expose: - 27017 ports: - 27017:27017 command: '--quiet --bind_ip_all --port 27017 --replSet rs0' volumes: - ./db1/mongo:/data/db #environment: #MONGO_INITDB_ROOT_USERNAME: root #MONGO_INITDB_ROOT_PASSWORD: root networks: - default - nginx-proxy mongo2: hostname: mongo2 container_name: localmongo2 image: mongo restart: always expose: - 27018 ports: - 27018:27018 command: '--quiet --bind_ip_all --port 27018 --replSet rs0' volumes: - ./db2/mongo:/data/db #depends_on: #- mongo1 networks: - default - nginx-proxy mongo3: hostname: mongo3 container_name: localmongo3 image: mongo restart: always expose: - 27019 ports: - 27019:27019 command: '--quiet --bind_ip_all --port 27019 --replSet rs0' volumes: - ./db3/mongo:/data/db #depends_on: #- mongo2 networks: - default - nginx-proxy rsinit: build: context: . dockerfile: rsinit depends_on: - mongo1 - mongo2 - mongo3 entrypoint: ["sh", "-c", "rs.sh"] networks: - default - nginx-proxy networks: nginx-proxy: external: true
rs.sh
#!/bin/bash echo "prepare rs initiating" check_db_status() { mongo1=$(mongo --host mongo1 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s)1($|\s)') mongo2=$(mongo --host mongo2 --port 27018 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s)1($|\s)') mongo3=$(mongo --host mongo3 --port 27019 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s)1($|\s)') if [[ $mongo1 == 1 ]] && [[ $mongo2 == 1 ]] && [[ $mongo3 == 1 ]]; then init_rs else check_db_status fi } init_rs() { ret=$(mongo --host mongo1 --port 27017 --eval "rs.initiate({ _id: 'rs0', members: [{ _id: 0, host: 'mongo1:27017' }, { _id: 1, host: 'mongo2:27018' }, { _id: 2, host: 'mongo3:27019' } ] })" > /dev/null 2>&1) } check_db_status > /dev/null 2>&1 echo "rs initiating finished" exit 0
rsinit
FROM mongo ADD rs.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/rs.sh
運行
docker-compose up --build
中止
docker-compose down
在本機 host 文件添加解析
127.0.0.1 mongo1 127.0.0.1 mongo2 127.0.0.1 mongo3
訪問集羣的鏈接地址
mongodb://mongo1:27017,mongo2:27018,mongo3:27019/?replicaSet=rs0
可選的配置
mongodb://mongo1:27017,mongo2:27018,mongo3:27019/?replicaSet=rs0&slaveOk=true&authSource=admin&readPreference=secondaryPreferred&w=majority&ssl=false
MongoDB Composs 鏈接成功會顯示爲3節點集羣
![]()
Dockerfile
FROM node:12.13.1-alpine3.10 MAINTAINER black #RUN apk add --no-cache curl # create a specific user to run this container #RUN adduser -S -D user-app # add files to container #ADD . /app # specify the working directory WORKDIR /app RUN chmod -R 777 /app # build process #RUN npm install #RUN npm run build #RUN npm prune --production # run the container using a specific user #USER user-app #EXPOSE 8080 # run application #CMD ["npm", "start"]
docker-compose.yml
version: '3.7' services: graphql: build: context: ./ dockerfile: Dockerfile command: 'npm run start' #environment: #UV_THREADPOOL_SIZE: 128 #NODE_APP_INSTANCE: 0 #NODE_ENV: docker #DB_URL: postgres://root:123@postgres/project expose: - 4000 ports: - "80:4000" volumes: #- ./:/usr/src/app/ - ./:/app/ networks: - default - nginx-proxy networks: nginx-proxy: external: true
運行
docker-compose up --build
中止
docker-compose down
原文地址 : https://github.com/WangShuXia...