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

如图,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: alwaysports:- 27017:27017  # 本地端口(可自定义):容器内默认端口(mongo设定为27017)volumes:- ./setup:/docker-entrypoint-initdb.d/  # 本地文件路径:容器内映射路径environment:  # admin账号和密码MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: DoNotPeek# 如果不需要MongoDB的网页端,以下内容可以不加mongo-express:  # 会自动从Docker Hub上自动获取mongo-express这个镜像image: mongo-expressrestart: alwaysports:- 8080:8081  # 本地端口(可自定义):容器内默认端口(mongo-express设定为8080)environment:  # 这里只能使用与上方MONGO_INITDB_ROOT_USERNAME相同的root账号ME_CONFIG_MONGODB_ADMINUSERNAME: adminME_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, seehttp://docs.mongodb.org/
Questions? Try the support grouphttp://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 初始版本

使用Docker一键部署MongoDB相关推荐

  1. IDEA配置Docker一键部署SpringBoot项目(企业级做法)

    Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...

  2. 利用Docker一键部署若依前后端分离项目详细教程

    本文内容,主要介绍一下,在Linux服务器中如何利用Docker一键部署若依前后端分离项目. 若依前后端分离版本开源地址:https://gitee.com/y_project/RuoYi-Vue 目 ...

  3. docker一键部署php开发环境

    docker-phper docker 一键部署php开发者环境 项目地址 特性 真 · 一键部署 清晰配置与日志文件 数据持久化 自定义php扩展 项目结构 │ .env 系统配置 │ docker ...

  4. 在线乞讨系统 Docker一键部署

    begger乞讨网 在线乞讨 全球要饭系统 前端界面 后端界面 H2 数据库 console 运行命令 访问信息 支付平台 在线乞讨 全球要饭系统 在线乞讨全球要饭项目,支持docker一键部署,支持 ...

  5. docker 一键部署前后端项目 ruoyi

    使用 docker 一键部署前后端项目 这里我以开源项目ruoyi 的 vue 前后端为例,想要通过 docker 一键跑起来,需要对项目做部分调整. 修改 springboot yml 的配置 ap ...

  6. docker一键部署springboot项目(三)

    上一篇,大概讲了下早docker中部署redis.tomcat(JavaWeb项目)和nginx,当我们做了那么多,终于部署好一套完整的环境之后,要是移植怎么办,这里呢,就算是docker的好处了吧, ...

  7. docker部署python web应用_使用docker一键部署Web应用

    前几天借着部署一个小系统的机会尝试了一把docker,把Web应用,数据库,nginx统统都用docker管理.把打包好的代码扔到服务器上一键就部署好了,不需要考虑服务器的环境问题,简直不要太爽.但感 ...

  8. docker一键部署jenkins服务(一)

    一.简介 1)docker是当前流行的容器技术,通过docker技术可以实现快速的部署常见的服务. 2)jenkins是当前主流的持续集成的工具和框架(CI),通过jenkins可以实现项目的智能化构 ...

  9. Docker安装部署MongoDB及MySql和MongoDB的语法对比

    MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品 ...

  10. idea docker 一键部署实战

    1.准备源文件 package com;public class App {public static void main(String[] args) {System.out.println(&qu ...

最新文章

  1. Numpy入门教程:练习作业02
  2. 如何让摄像头变成“暗夜之眼”?英特尔开发了一套基于FCN的成像系统
  3. 【.net部署】Server Error in ‘/‘ Application.错误解决方案
  4. 厉害!Java集合框架综述,这篇让你吃透!
  5. java 151建议_编写高质量代码改善java程序的151个建议——导航开篇
  6. 管理系统制作的python代码_python学生管理系统代码实现
  7. 解决页面上JS文件加载过慢问题
  8. C++ 模板实例化与调用
  9. 基于TensorRT量化部署RepVGG模型
  10. 傅里叶变换和拉普拉斯变换
  11. java多网卡组播,多网卡 组播
  12. 软件测试面试题:微信红包如何测试?
  13. vnc远程控制软件下载,有哪些实用的vnc远程控制软件下载
  14. 控制台安装selenium运行浏览器报错TypeError: ‘module‘ object is not callable
  15. Github连接不上问题
  16. 2020网络安全NISP一级(模拟题七)
  17. 笔记本电脑也是一种微型计算机,计算机一级试题 很权威的哦
  18. 我在帝都买房后,又开始思考怎样赚更多的钱了。
  19. 人脸检测与美颜技术介绍(OpenCV)
  20. Mldonkey命令解释

热门文章

  1. VHDL实现矩阵键盘检测
  2. 1428D - Bouncing Boomerangs(思维+构造+贪心)
  3. radius mysql md5_Radius认证
  4. 如何把两个pdf合并成一个pdf?
  5. 《中华颂》朗诵比赛准备
  6. 性能和稳定性测试报告模板
  7. CSS 伪类 after 右侧线
  8. C语言之i++,++i,i--,--i
  9. macosx安装之旅(8)-常见问题(转载)
  10. 删除后别人的微信号变成wxid_怎么恢复删除的微信好友?教程在手,不怕恢复不了!_...