• 使用Docker一键部署MongoDB


    使用Docker一键部署MongoDB

    作者:Shon
    版本:1.0.2
    最后更新:2018-11-12

    Prerequisites

    本文默认读者具备以下知识,不会对此进行展开:

    • Linux的基础使用
    • MongoDB的基础使用
    • mongo-express的基础使用
    • JavaScript的基础使用
    • Docker的安装与下载
    • Docker Compose的安装与下载

    效果

    通过一条指令sudo docker-compose up -d-d表示在后台运行,如果想要监视Docker容器的运行情况,可不加)达到以下效果:

    • 在本地一个Docker容器中建立并运行MongoDB,端口为27017
    • 在本地一个Docker容器中建立并运行mongo-express,端口为8080
    • 初始化MongoDB:
      • 创建一个新用户,并设置密码和权限
      • 创建一个新的DB
      • 创建一个新的Collection

    mongo-express

    如图,newDB就是我们新建的DB。

    文件结构

    ├── docker-compose.yml
    ├── Dockerfile
    └── setup
        └── setup.js
    
    • 1
    • 2
    • 3
    • 4

    解析

    setup.js

    用于初始化MongoDB。

    db = db.getSiblingDB('newDB');  // 创建一个名为"newDB"的DB
    db.createUser(  // 创建一个名为"shon"的用户,设置密码和权限
        {
            user: "shon",
            pwd: "shonlovescoding",
            roles: [
                { role: "dbOwner", db: "newDB"}
            ]
        }
    );
    db.createCollection("newCollection");  // 在"newDB"中创建一个名为"newCollection"的Collection
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    docker-compose.yml

    用于docker-compose,相较于纯粹的docker指令,减少了在命令行中的参数数量,而选择把对Docker容器的相关配置写在了本文件中

    version: '3.1'  # 与镜像有关,这里只支持3.1
    services:
      mongo:  # 会自动从Docker Hub上自动获取mongo这个镜像
        build: ./
        restart: always
        ports:
          - 27017:27017  # 本地端口(可自定义):容器内默认端口(mongo设定为27017)
        volumes:
          - ./setup:/docker-entrypoint-initdb.d/  # 本地文件路径:容器内映射路径
        environment:  # admin账号和密码
          MONGO_INITDB_ROOT_USERNAME: admin
          MONGO_INITDB_ROOT_PASSWORD: DoNotPeek
      # 如果不需要MongoDB的网页端,以下内容可以不加
      mongo-express:  # 会自动从Docker Hub上自动获取mongo-express这个镜像
        image: mongo-express
        restart: always
        ports:
          - 8080:8081  # 本地端口(可自定义):容器内默认端口(mongo-express设定为8080)
        environment:  # 这里只能使用与上方MONGO_INITDB_ROOT_USERNAME相同的root账号
          ME_CONFIG_MONGODB_ADMINUSERNAME: admin
          ME_CONFIG_MONGODB_ADMINPASSWORD: DoNotPeek
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    Dockerfile

    用于初始化Docker容器

    FROM mongo
    # 将本地的setup.js映射到Docker容器中
    COPY ./setup/setup.js /docker-entrypoint-initdb.d/
    
    • 1
    • 2
    • 3

    验证

    通过mongodb-org-shell来连接(安装请见官方文档):

    $ mongo -u shon -p shonlovescoding --host localhost --authenticationDatabase newDB
    MongoDB shell version: 3.2.20
    connecting to: localhost:27017/test
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
    	http://docs.mongodb.org/
    Questions? Try the support group
    	http://groups.google.com/group/mongodb-user
    > show dbs
    newDB  0.000GB
    > use newDB
    switched to db newDB
    > show collections
    newCollection
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    注意,mongo官方的Docker镜像默认是开启登陆认证的,因此--authenticationDatabase不可少。

    问题

    这套”只用Docker一键部署MongoDB“的机制在很大程度上方便了开发者部署Mongo环境,但因开发匆忙,目前的版本也存在了一些问题,在之后的版本中,本文可能会尝试改进配置来解决这些问题:

    • mongo-express目前只能使用root账户登陆,这非常危险
    • 数据文件的存储应用volume映射到本地位置,而不应和Docker容器同生共死,即使设置了restart:always
      • 使用本地存储也方便了数据备份

    代码

    GitHub: docker_mongo

    更新日志

    • 2018-11-12: V1.0.2
      • Dockerfile 并非可选,而是必需
    • 2018-08-20:V1.0.1
      • docker-compose.yml中的mongo-express进行注释
      • 更新GitHub地址
    • 2018-08-16: V1.0.0 初始版本
  • 相关阅读:
    promise的基本用法
    计算机毕业设计(附源码)python野生动物保护资讯管理系统
    【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务
    .NET Core多线 (5) 常见性能问题
    EN 14353石膏板嵌金属—CE认证
    js:防抖、节流(闭包)
    计划任务管理
    Redis进军磁盘存储
    命令行下编译与运行简单的OC程序
    Java面试学习资源
  • 原文地址:https://blog.csdn.net/m0_67402096/article/details/126553639