本文主要介绍 MongoDB 基于 Docker 容器化的安装方案。通过 docker 容器化技术,只需几行命令,就可以快速创建一个 MongoDB 数据库服务。下面是详细过程,供大家参考。
以 Centos 为例,需要先安装好 docker 环境:
$ yum install docker
查看 docker 版本号:
$ docker -v
Docker version 20.10.17, build 100c701
能正确输出,说明 docker 安装成功。
然后来到 dockerhub 查看 mongo 镜像:
写作本文时,最新的 latest 版本为 6.0.2:
通过 docker
命令拉取 mongo 的镜像,不指定 tag 的话默认是 latest
,也就是 6.0.2
:
$ docker pull mongo
查看下载好的镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest b70536aeb250 13 days ago 695MB
使用 docker 非常简单,将镜像启动为容器,就能将一个服务运行起来。
启动容器的命令是 docker run
:
$ docker run
启动 mongo 容器之前,先将宿主机的 mongod 服务停止,防止产生端口占用冲突:
$ mongod --dbpath=/data/mongodb/data --shutdown
停止时也需要指定数据目录。
查看 mongo 镜像的文档可知,启动一个 mongo 容器最简单的方式是:
$ docker run --name mongo -d -p 27017:27017 mongo
参数说明:
--name mongo
:创建的容器的名字,自定义,一般和镜像名字有对应关系-d
:以守护进程方式启动容器-p 2701:27017
:MongoDB 的默认端口号为 27017,这个参数是将宿主机的端口映射到当前 mongo 容器的端口,这样,就能通过网络访问容器的数据库服务了mongo
:使用哪一个镜像创建容器。完整的写法是
。由于下载 mongo 镜像时没有指定 tag,也就是使用的默认的 tag,这里也就不用指定了。通过上面这样一条简单的命令,一个 mongo 容器就创建好了,会返回创建好的容器的 ID:
查看运行的 docker 容器:
$ docker ps
可以看到容器的 ID、名字、创建时间、端口等信息:
此时一个 mongo 容器已经在运行中了。
使用 stop
命令,后面可跟容器名,容器 ID:
$ docker stop mongo
$ docker stop 1b5c
只需要 ID 的前几位就能识别到唯一的容器,所以在使用 ID 时通常都会简写:
通过命令查看所有的容器:
$ docker ps -a
可以看到,mongo 容器在 58 秒前退出了:
容器就是一个小型的虚拟机。现在,MongoDB 在容器内部运行着,为了访问数据服务,就需要用到 Mongo 客户端来连接。这里的 Mongo 客户端是指广泛的客户端,比如 MongoDB Shell,Nodejs 中的 Mongoose,以及图形化工具 Robo 3T 等等,都属于 MongoDB 客户端,只要有凭证,都能连接到运行中的 mongod 服务。
上文中我们在 Windows 系统和服务器(宿主机)中都单独安装了 MongoDB Shell,用于连接到 MongoDB 服务。它作为一个客户端工具,不管 MongoDB 服务运行在本地,还是容器中,亦或是网络上,都能访问到。
由于默认创建的容器服务没有设置用户名和密码,所以只需要地址和端口号,就能连接成功。
使用宿主机的 mongosh
连接:
$ mongosh
默认会去连接 mongodb://127.0.0.1:27017
,于是找到了容器内的 mongod 服务:
外网访问之前,需要登录服务器的控制台,去安全组中开放 27017 端口:
使用本地的 mongosh
进行连接,此时需要指定远程主机的 IP 和端口号:
$ mongosh --host 101.200.218.201 --port 27017
或者可以简写为:
$ mongosh mongodb://101.200.218.201:27017
Robo 3T 是一款优秀的支持 MongoDB 数据库的可视化客户端工具,点击进入官网下载。
安装过程非常简单,就不再演示。
安装成功后打开 Robo 3T,新建一个数据库连接:
弹出的窗口中选择 create
:
在 Name
中可以为此连接设置一个名字,在 Address
中输入服务器的 IP 和端口号,点击左下方的 Test
按钮,进行连通测试。如下图表示成功连接。再点击 Save
按钮保存此连接。
然后选择此连接,点击 Connect
按钮即可连接到服务器中运行的 MongoDB 服务:
本文详细介绍了在 Linux 系统中通过 Docker 下载 mongo 镜像,创建 mongo 容器的过程,同时介绍了宿主机访问容器内数据库服务的方式,也介绍了在本地远程访问服务器内数据库服务的方式。对于 Robo 3T 这个工具,非常好用,推荐使用。
数据库是运行在宿主机,还是容器内,其实都一样的对外提供了服务,我们只需要关注操作数据库即可。
目前我们安装的 MongoDB 都还没有设置用户名和密码,这十分不安全。所以在真正开始操作数据库之前,下篇文章我们先介绍 MongoDB 的安全策略。