上班摸鱼 發表於 2023-7-26 18:24:00

如何在Docker上安装MongoDB(MongoDB安装教程)

<p>@@mongodb docker</p>
<p>&nbsp;</p>
<p><strong>前言</strong></p>
<p>随着越来越多的应用部署到了Docker容器,作为常见基础组件的MongoDB也越来越多的需要在Docker上部署,为了快速帮助同学们把MongoDB在Docker容器上部署起来,我特意整理了这篇如何把MongoDB安装在Docker上的安装教程。废话不多说,我们先花了几分钟开始的把MongoDB环境搭建起来。</p>
<p>&nbsp;</p>
<p><strong>查看可用的MongoDB版本</strong><br>访问DokcerHub中的MongoDB镜像库地址:https://hub.docker.com/_/mongo/tags可以通过 Sort by 查看其他版本的MongoDB,查看最新版本MongoDB镜像(mongo:latest):https://hub.docker.com/_/mongo/tags?page=1&amp;name=latest<br><img src="https://img.duidaima.com/PorkBelly/Article/Big/052e13b6-cb8d-4d1a-a3bd-7f9e279794df.png" alt=""><br>&nbsp;此外,我们还可以用docker search mongo命令来查看可用版本:&nbsp;<br><img src="https://img.duidaima.com/PorkBelly/Article/Big/1844f50f-cfe2-4600-8eba-f98bc63ad0a5.png" alt=""><br><strong>拉取最新版本的MongoDB镜像</strong></p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>docker pull mongo:latest</li>

</ol>
<p>注意:tag是可选的,tag表示标签,多为软件的版本,默认是latest版本(最新版)<br><img src="https://img.duidaima.com/PorkBelly/Article/Big/898fbd38-759c-410d-bf1a-4777173f3bc3.png" alt=""><br><strong>验证MongoDB镜像是否成功拉取到本地</strong><br>使用以下命令来查看MongoDB镜像是否成功拉取到本地:</p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>docker images</li>

</ol>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/e42add2e-b7d2-49d6-95bb-7359dd45456e.png" alt=""><br><strong>创建并运行一个MongoDB容器</strong></p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>docker run -itd --name mongo-test -p 27017:27017 mongo --auth</li>

</ol>
<p><strong><em>参数说明:</em></strong><br><strong><em>-itd</em></strong>:其中,i是交互式操作,t是一个终端,d指的是在后台运行。<br><strong><em>--name mongo-test</em></strong>:容器名称<br><strong><em>-p 27017:27017&nbsp;</em></strong>:映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。<br><strong><em>--auth</em></strong>:需要密码才能访问容器服务(注意:安全问题,MongoDB默认是不开启权限验证的,不过设置了这里就相当于修改MongoDB的配置auth=ture启用权限访问)。<br><img src="https://img.duidaima.com/PorkBelly/Article/Big/8750db86-a251-4c34-887d-8a580a802967.png" alt=""></p>
<p>&nbsp;</p>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/bd974163-ec4c-4def-8b98-c3bf9d5096a5.png" alt=""><br><strong>进入创建的MongoDB容器</strong></p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>docker exec -itmongo-test mongosh</li>

</ol>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/42dbb321-0f0d-4570-be6b-e4d7ad6c2a21.png" alt=""><br><strong>MongoDB报错"ongoServerError: not authorized on admin to execute command"</strong><br>MongoDB默认是不需要用户密码就可以连接的,如果使用命令报错"ongoServerError: not authorized on admin to execute command ",则表示当前登陆用户不具备相应权限。<br><img src="https://img.duidaima.com/PorkBelly/Article/Big/1673085d-2b74-4b75-b13a-f20ca4b2a56d.png" alt=""><br>解决办法:在admin数据库中通过创建一个用户,赋予用户root权限。</p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li># 进入admin数据库</li>
<li>use admin</li>
<li># 创建一个超级用户</li>
<li>db.createUser(</li>
<li>    {</li>
<li>      user:"root",</li>
<li>      pwd:"123456",</li>
<li>      roles:[{role:"root",db:"admin"}]</li>
<li>    }</li>
<li>);</li>
<li>#授权登录</li>
<li>db.auth('root','123456')</li>

</ol>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/24416914-61cf-4034-97c7-846e48a8d7ae.png" alt=""><br><strong>MongoDB用户权限管理</strong><br><strong>MongoDB添加用户命令说明</strong><br>1.user字段,为新用户的名字。<br>2.pwd字段,用户的密码。<br>3.cusomData字段,为任意内容,例如可以为用户全名介绍。<br>4.roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。<br>5.超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。<br>6.db是指定数据库的名字,admin是管理数据库。<br>7.不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。</p>
<p>&nbsp;</p>
<p><br><strong>首先切换到admin数据库中</strong></p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li># 进入admin数据库</li>
<li>use admin</li>

</ol>
<p><strong>创建admin超级管理员用户</strong><br>指定用户的角色和数据库:<br>(注意此时添加的用户都只用于admin数据库,而非你存储业务数据的数据库)<br>(在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)</p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>db.createUser(</li>
<li>{ user: "admin",</li>
<li>    customData:{description:"superuser"},</li>
<li>    pwd: "admin",</li>
<li>    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]</li>
<li>}</li>
<li>)</li>

</ol>
<p><strong>创建一个不受访问限制的超级用户</strong><br>拥有所有权限,不受任何限制</p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>db.createUser(</li>
<li>    {</li>
<li>      user:"root",</li>
<li>      pwd:"123456",</li>
<li>      roles:[{role:"root",db:"admin"}]</li>
<li>    }</li>
<li>);</li>

</ol>
<p><strong>创建一个业务数据库管理员用户</strong><br><em>只负责某一个或几个数据库的増查改删</em></p>
<h3 class="layui-code-h3">codeduidaima.com</h3>
<ol class="layui-code-ol">
<li>db.createUser({</li>
<li>    user:"user001",</li>
<li>    pwd:"123456",</li>
<li>    customData:{</li>
<li>      name:'jim',</li>
<li>      email:'jim@qq.com',</li>
<li>      age:18,</li>
<li>    },</li>
<li>    roles:[</li>
<li>      {role:"readWrite",db:"db001"},</li>
<li>      {role:"readWrite",db:"db002"},</li>
<li>      'read'// 对其他数据库有只读权限,对db001、db002是读写权限</li>
<li>    ]</li>
<li>})</li>

</ol>
<p><strong>MongoDB数据库角色说明</strong><br>数据库用户角色:read、readWrite;<br>数据库管理角色:dbAdmin、dbOwner、userAdmin;<br>集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;<br>备份恢复角色:backup、restore;<br>所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase<br>超级用户角色:root<br>内部角色:__system<br><strong>MongoDB中的role详解</strong><br>Read:允许用户读取指定数据库<br>readWrite:允许用户读写指定数据库<br>dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile<br>userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户<br>clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限<br>readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限<br>readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限<br>userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限<br>dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限<br>root:只在admin数据库中可用。超级账号,超级权限<br><strong>服务器配置27017的开放端口</strong><br><img src="https://img.duidaima.com/PorkBelly/Article/Big/de9ef55e-9ac8-4183-bee0-dc9d084724e9.png" alt=""><br><strong>Navicat连接mongoDB并创建集合和添加数据</strong><br><strong>1.连接MongoDB点击这个位置</strong><br><img src="https://img.duidaima.com/PorkBelly/Article/Big/08a517e3-faad-42d2-98d2-d8ab0e1596d7.png" alt=""><br><strong>2、连接参数介绍:</strong><br><strong><em>stand alone:独立的</em></strong><br><strong><em>shard cluster:分片集群</em></strong><br><strong><em>replica set:复制集</em></strong><br><strong><em>SRV record:</em></strong><br>SRV记录是DNS服务器的数据库中支持的一种资源记录的类型,它记录了哪台计算机提供了哪个服务这么一个简单的信息。<br>SRV 记录:一般是为Microsoft的活动目录设置时的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。<br><br>为了活动目录能够正常的工作,DNS服务器必须支持服务定位(SRV)资源记录,资源记录把服务名字映射为提供服务的服务器名字。活动目录客户和域控制器使用SRV资源记录决定域控制器的IP地址。一般情况下,我们连接只需要连接主库查数据,所以选择独立的这个连接方式就可以,填写好常规参数可以点击测试连接是否正常,即可连接!<br><img src="https://img.duidaima.com/PorkBelly/Article/Big/46461c7a-bfac-4f60-a67f-c105510b2de8.png" alt=""><br><strong>3、新建MongoDB数据库(MyMondoDBTest)</strong><br>&nbsp;<img src="https://img.duidaima.com/PorkBelly/Article/Big/8b82b425-9659-4b8a-acc8-1ae98bfcf2e9.png" alt=""><br><strong>4、新建MongoDB文档(Books)并添加数据</strong><br><img src="https://img.duidaima.com/PorkBelly/Article/Big/3b5e4d1e-411b-429c-8f56-697e1f7b2a19.png" alt=""></p>
<p>&nbsp;</p>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/d271e7d4-9cfd-42ea-8785-15f75a1f3db7.png" alt=""></p>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/0d378182-cd50-4772-89be-27eff6f307cb.png" alt=""></p>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/c3962ead-d60f-4e8f-8edc-21222ad6781d.png" alt=""></p>
<p><img src="https://img.duidaima.com/PorkBelly/Article/Big/77915c3c-2631-47ee-be3d-0c59f2147e22.png" alt=""></p>
<p>&nbsp;</p>
<p>转&nbsp;https://www.duidaima.com/Group/Topic/ArchitecturedDesign/9182</p><br><br>
来源:https://www.cnblogs.com/wl-blog/p/17583270.html
頁: [1]
查看完整版本: 如何在Docker上安装MongoDB(MongoDB安装教程)