天天看點

MongoDB 安裝

1.  yum方式安裝

1、添加一個yum源

建立一個 /etc/yum.repos.d/mongodb-org-5.0.repo 檔案

[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
           

2、安裝MongoDB包

sudo yum install -y mongodb-org
           
MongoDB 安裝

預設配置檔案:/etc/mongod.conf

預設資料檔案目錄:/var/lib/mongo

預設日志檔案目錄:/var/log/mongodb

3、可以自定義配置檔案,更改某些設定

比如,指定新的資料存儲目錄(例如:/some/data/directory)或者 指定新的日志檔案路徑(例如:/some/log/directory/mongod.log)

最後,一定要確定運作MongoDB的使用者有權限通路這些目錄。假設我們新建立了一個使用者叫zhangsan,我們打算用zhangsan這個使用者來運作MongoDB,那麼必須確定zhangsan可以通路/some/data/directory和/some/log/directory/mongod.log

于是,可以這樣操作

sudo chown -R zhangsan:zhangsan <directory>
mongod --config /etc/mongod.conf           

PS:如果更改運作 MongoDB 程序的使用者,則必須授予新使用者通路這些目錄的權限。

4、啟動MongoDB

sudo systemctl start mongod
           

5、檢視MongoDB運作狀态

sudo systemctl status mongod
           

6、停止MongoDB

sudo systemctl stop mongod
           

7、重新開機MongoDB

sudo systemctl restart mongod
           

8、使用MongoDB 

mongosh
           

在與 mongod 相同的主機上啟動 mongosh 會話。可以在不帶任何參數的情況下運作 mongosh,這樣的話就會連接配接本地 localhost 上運作的 mongod,預設端口為 27017。

MongoDB 安裝

9、help

10、解除安裝MongoDB

# 停止服務
sudo systemctl stop mongod
# 删除安裝包
sudo yum erase $(rpm -qa | grep mongodb-org)
# 删除資料庫和日志檔案
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo
           

11、快速開始

MongoDB 将文檔存儲在集合中。 集合類似于關系資料庫中的表。 如果集合不存在,MongoDB 會在首次存儲該集合的資料時建立該集合。

MongoDB 安裝

12、包名稱和描述

  • mongodb-org-database : 是一個metapackage,會自動安裝下列元件包
  1. mongodb-org-server : 包含 mongod 守護程序、相關的初始化腳本和配置檔案 (/etc/mongod.conf)
  2. mongodb-org-mongos : 包含 mongos 守護程序
  3. mongodb-org-shell : 包含曆史遺留的 mongo shell
  • mongodb-mongosh : 包含 MongoDB Shell (mongosh)
  • mongodb-org-tools : 是一個metapackage,會自動安裝以下元件包
  1. mongodb-database-tools : 包含下列MongoDB資料庫工具(mongodump 、mongorestore 、bsondump 、mongoimport 、mongoexport 、mongostat 、mongotop 、mongofiles)
  2. mongodb-org-database-tools-extra : 包含install_compass腳本

13、關閉防火牆

systemctl stop|start|status firewalld
           

2.  docker方式安裝

下載下傳鏡像

docker pull mongo           

指定版本運作容器

1、啟動一個 mongo server 執行個體

docker run --name some-mongo -d mongo:tag
           

2、從另一個 Docker 容器連接配接到 MongoDB

以下示例啟動另一個 MongoDB 容器執行個體,并針對上面示例中的原始 MongoDB 容器運作 mongo 指令行用戶端,進而允許您對資料庫執行個體執行 MongoDB 語句:

docker run -it --network some-network --rm mongo mongo --host some-mongo test
           

 (PS:這裡解釋一下,這就相當于是在B容器中遠端連接配接到A容器,相當于是本地mongo用戶端連接配接到遠端mongo伺服器。由于現在mongo是運作在docker容器裡的,是以我們可以把運作mongo server的容器了解成一台機器A,為了能夠在另外一台機器B中連接配接到A,需要B上至少安裝了mongo shell,這就是mongo client 連接配接到遠端 mongo server)

3、容器shell通路并檢視MongoDB日志

docker exec 指令允許你在 Docker 容器内運作指令。 以下指令行将為你提供 mongo 容器内的 bash shell: 

docker exec -it some-mongo bash
           

MongoDB 伺服器日志可通過 Docker 的容器日志獲得:

docker logs some-mongo           

4、幫助

檢視幫助,可以知道mongo容器運作時可以帶哪些參數

docker run -it --rm mongo --help
           

5、設定WiredTiger緩存大小限制

docker run --name some-mongo -d mongo --wiredTigerCacheSizeGB 1.5           

6、用一個自定義的MongoDB配置檔案

mongod 預設不讀取配置檔案,是以需要通過 --config 選項來指定配置檔案的路徑。 通過從 mongo 建立自定義 Dockerfile 或将其從主機挂載到容器來建立自定義配置檔案并将其放入容器中。 

例如,假設/my/custom/mongod.conf是自定義的配置檔案,那麼在啟動MongoDB容器的時候可以這樣:

docker run --name some-mongo -v /my/custom:/etc/mongo -d mongo --config /etc/mongo/mongod.conf           

預設的配置檔案(/etc/mongod.conf)如下:

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:           

7、環境變量

啟動 mongo 鏡像時,可以通過在 docker run 指令行中傳遞一個或多個環境變量來調整 MongoDB 執行個體的初始化。

MONGO_INITDB_ROOT_USERNAME, MONGO_INITDB_ROOT_PASSWORD 這兩個變量一起使用,建立一個新使用者并設定該使用者的密碼。 該使用者是在管理者(admin)身份驗證資料庫中建立的,并被賦予 root 角色,這是一個“superuser(超級使用者)”角色。 

下面是一個例子,使用這兩個變量建立一個MongoDB執行個體,然後使用 mongo cli 連接配接到admin身份認證資料庫。

首先,啟動容器,建立MongoDB執行個體 

docker run -d --network some-network --name some-mongo \
    -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
    -e MONGO_INITDB_ROOT_PASSWORD=secret \
    mongo           

連接配接到前面建立的mongo server執行個體容器

docker run -it --rm --network some-network mongo \
    mongo --host some-mongo \
        -u mongoadmin \
        -p secret \
        --authenticationDatabase admin \
        some-db
           

(PS:指令行中的mongo是鏡像的名字,而 mongod 是 MongoDB 系統的主要守護程序)

要建立使用者,這兩個變量都是必需的。 如果二者都存在,那麼 MongoDB 将啟用身份驗證(mongod --auth)

MongoDB 中的身份驗證相當複雜,是以更複雜的使用者設定通過 /docker-entrypoint-initdb.d/ 顯式留給使用者自己設定

MONGO_INITDB_DATABASE 這個變量允許您指定用于/docker-entrypoint-initdb.d/*.js中建立腳本的資料庫名稱

MongoDB 設計的最基本的原則是:"create on first use" (第一次使用時建立)

作為通過環境變量傳遞敏感資訊的替代方法,_FILE 可以附加到先前列出的環境變量中,進而導緻初始化腳本從容器中存在的檔案中加載這些變量的值。特别是,這可用于從存儲在 /run/secrets/<secret_name> 檔案中的 Docker 密鑰存儲中加載密碼。目前,隻支援MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 。

docker run --name some-mongo -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root -d mongo
           

8、認證

MongoDB 中的身份驗證相當複雜,參見:

mongod --auth

Security > Authentication 

Security > Role-Based Access Control 

Security > Role-Based Access Control > Built-In Roles 

Security > Enable Auth (tutorial) 

9、資料存儲在哪裡 

有兩種方法可以存儲在 Docker 容器中運作的應用程式使用的資料。

方式一:讓Docker使用自己的内部卷管理将資料庫檔案寫入主機系統上的磁盤,進而管理資料庫資料的存儲。這是預設設定,對使用者來說非常簡單且相當透明。缺點是,對于直接運作在主機系統上的工具和應用程式(即外部容器)來說,可能很難找到這些檔案。

方式二:在主控端系統(容器外部)上建立一個資料目錄,并将其挂載到容器内部可見的目錄。這會将資料庫檔案放置在主機系統上的已知位置,并使主機系統上的工具和應用程式可以輕松通路這些檔案。 缺點是,使用者需要確定目錄存在,例如,主機系統上的目錄權限和其他安全機制是正确設定的。

(PS:總結一下,兩種方式,一種是放到容器内部,另一種是放到容器外部)

由docker自己管理這種預設行為就不在這裡示範了,下面示範一下将容器外部的目錄挂載到容器這種方式:

首先,在主控端上建立一個目錄,比如叫 /my/own/datadir

然後,在啟動容器的時候使用 -v 選項挂載目錄

docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo           

這個指令中,-v /my/own/datadir:/data/db 将主機系統上的/my/own/datadir目錄挂載到容器的/data/db。docker容器安裝mongodb時,預設情況下MongoDB會将它的資料存放在/data/db目錄中。

MongoDB 安裝
MongoDB 安裝

備忘錄

docker network create my-network
docker network ls
docker run -d --network my-network --name my-mongo mongo
docker run -it --rm --network my-network mongo mongo --host my-mongo test
docker exec -it my-mongo bash
           

10、建立資料庫轉儲(dump)

docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive
           

11、備忘錄

docker run --network some-network --name some-mongo -v /my/custom:/etc/mongo -p 27017:27017 -d mongo --config /etc/mongo/mongod.conf

docker run --name some-mongo -p 27017:27017 -d mongo --auth
docker exec -it some-mongo mongo admin

> db.createUser({user:"root",pwd:"123456",roles:["root"]})


docker run -d --name some-mongo \
    -e MONGO_INITDB_ROOT_USERNAME=admin \
    -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    mongo


docker exec -it some-mongo mongo
           
MongoDB 安裝

文檔:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

https://registry.hub.docker.com/_/mongo 

https://docs.docker.com/engine/reference/commandline/network/ 

上一篇: MongoDB Security