Docker搭建Mongodb
<div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown"><h3 id="docker搭建mongodb">1. 部署Mongodb</h3>
<h4 id="获取docker镜像">1.1 获取docker镜像</h4>
<pre><code class="hljs nginx"><span class="hljs-attribute">docker pull mongo</span></code></pre>
<h4 id="创建mongodb容器">1.2 创建mongodb容器</h4>
<pre><code class="hljs dockerfile">docker <span class="hljs-keyword">run<span class="bash"> --namemy-mongo-p 27017:27017-d mongo --auth</span></span></code></pre>
<blockquote>
<p>如果加需要验证就加--auth,不需要验证,就去掉。默认mongodb是不使用用户认证</p>
</blockquote>
<h4 id="进入容器设置用户">1.3 进入容器设置用户</h4>
<pre><code class="hljs awk">docker exec -it 容器id <span class="hljs-regexp">/bin/bash
mongo
use admin
db.createUser({user:<span class="hljs-string">"root",pwd:<span class="hljs-string">"root",roles:[{role:<span class="hljs-string">'root',db:<span class="hljs-string">'admin'}]}) <span class="hljs-regexp">//创建用户,此用户创建成功,则后续操作都需要用户认证
<span class="hljs-keyword">exit</span></span></span></span></span></span></span></code></pre>
<p>或者直接进入admin</p>
<pre><code class="hljs awk">docker exec -it ly-mongo mongo admin
db.createUser({user:<span class="hljs-string">"root",pwd:<span class="hljs-string">"root",roles:[{role:<span class="hljs-string">'root',db:<span class="hljs-string">'admin'}]}) <span class="hljs-regexp">//创建用户,此用户创建成功,则后续操作都需要用户认证
<span class="hljs-keyword">exit
</span></span></span></span></span></span></code></pre>
<h4 id="测试">1.4 测试</h4>
<pre><code class="hljs nginx"><span class="hljs-attribute">mongo宿主机ip/admin-utest -p</span></code></pre>
<p>查看是否连接成功</p>
<p> </p>
<h3 id="维护mongodb">2.维护mongoDB</h3>
<h4 id="指定mongodb配置文件">2.1 指定MongoDB配置文件</h4>
<p>当我们需要修改配置文件时,我们只需要在宿主机上创建一个mongodb.conf文件,并将该文件所在的文件夹映射到容器的/data/configdb文件夹中,同时,在容器的启动命令中添加--configsvr参数即可。</p>
<pre><code class="hljs dockerfile">docker <span class="hljs-keyword">run<span class="bash"> --name some-mongo -d mongo --configsvr</span></span></code></pre>
<h4 id="数据持久化">2.2 数据持久化</h4>
<p>在使用MongoDB的容器时,数据持久化有很多种方式,下面我们将描述一种推荐的方式:</p>
<ul>
<li>
<p>在宿主机上创建一个数据存储目录,并将其映射到容器中的目录中。<br>这将数据库文件放在主机系统中的已知位置,并便于主机系统上的工具和应用程序访问文件。<br>缺点是用户需要确保目录存在,例如,主机系统上的目录权限和其他安全机制配置正确。<br>使用方法如下:</p>
<p>在宿主机中创建一个目录,例如/my/own/datadir。<br>如下命令启动容器:</p>
</li>
</ul>
<pre><code class="hljs groovy">docker run --name some-mongo -v <span class="hljs-regexp">/my/own<span class="hljs-regexp">/datadir:/data/db -d <span class="hljs-string">mongo:tag</span></span></span></code></pre>
<h4 id="数据库授权">2.3 数据库授权</h4>
<p>默认情况下,Mongo数据库没有添加认证约束,也就是说任何人只要知道数据库服务的地址和端口,就可以正常访问数据库并对数据库进行增删改查。<br>为了增强数据库的安全性,我们需要对数据库添加授权认证。<br>添加方式如下:</p>
<p>在启动数据库容器命令中添加--auth参数。</p>
<pre><code class="hljs dockerfile">docker <span class="hljs-keyword">run<span class="bash"> --name some-mongo -d mongo --auth</span></span></code></pre>
<p>使用exec命令进入命令行,并添加用户名和密码。</p>
<pre><code class="hljs less"><span class="hljs-selector-tag">docker <span class="hljs-selector-tag">exec <span class="hljs-selector-tag">-it <span class="hljs-selector-tag">some-mongo <span class="hljs-selector-tag">mongo <span class="hljs-selector-tag">admin
<span class="hljs-selector-tag">db<span class="hljs-selector-class">.createUser({ <span class="hljs-attribute">user: <span class="hljs-string">'jsmith', <span class="hljs-attribute">pwd: <span class="hljs-string">'some-initial-password', <span class="hljs-attribute">roles: [ { <span class="hljs-attribute">role: <span class="hljs-string">"userAdminAnyDatabase", <span class="hljs-attribute">db: <span class="hljs-string">"admin" } ] });</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h4 id="数据库备份">2.4 数据库备份</h4>
<p>通常情况下,我们需要对数据库进行备份。<br>首先,我们需要将本地磁盘的某个文件夹映射到容器中的备份文件夹中:</p>
<pre><code class="hljs nginx"><span class="hljs-attribute">docker run --name mongo -v /mnt/mongo/backup:/data/backup -d mongo</span></code></pre>
<p>数据库备份的方式如下:</p>
<pre><code class="hljs dos">docker exec mongo sh -c 'exec var=`<span class="hljs-built_in">date +<span class="hljs-variable">%Y%m<span class="hljs-variable">%d%H%M` &amp;&amp; mongodump -h localhost --port <span class="hljs-number">27017 -u test -p test1 -d dbname -o /data/backup/$var_test1.dat'</span></span></span></span></code></pre>
<h3> </h3>
<h3 id="推荐用法">3.实际使用步骤(推荐用法)</h3>
<p>执行如下命令拉取Mongo镜像:</p>
<pre><code class="hljs groovy">docker pull mongo
创建Mongo专用的文件夹:
cd /opt
mkdir mongodb
cd ./mongodb
mkdir data
mkdir backup
执行如下命令启动MongoDB:
docker run --name mongo -p <span class="hljs-number">27017:<span class="hljs-number">27017 -v <span class="hljs-regexp">/opt/mongodb<span class="hljs-regexp">/data:/data<span class="hljs-regexp">/db -v /opt<span class="hljs-regexp">/mongodb/<span class="hljs-string">backup:<span class="hljs-regexp">/data/backup -d mongo --auth</span></span></span></span></span></span></span></span></code></pre>
<p>接下来,我们需要进入容器的命令行去创建用户名和密码:</p>
<pre><code class="hljs less"><span class="hljs-selector-tag">docker <span class="hljs-selector-tag">exec <span class="hljs-selector-tag">-it <span class="hljs-selector-tag">mongo <span class="hljs-selector-tag">mongo <span class="hljs-selector-tag">admin
<span class="hljs-selector-tag">db<span class="hljs-selector-class">.createUser({ <span class="hljs-attribute">user: <span class="hljs-string">'admin', <span class="hljs-attribute">pwd: <span class="hljs-string">'admin123456', <span class="hljs-attribute">roles: [ { <span class="hljs-attribute">role: <span class="hljs-string">"userAdminAnyDatabase", <span class="hljs-attribute">db: <span class="hljs-string">"admin" } ] });<br>db.auth("admin","admin123456");
<span class="hljs-selector-tag">use <span class="hljs-selector-tag">test;
<span class="hljs-selector-tag">db<span class="hljs-selector-class">.createUser({<span class="hljs-attribute">user:<span class="hljs-string">"test",<span class="hljs-attribute">pwd:<span class="hljs-string">"123456",<span class="hljs-attribute">roles:[<span class="hljs-string">"readWrite"]});
<span class="hljs-selector-tag">db<span class="hljs-selector-class">.auth(<span class="hljs-string">"test",<span class="hljs-string">"123456")</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>在运行一段时间以后,我们可以执行如下命令进行数据库备份:</p>
<pre><code class="hljs dos">docker exec mongo sh -c 'exec var=`<span class="hljs-built_in">date +<span class="hljs-variable">%Y%m<span class="hljs-variable">%d%H%M` &amp;&amp; mongodump -h localhost --port <span class="hljs-number">27017 -u jsmith -p password -d dbname -o /data/backup/$var_test1.dat'</span></span></span></span></code></pre>
</div>
<div id="MySignature">
<div id="div_digga">
<div class="diggit"><span class="diggnum"> </span></div>
<div class="diggit"> </div>
</div>
</div>
<div id="blog_post_info_block"> </div><br><br>
来源:https://www.cnblogs.com/panchanggui/p/12047579.html
頁:
[1]