MongoDB爱好者
垂直技术交流平台

数据库上云之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数据库上云的一个重要前提。

专栏作者:郭远威

资深大数据解决方案咨询顾问与架构师,MongoDB中文社区委员,长沙分会主席,多年通信行业大数据研发、规划、咨询经验;《大数据存储MongoDB实战指南》作者;阿里云云计算ACP认证专家。

也许您还感兴趣——

点击下方标题阅读郭远威老师的专栏《WiredTiger存储引擎》系列:

WiredTiger存储引擎之一:基础数据结构分析

WiredTiger存储引擎之二:一个Page的生命周期

WiredTiger存储引擎之三:Checkpoint原理

WiredTiger存储引擎之四:WT工具编译与元数据文件剖析

WiredTiger存储引擎之五:与事务相关的数据结构以及并发控制机制

WiredTiger存储引擎之六:Cache分配规则与Page的淘汰机制

 

 

 

 

 

 

 

 

MongoDB中文手册翻译正在进行中,欢迎更多朋友在自己的空闲时间学习并进行文档翻译,您的翻译将由社区专家进行审阅,并拥有署名权更新到中文用户手册和发布到社区微信内容平台。

更多问题可以添加社区助理小芒果微信(mongoingcom)咨询,进入社区微信交流群请备注“mongo”。

长按二维码关注我们

赞(5)
未经允许不得转载:MongoDB中文社区 » 数据库上云之MongoDB容器化部署

评论 抢沙发

评论前必须登录!