使用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

使用Docker一键部署MongoDB_第1张图片

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

文件结构

├── docker-compose.yml
├── Dockerfile
└── setup
    └── setup.js

解析

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

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

Dockerfile

用于初始化Docker容器

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

验证

通过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

注意,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 初始版本

你可能感兴趣的:(dev)