docker_mongo使用

官方 docker 镜像:https://hub.docker.com/_/mongo/


前篇


部署

  1. pull 镜像

    1
    2
    3
    4
    5
    6
    root@ubuntu:~# docker search mongo
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    mongo MongoDB document databases provide high av... 3468 [OK]
    mongo-express Web-based MongoDB admin interface, written... 170 [OK]

    root@ubuntu:~# docker pull mongo
  2. run 镜像,挂载数据到宿主中,且带认证 (–auth)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ mkdir -p /opt/mongo/db

    $ docker run -d \
    --restart=always \
    --name mongo_server \
    -p 28017:27017 \
    -v /opt/mongo/db:/data/db \
    mongo \
    --auth

    // 指定 用户 密码
    $ docker run -d --restart=always --name mongo_server -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 -p 28017:27017 -v /root/docker_data/mongo/data:/data/db mongo:4.2.2 --auth
  3. 进入容器中的 admin 数据库, 创建用户密码

    1
    2
    3
    $ docker exec -it mongo_server mongo admin
    connecting to: admin
    > db.createUser({ user: 'root', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
  4. 测试, 可以使用一下几种方式连接 MongoDB

    1. 进入容器内某个数据库

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      root@ubuntu:~# docker exec -it mongo_server mongo admin # 进入 admin 数据库
      MongoDB shell version v4.2.2
      connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
      Implicit session: session { "id" : UUID("aafbdbb0-2559-4f74-8e42-b349e5caf532") }
      MongoDB server version: 4.2.2
      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
      > db # 查看数据库
      admin
      > db.auth("root", "123456") # 需要验证 用户密码
      1
      > db.system.users.find() # 然后才可以操作数据库
      { "_id" : "admin.root", "userId" : UUID("0bdbd0df-16dc-4836-8988-6d41ea9d054d"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "yLsuB7jknRY7lHpA1sbtKQ==", "storedKey" : "apvSXElb4yoGR1aXImUzEV+CDt8=", "serverKey" : "xR7zuFoM9ZRaJsVikBcOhbkIZ80=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "dMC+tB5ncyD0m+zlZjDVc9oplyOurexHjqsDxg==", "storedKey" : "0Y+A6R1V9PBWZKJjdcG9ff0caBm+MjYAkpUW55vAUtM=", "serverKey" : "Nd/P91+xBm0WxHvWtcJmlIH1SGGmcYyFGHcJOXIuvQo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
      >
    2. 带 用户密码 验证 进入容器内某个数据库

      1
      2
      3
      4
      5
      6
      7
      root@ubuntu:~# docker exec -it mongo_server mongo --port 27017 admin -u root -p 123456 # 进入 admin 数据库
      MongoDB shell version v4.2.2
      connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
      Implicit session: session { "id" : UUID("59b20011-dca5-4639-a5cd-56b9f803fa92") }
      MongoDB server version: 4.2.2
      > db.system.users.find() # 可以直接操作数据库
      { "_id" : "admin.root", "userId" : UUID("0bdbd0df-16dc-4836-8988-6d41ea9d054d"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "yLsuB7jknRY7lHpA1sbtKQ==", "storedKey" : "apvSXElb4yoGR1aXImUzEV+CDt8=", "serverKey" : "xR7zuFoM9ZRaJsVikBcOhbkIZ80=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "dMC+tB5ncyD0m+zlZjDVc9oplyOurexHjqsDxg==", "storedKey" : "0Y+A6R1V9PBWZKJjdcG9ff0caBm+MjYAkpUW55vAUtM=", "serverKey" : "Nd/P91+xBm0WxHvWtcJmlIH1SGGmcYyFGHcJOXIuvQo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
    3. 用 Navicat Premium 连接


创建用户及数据库

使用超级管理员账号, use 新数据库, 在该数据库下 create 新用户

  1. 使用 root 用户登录 admin 数据库,并认证

    1
    2
    3
    4
    5
    6
    wilker@ubuntu:~$ docker exec -it mongo_server mongo admin
    MongoDB shell version v3.4.6
    connecting to: mongodb://127.0.0.1:27017/admin
    MongoDB server version: 3.4.6
    > db.auth("root","123456")
    1
  2. 创建 或者 切换 数据库

    1
    > use myblog // 不存在的情况下就会创建
  3. 创建用户

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    > db.createUser(
    {
    user: "wilker",
    pwd: "123456",
    roles: [ { role: "readWrite", db: "myblog" },
    { role: "read", db: "myblog22" } ]
    }
    )

    # 创建成功提示
    Successfully added user: {
    "user" : "wilker",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "myblog"
    },
    {
    "role" : "read",
    "db" : "myblog22"
    }
    ]
    }
  4. 使用新建用户 wilker:123456 登录

    1
    2
    3
    4
    5
    6
    wilker@ubuntu:~$ docker exec -it mongo_server mongo myblog
    MongoDB shell version v3.4.6
    connecting to: mongodb://127.0.0.1:27017/myblog
    MongoDB server version: 3.4.6
    > db.auth("wilker","123456")
    1
  5. 往 col 集合 插入数据

    1
    2
    3
    4
    5
    6
    7
    8
    > db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
    })
    WriteResult({ "nInserted" : 1 })
  6. 查询 col 集合 数据

    1
    2
    > db.col.find()
    { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

参考:


指定配置启动

配置参考官网: https://docs.mongodb.com/manual/reference/configuration-options/#net-options

  1. 编辑配置文件 /etc/mongo/abc.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # vi /etc/mongo/abc.conf

    systemLog:
    destination: file
    path: "/var/log/mongodb/mongod.log"
    logAppend: true

    storage:
    dbPath: "/var/mongodb/mydata"
    journal:
    enabled: true

    net:
    bindIp: 0.0.0.0
    port: 27017

    security:
    authorization: "enabled"
  2. 指定配置文件启动

    1
    # mongod --auth --config /etc/mongo/abc.conf

远端连接

  1. 修改配置文件 /etc/mongo/abc.conf, bindIp 改为 0.0.0.0

    1
    2
    3
    4
    5
    ...
    net:
    bindIp: 0.0.0.0
    port: 27017
    ...
  2. 指定配置 重启MongoDB, # mongod --auth --config /etc/mongo/abc.conf