前言
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.
随着以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存储引擎之四:WT工具编译与元数据文件剖析
WiredTiger存储引擎之五:与事务相关的数据结构以及并发控制机制
WiredTiger存储引擎之六:Cache分配规则与Page的淘汰机制
MongoDB中文手册翻译正在进行中,欢迎更多朋友在自己的空闲时间学习并进行文档翻译,您的翻译将由社区专家进行审阅,并拥有署名权更新到中文用户手册和发布到社区微信内容平台。
更多问题可以添加社区助理小芒果微信(mongoingcom)咨询,进入社区微信交流群请备注“mongo”。
长按二维码关注我们
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK