栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker容器间的通信【连接MongoDB数据库】

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker容器间的通信【连接MongoDB数据库】

docker容器间的通信【连接MongoDB数据库】 参考地址1、docker官方文档 2、hub.docker中mongo镜像

最近全面转型在docker容器中进行开发,但开发时遇见以下问题——“数据库 将在哪里运行?安装在同一个容器中还是单独运行?” 一般来说,每个容器都应该做一件事,并且做好。针对上面遇到的问题,来解决docker多容器连接。【官方解释】

默认情况下,容器是独立运行的,并且对同一台机器上的其他进程或容器一无所知。那么,我们如何让一个容器与另一个容器通信呢?答案是网络(network)

接下来我们便准备容器之间需要的条件。

1、创建network
docker network create todo-mongo    
2、准备MongoDB数据库容器

如果想要本地连接docker下的mongodb数据库。可参考Docker连接MongoDB数据库。但现在是容器之间的通信,故需要以下配置。

创建容器

docker run -d --network toto-mongo -p 27066:27017 --name some-mongo -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo
-i 交互式操作。
-t 终端。
-d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
--network toto-mongo  网络(network)的名称
-p 27066:27017  #端口映射  27066:如果希望本地能访问数据数据时的端口号 27017:mongodb内部端口默认都是27017
--name some-mongo 容器的名称
-v C:Users12241OneDrivemogodatadata  #mongodb数据持久化存放的位置
/data/db #mongodb容器内部的数据目录 不用修改
-e 设置环境变量
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin 连接mongodb的用户名
-e MONGO_INITDB_ROOT_PASSWORD=secret   连接mongodb的密码
mongo:镜像名称

如果没有拉取mongo镜像,会自动拉取mongo镜像。

3、准备另一个容器用于连接MongoDB

本例中以python程序测试连接另一个容器的数据库。

创建一个容器

docker run -itd --network todo-mongo --name testmongo python:3.9.12 /bin/bash 
-i 交互式操作。
-t 终端。
-d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
--network toto-mongo  网络(network)的名称
--name 容器的名称
python:3.9.12: python镜像

当然也可以使用 -v 将容器挂载到本地

设置容器自动启动,每次就不用手动启动数据库容器啦 (可选设置,看自己需求)

docker update --restart=always 
4、 测试

经过前3步两个容器之间已经能通信了。为了确保通信是否成功,我们需要验证一下。

使用vscode进入第三步创建的容器,新建一个test.py文件用来测试能否连接mongodb数据库。代码如下:

#test.py
import pymongo
 
myclient = pymongo.MongoClient("mongodb://mongoadmin:secret@172.24.0.1:27066/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
 
x = mycol.insert_one(mydict) 
print(x)
print(x)

输出:

进入本地的客户端,可以看到数据以存到了数据库。如何连接本地数据库查看[docker连接本地数据库]

为什么test.py文件连接的容器的地址是172.24.0.1:27066,而本地连接docker中的数据库是localhost:27066呢?
其实在本节开始时就说了,容器之间是相互独立,想要容器之间相互通信,要建立网络(network),使两个容器可以相互通信。而此时网络的作用就相当于一个网关,起到两个容器之间通信。(网关可以自行百度,不做过多的介绍)。那如何查看网络(network)的网关呢?输入如下代码:

docker network inspect todo-mongo 

todo-mongo的详细信息,我们便可以查看网关的信息

而本地连接为什么又可以是localhost:27066呢?其实在我们第2步创建mongo容器时,对外的ip和端口是 0.0.0.0:27066,查看容器信息:

docker ps -a


此时便可查看。当然,你不输localhost:27066也可以,你也可以输入127.0.0.2:27066也能本地连接docker容器,前提是端口号不能输错!!!!

5、结论

经过上面的步骤,即可实现容器之间的相互通信。当然也可使用docker-compose实现容器之间的通信,该方法本节中不做介绍,可参考docker的官方文档docker-compose。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/963369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号