4

前言

 3 years ago
source link: https://mongoing.com/archives/75940
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
数据库上云之MongoDB容器化部署 | MongoDB中文社区
a6117c53ac79663-1024x575.jpg

随着以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

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的淘汰机制

1679091c5a880fa-300x167.png
c9f0f895fb98ab9-1-300x167.png
45c48cce2e2d7fb-300x167.png
d3d9446802a4425-300x167.png


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

796ccfc5e2fdee4-1024x576.png

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

d5c6135add521dd.jpg

长按二维码关注我们


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK