Docker&MongoDB实战(一)单机部署

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 本文讲的是Docker&MongoDB实战(一)单机部署,【编者的话】本系列文章将重点介绍如何在Docker中运行MongoDB容器,作者有在生产环境中使用Docker部署MongoDB的经验,所以一些好的思路也可以借鉴。本文是系列文章的第一篇,主要介绍了基本的单机安装,干货还在后面,敬请关注。
本文讲的是Docker&MongoDB实战(一)单机部署 【编者的话】本系列文章将重点介绍如何在Docker中运行MongoDB容器,作者有在生产环境中使用Docker部署MongoDB的经验,所以一些好的思路也可以借鉴。本文是系列文章的第一篇,主要介绍了基本的单机安装,干货还在后面,敬请关注。

Docker 是一个轻量级的Linux容器,它现在正在变得越来越流行。如果你是一个Docker新手,并且想知道它和虚拟机有什么不以及它的优势,可以看看 这篇文章

本系列文章将重点介绍如何在Docker中使用MongoDB,从单一的开发/测试环境设置到复杂的多主机MongoDB集群都会涉及,包括日志管理、性能、数据持久化等。下面是虚拟机和Docker的对比:
aaaa.png

网上有很多介绍在Docker与MongoDB的文章,但是大多都是基于Ubuntu,并且也仅仅只是在单机上部署,也没有准备在生产环境中使用。我并不是说Ubuntu或者Debian系统不好,只是觉得应该有一些基于RPM发行版部署的例子,比如Fedora/RHEL和openSUSE/SLES。让我们开始吧,本文中我们使用的是最新的CentOS系统(CentOS 7),先来看下下面这个简单的Dockerfile文件:
# mongod process on latest CentOS
# See https://docs.docker.com/articles/dockerfile_best-practices/

FROM centos                             # Base container on latest CentOS release
MAINTAINER James Tan <james.tan@mongodb.com>

COPY mongodb.repo /etc/yum.repos.d/     # Copy yum repo config file to add MongoDB repo
RUN yum install -y mongodb-org-server   # Install mongod
RUN mkdir -p /data/db                   # Create default dbpath

ENTRYPOINT [ "mongod" ]                 # Execute the mongod binary on container startup

然后在同一个目录下创建 mongodb.repo 文件,如下:
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

现在我们可以在终端运行 docker build -t mongod . 命令来构建Docker镜像。可能第一次运行时间会比较长,因为构建过程中要下载安装CentOS以及MongoDB的依赖文件,第一次之后的构建都会非常快。比如:
$ ls -l
-rw-r--r--. 1 vagrant vagrant 283 Jan 13 22:27 Dockerfile
-rw-r--r--. 1 vagrant vagrant 122 Jan  5 20:21 mongodb.repo

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              8efe422e6104        8 days ago          224 MB

$ docker build -t mongod .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM centos
---> 8efe422e6104
Step 1 : MAINTAINER James Tan <james.tan@mongodb.com>
---> Running in 4e5110a62897
---> 299f6b443463
Removing intermediate container 4e5110a62897
Step 2 : COPY mongodb.repo /etc/yum.repos.d/
---> 93e9e1c7080c
Removing intermediate container 365f1f6a898e
Step 3 : RUN yum install -y mongodb-org-server
---> Running in 6139c81c9b03
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: ftp-stud.fht-esslingen.de
* extras: mirror.euserv.net
* updates: ftp-stud.fht-esslingen.de
Resolving Dependencies
--> Running transaction check
---> Package mongodb-org-server.x86_64 0:2.6.6-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================

Package Arch Version Repository Size

Installing: mongodb-org-server        x86_64        2.6.6-1           mongodb        9.0 M

Transaction Summary

Install  1 Package Total download size: 9.0 M Installed size: 23 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : mongodb-org-server-2.6.6-1.x86_64                            1/1 Verifying  : mongodb-org-server-2.6.6-1.x86_64                            1/1 Installed: mongodb-org-server.x86_64 0:2.6.6-1 Complete! ---> 1c66942e38f2 Removing intermediate container 6139c81c9b03 Step 4 : RUN mkdir -p /data/db ---> Running in a9eaa1e46fde ---> 74b32e948366 Removing intermediate container a9eaa1e46fde Step 5 : ENTRYPOINT mongod ---> Running in fbc8e63727b0 ---> d491f0032d89 Removing intermediate container fbc8e63727b0 Successfully built d491f0032d89
运行 docker images 命令来确认现在是否已经有mongod镜像,如下:
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
mongod              latest              d491f0032d89        About a minute ago   330.3 MB
centos              latest              8efe422e6104        8 days ago           224 MB

我们可以通过运行 docker run –d –P mongod –smallfiles 来启动容器,并运行 docker ps 来确认当前运行的容器以及端口映射情况。如下:
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

$ docker run -d -P mongod --smallfiles
f81a716e1f77a0b0ab1e3d6ca0e20b084897c0591bcdef9df4a6a927a9b5a1d2

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
f81a716e1f77        mongod:latest       "mongod"            6 seconds ago       Up 5 seconds        0.0.0.0:49155->27017/tcp   sharp_goodall

运行 docker logs CONTAINER_ID 命令来查看当前容器的日志输出。如下:
$ docker logs f81a716e1f77
mongod --help for help and startup options
2015-01-13T23:21:12.876+0000 [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=f81a716e1f77
2015-01-13T23:21:12.877+0000 [initandlisten] db version v2.6.6
2015-01-13T23:21:12.877+0000 [initandlisten] git version: 608e8bc319627693b04cc7da29ecc300a5f45a1f
2015-01-13T23:21:12.877+0000 [initandlisten] build info: Linux build10.nj1.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
2015-01-13T23:21:12.877+0000 [initandlisten] allocator: tcmalloc
2015-01-13T23:21:12.877+0000 [initandlisten] options: {}
2015-01-13T23:21:12.934+0000 [initandlisten] journal dir=/data/db/journal
2015-01-13T23:21:12.934+0000 [initandlisten] recover : no journal files present, no recovery needed
2015-01-13T23:21:13.516+0000 [initandlisten] preallocateIsFaster=true 7.7
2015-01-13T23:21:14.070+0000 [initandlisten] preallocateIsFaster=true 7
2015-01-13T23:21:15.577+0000 [initandlisten] preallocateIsFaster=true 5.8
2015-01-13T23:21:15.577+0000 [initandlisten] preallocating a journal file /data/db/journal/prealloc.0
2015-01-13T23:21:18.743+0000 [initandlisten] preallocating a journal file /data/db/journal/prealloc.1
2015-01-13T23:21:22.015+0000 [initandlisten] preallocating a journal file /data/db/journal/prealloc.2
2015-01-13T23:21:26.188+0000 [initandlisten] allocating new ns file /data/db/local.ns, filling with zeroes...
2015-01-13T23:21:26.278+0000 [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes...
2015-01-13T23:21:26.278+0000 [FileAllocator] creating directory /data/db/_tmp
2015-01-13T23:21:26.324+0000 [FileAllocator] done allocating datafile /data/db/local.0, size: 64MB,  took 0.01 secs
2015-01-13T23:21:26.329+0000 [initandlisten] build index on: local.startup_log properties: { v: 1, key: { _id: 1 }, name: "_id_", ns: "local.startup_log" }
2015-01-13T23:21:26.330+0000 [initandlisten] added index to empty collection
2015-01-13T23:21:26.332+0000 [initandlisten] command local.$cmd command: create { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyUpdates:0 numYields:0  reslen:37 147ms
2015-01-13T23:21:26.335+0000 [initandlisten] waiting for connections on port 27017

docker ps 的命令输出可以看到,容器内的27017端口默认被映射到了主机的49155端口,因此我们可以通过运行 mongo –port 49155 来连接到容器里的mongo进程。如:
$ mongo --port 49155
MongoDB shell version: 2.6.6
connecting to: 127.0.0.1:49155/test
>

好吧,就这些啦,下一篇我们将研究各种各样的Docker网络选项。

原文链接:MONGODB & DOCKER – PART 1(翻译:温宏强 校对:宋瑜)

原文发布时间为:2015-02-09
本文作者:henryon 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker&MongoDB实战(一)单机部署
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
23天前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署bender个人仪表板
【4月更文挑战第2天】使用Docker部署bender个人仪表板
33 1
|
1月前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
171 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
24天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
99 0
|
1天前
|
运维 Linux 虚拟化
Docker详解(三)——Docker安装与部署
Docker详解(三)——Docker安装与部署
28 4
|
2天前
|
测试技术 Linux Docker
【好玩的经典游戏】Docker部署FC-web游戏模拟器
【好玩的经典游戏】Docker部署FC-web游戏模拟器
25 1
|
3天前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
35 1
|
6天前
|
存储 测试技术 文件存储
【Docker项目实战】使用Docker部署Sun-Panel导航面板
【4月更文挑战第19天】使用Docker部署Sun-Panel导航面板
57 7
|
9天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
49 1
|
13天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署Seatsurfing预订座位系统
【4月更文挑战第12天】使用Docker部署Seatsurfing预订座位系统
38 3
|
16天前
|
JavaScript 前端开发 Docker
全栈开发实战:结合Python、Vue和Docker进行部署
【4月更文挑战第10天】本文介绍了如何使用Python、Vue.js和Docker进行全栈开发和部署。Python搭配Flask创建后端API,Vue.js构建前端界面,Docker负责应用的容器化部署。通过编写Dockerfile,将Python应用构建成Docker镜像并运行,前端部分使用Vue CLI创建项目并与后端交互。最后,通过Nginx和另一个Dockerfile部署前端应用。这种组合提升了开发效率,保证了应用的可维护性和扩展性,适合不同规模的企业使用。