前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库上云之MongoDB容器化部署

数据库上云之MongoDB容器化部署

作者头像
MongoDB中文社区
发布2020-11-26 10:29:04
2.5K0
发布2020-11-26 10:29:04
举报
文章被收录于专栏:MongoDB中文社区

前言

随着以Docker和Kubernetes为核心的云原生技术的快速发展,当前越来越多的应用、中间件、甚至数据库均开始进行云化改造,以适应快速上云的IT需求。

云化MongoDB也成为未来使用MongoDB的一种趋势,因此,本篇将首先介绍如何在Docker容器中部署MongoDB,下一篇文章将介绍如何与K8S集成,实现多租户模式下对数据库实例的按需申请。

下面直接进入主题,MongoDB数据库容器化部署的详细步骤如下:

(1)Docker安装

首先确保已正确安装Docker引擎,请参考Docker官方文档进行安装,执行docker --version命令,输出如下信息表示Docker引擎已安装好:

Docker version19.03.6, build 369ce74a3c

(2)创建相关目录与文件

从官方下载MongoDB二进制包,解压到/usr/local/mongodb-4.2目录下,并在此目录下创建相应的数据目录data、日志目录logs和日志文件logs/123.log、启动配置文件start.conf,启动配置文件内容如下:

storage:

dbPath: /usr/local/mongodb-4.2/data

systemLog:

path: /usr/local/mongodb-4.2/logs/123.log

destination: file

net:

port: 30000

bindIp: 127.0.0.1,172.17.0.2

这里需要注意的是bindIp的配置,172.17.0.2为Docker容器的ip地址(根据实际情况进行修改)

(3)创建Dockerfile文件

在/usr/local/mongodb-4.2目录下创建Dockerfile文件,会通过此文件来构造MongoDB的docker镜像,文件内容如下:

FROM ubuntu:16.04 #选择基础镜像

MAINTAINER gyw

RUN rm /etc/apt/sources.list #需安装其它依赖包,修改下载源

COPY sources.list /etc/apt/sources.list

RUN apt-get update

RUN apt-get install -y libcurl3 #mongodb运行需依赖的包

WORKDIR /usr/local/mongodb-4.2

COPY . /usr/local/mongodb-4.2

CMD["./bin/mongod","--config","./start.conf"] #容器启动时初始执行的命令

上面像RUN、COPY、CMD等是Dockerfile里面的命令,请参考Docker官方文档。

为了加速下载依赖包,这里将初始镜像ubuntu:16.04里面的下载源替换成阿里的源,所以在/usr/local/mongodb-4.2目录下创建了一个sources.list的文件,用来覆盖默认的下载源,这个文件的具体内容如下:

deb http://mirrors.aliyun.com/ubuntu/ xenialmain restricted

deb http://mirrors.aliyun.com/ubuntu/xenial-updates main restricted

deb http://mirrors.aliyun.com/ubuntu/ xenialuniverse

deb http://mirrors.aliyun.com/ubuntu/xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/ xenialmultiverse

deb http://mirrors.aliyun.com/ubuntu/xenial-updates multiverse

deb http://mirrors.aliyun.com/ubuntu/xenial-backports main restricted universe multiverse

(4)创建好相应文件后,最终在/usr/local/mongodb-4.2目录下的文件结构如下

drwxr-xr-x 2root root 4096 Apr 21 10:08 bin/

drwxr-xr-x 2root root 4096 Apr 21 10:13 data/

-rw-r--r-- 1 root root 275 Apr22 06:10 Dockerfile

-rw-r--r-- 1 root root 30608 Apr21 10:08 LICENSE-Community.txt

drwxr-xr-x 2root root 4096 Apr 21 10:12 logs/

-rw-r--r-- 1 root root 16726 Apr21 10:08 MPL-2

-rw-r--r-- 1 root root 2601 Apr21 10:08 README

-rw-r--r-- 1 root root 457 Apr22 05:50 sources.list

-rw-r--r-- 1 root root 177 Apr22 07:10 start.conf

-rw-r--r-- 1 root root 57190 Apr21 10:08 THIRD-PARTY-NOTICES

(5)构建docker镜像

执行如下命令:docker image build -t mongodb-4.2:test .

注意最后面有一个.符号,表示在当前目录下查找Dockerfile文件进行镜像构建,成功运行后,可通过以下命令查看生成的镜像:

docker image ls

输出信息里面包含如下两个镜像:

REPOSITORY TAG IMAGE ID CREATED SIZE

mongodb-4.2 test 4d8782e5adad 40 minutesago 435MB

ubuntu 16.04 77be327e4b63 2 months ago 124MB

其中ubuntu是基础镜像,mongdb-4.2就是构建成功的数据库镜像。

(6)启动容器

docker run -p 50000:30000 -d --name mongodb-4.2mongodb-4.2:test

其中--name参数指定启动的容器名称,-p为端口映射,冒号前面的端口为所在主机的端口,后面的端口为容器对外暴漏的端口(与mongodb启动配置文件start.conf里面指定的监听端口一致),mongodb-4.2:test为镜像名称,通过此镜像来启动容器。

成功启动后,查看容器是否运行,可通过以下命令:

docker ps

输出如下信息:

CONTAINER ID IMAGE COMMAND

b4a9d40d1802 mongodb-4.2:test "./bin/mongod --conf…"

CREATED STATUS PORTS NAMES

49 minutes ago Up 49 minutes 0.0.0.0:50000->30000/tcp mongodb-4.2

其中字段STATUS为Up表示容器正在运行。

(7)连接到容器里面的mongodb

./bin/mongo --host 172.17.0.2 --port 30000

和正常的mongo客户端连接mongod服务端一样,需要注意的是参数host指定的ip为容器的ip,--port为容器监听的端口

也可以通过以下语句连接上:

./bin/mongo --port 50000

注意这里没有指定host参数,默认连接的ip为127.0.0.1;--port参数指定的端口号为主机上的端口,通过此50000端口映射到容器上的30000端口。

总结:Docker下面安装部署MongoDB,看上去需要做很多工作,但是一段完成MongoDB的Docker镜像生成后,后面我们可以很方便的利用这个镜像来启动多个容器化的MongoDB;同时,借助Kuberntes(一种容器编排工具),甚至能够快速启动几百上千个MongoDB数据库实例。因此,MongoDB的容器化部署,是未来MongoDB数据库上云的一个重要前提。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mongoing中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ?
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档