docker部署mongo爬坑记录

首先,机器装好docker服务,win,mac,linux都支持,可以网上找一下教程就可以。

然后,就是用docker装mongo数据库,这里有几个坑,记录一下:

一、mongo都版本

mongo的官网现在最新版本是4开头了,大概版本3开始,mongo就对权限控制比较严格了,如果装了版本3以上的,就要去了解各种权限的设置了,包括用可视化工具链接mongo的配置。

但对于平时工作中用到的场景大部分是不需要设置权限的,所以希望越简单越好。所以,经过个人实践,发现版本2.6是最合适的,不需要设置账号密码,直接用可视化工具就可以直接连了,但是,注意,如果装的是低于版本2.6的,可视化工具是不支持的,可视化工具支持的mongo版本最低也需要2.6以上。

所以,拉mongo镜像的时候,需要指定mongo版本号拉,如果不指定版本号,默认拉的版本号是官网最新的:

docker pull mongo:2.6

docker部署mongo爬坑记录

二、可视化软件robo3T的版本

装可视化工具robo3T也需要指定版本号安装,版本1.3以上的robo3T 都需要通过账号密码验证才能连接成功。

如果前面装了低于版本3的mongo,没有设置账号密码,robo3T 需要安装版本低于1.3的才能连接成功,经过实践,版本1.2是完美支持的,把IP、port填上就可以连接成功了。

这里还有个需要注意的点,mongo默认的开放端口是27017,但在启动mongo容器的时候,直接就用宿主机的端口27017映射到容器端口27017,有可能可视化工具连接失败,因为如果宿主机的27017端口并没有对外开放,本地的工具连接宿主机当然是不能通的。所以,启动容器的时候,需要注意宿主机对外开放的端口有哪些(一般默认开放端口80,443),然后,用开放的、没有被占用的宿主机端口映射到容器端口,本地连接的时候port就填的是宿主机的端口。

docker部署mongo爬坑记录

docker部署mongo爬坑记录

用robo3T连接,Test如果全绿,就是连接成功了(注意,是不需要账号密码的)

docker部署mongo爬坑记录

三、mongo数据的持久化

一般来说,做完前面2步已经完事了,也就是3个步骤:

1.docker pull mongo:2.6
2.docker run -it -d --name my_mongo -p 8081:27017 mongo:2.6 /bin/bash

3.在本地用robo3T 连接宿主机ip、port就可以进行数据库操作了

但突然想到,跑了很久的容器,如果某天被某个同学或自己误删了,那之前一直存在容器里面的数据就都随风去了?

所以,容器数据持久化,还是必须要搞的。

docker 容器内的数据是独立于镜像之外的,那么如何将其持久化到宿主机呢?

答案便是利用「数据卷」,那什么又是「数据卷」呢。

简单说,数据卷其实就是一个目录或者一个文件,该目录(或文件)可以存在于宿主机上。

将此目录(或文件)映射到容器中,便可以持久化容器内的数据到宿主机。

如果目录不存在于宿主机上,而是存在于一个容器内部,那么此容器便可以被称为「数据卷容器

默认位于 /var/lib/docker/volumes 目录下,用docker inspect 容器名称,可以看到:

docker部署mongo爬坑记录

为了管理创建的容器数据可以持久化,就是如果容器被删除了,我再起一个容器,还可以保留以前的数据。

因此,需要在启动容器的时候,指定方便管理的宿主机目录映射到容器的目录,比如:/home/zhoujunjun/data/mongo/,所以,在启动容器的命令还需要修改一下,手动指定宿主机目录到容器目录:

docker run --name my_mongo -v /home/zhoujunjun/data/mongo:/data/db --rm -d -p 8081:27017 mongo:2.6

回到宿主机看/home/zhoujunjun/data/mongo/

docker部署mongo爬坑记录

再进容器里面看/data/db/

docker部署mongo爬坑记录

docker 里面的mongo数据已经同步到指定宿主机的目录了,就算容器删除了,容器的数据还是会保留在宿主机里面,下次需要使用的时候,再起一个新的容器,将宿主机目录映射到新容器的目录,新的容器就会包含以前的数据:

命令还是和第一次创建的一样:

docker run --name my_mongo -v /home/zhoujunjun/data/mongo:/data/db --rm -d -p 8081:27017 mongo:2.6

--name:指定容器名称

-v:指定数据卷,/home/zhoujunnian/data/mong 目录为宿主机目录,/data/db 目录为容器目录

-rm: 容器stop,就会被默认强制删除(这个还是不要用好)

-d:后台运行命令

-p:指定宿主机端口映射到容器端口,8081 为宿主机端口,27017为容器端口

mongo:2.6 为镜像文件,如果不指定2.6,就会默认拉mongo最新到版本latest