MongoDB Docker 鏡像制作與部署完整流程
1. Dockerfile 文件制作
創(chuàng)建無后綴的 Dockerfile 文件:
# Dockerfile文件格式 # This dockerfile uses the mongo:7.0.25 image # VERSION 1 - EDITION 1 # Author: cxnb # Command format: Instruction [arguments / command] .. # 1、第一行必須指定基礎鏡像信息 FROM mongo:7.0.25 # 2、維護者信息 MAINTAINER cxnb # 3、替換配置文件為自己的配置文件 # COPY ./mongod.conf /etc/mongod.conf # 4、復制創(chuàng)建cxnb數(shù)據(jù)庫腳本到指定目錄 COPY ./init-db.sh /docker-entrypoint-initdb.d/ RUN chmod +x /docker-entrypoint-initdb.d/init-db.sh # 5、指定用戶名密碼 ENV MONGO_INITDB_ROOT_USERNAME=admin ENV MONGO_INITDB_ROOT_PASSWORD=admin123 # 6、標記容器掛載目錄 VOLUME /data/db VOLUME /var/log/mongodb/mongod.log # 7、標記對外公布的端口 EXPOSE 27017 # 8、設定時區(qū),如果不設定時區(qū),容器時間和主機時間會不一致。 ENV TZ=Asia/Shanghai # 9、進入容器后自動運行的命令。 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
2. MongoDB 配置文件
創(chuàng)建 mongod.conf 文件:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
# engine:
# mmapv1:
wiredTiger:
engineConfig:
cacheSizeGB: 2
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:3. 數(shù)據(jù)庫初始化腳本
創(chuàng)建 init-db.sh 腳本:
#!/bin/bash
# 連接到 MongoDB 服務器
# 如果是4.0版本,則用mongo
# 如果先用mongo命令配置,容器啟動生成了mongodb的/data/db文件,則換成mongosh配置時,需要先刪除db文件夾中的內(nèi)容。
mongosh <<EOF
use admin
db.auth('admin', 'admin123')
use cxnb
db.createUser({
user: 'admin',
pwd: 'admin123',
roles: [{
role: 'readWrite',
db: 'cxnb'
}]
})
EOF重要提示:確保腳本具有執(zhí)行權限:
chmod +x init-db.sh
4. 文件組織
將以下文件放置在宿主機的同一目錄中:
dockerfile(無后綴)mongod.confinit-db.sh
目錄結構示例:
/mongodb-docker/ ├── dockerfile ├── mongod.conf └── init-db.sh
5. 構建 Docker 鏡像
docker build -t mongodb:7.0.25 . -f dockerfile
注意:命令末尾的 . 表示使用當前目錄作為構建上下文,不能省略。
6. 創(chuàng)建并運行容器
6.1 準備宿主機目錄
# 創(chuàng)建數(shù)據(jù)目錄 mkdir -p /mnt/mongodb/data && chmod 777 /mnt/mongodb/data # 創(chuàng)建日志目錄 mkdir -p /mnt/mongodb/logs && chmod 777 /mnt/mongodb/logs # 創(chuàng)建配置目錄 mkdir -p /mnt/mongodb/conf && chmod 777 /mnt/mongodb/conf # 復制配置文件 cp ./mongod.conf /mnt/mongodb/conf/mongod.conf
6.2 運行容器
docker run \ --privileged=true \ --name mongodb \ -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAME=admin \ -e MONGO_INITDB_ROOT_PASSWORD=admin123 \ -v /mnt/mongodb/data:/data/db \ -v /mnt/mongodb/logs:/var/log/mongodb \ -v /mnt/mongodb/conf/mongod.conf:/etc/mongod.conf \ -v /etc/localtime:/etc/localtime \ -d \ mongodb:7.0.25 --auth
可選參數(shù):
- 添加
--restart=always使容器自動重啟 - 添加
--network custom-network指定自定義網(wǎng)絡
6.3 驗證容器狀態(tài)
# 檢查容器運行狀態(tài) docker ps -a | grep mongodb # 查看容器日志 docker logs mongodb # 進入容器 docker exec -it mongodb mongosh -u admin -p admin123
7. 鏡像導出與導入
7.1 導出鏡像
# 導出鏡像為tar文件 docker save mongodb:7.0.25 -o /opt/docker/images/mongodb_7.0.25.tar
7.2 壓縮鏡像
cd /opt/docker/images gzip mongodb_7.0.25.tar
7.3 導入鏡像
# 方法一:直接導入壓縮文件 docker load -i /opt/docker/images/mongodb_7.0.25.tar.gz # 方法二:先解壓再導入 gunzip mongodb_7.0.25.tar.gz docker load -i mongodb_7.0.25.tar
8. 擴展功能
8.1 數(shù)據(jù)庫備份與恢復
# 備份數(shù)據(jù)庫 docker exec mongodb mongodump -u admin -p admin123 --authenticationDatabase admin -o /backup/ docker cp mongodb:/backup/ ./local_backup/ # 恢復數(shù)據(jù)庫 docker cp ./local_backup/ mongodb:/restore/ docker exec mongodb mongorestore -u admin -p admin123 --authenticationDatabase admin /restore/
8.2 使用 Docker Compose
創(chuàng)建 docker-compose.yml 文件:
version: '3.8'
services:
mongodb:
build:
context: .
dockerfile: dockerfile
container_name: mongodb
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin123
volumes:
- /mnt/mongodb/data:/data/db
- /mnt/mongodb/logs:/var/log/mongodb
- /mnt/mongodb/conf/mongod.conf:/etc/mongod.conf
- /etc/localtime:/etc/localtime
restart: unless-stopped
command: ["--auth"]啟動服務:
docker-compose up -d
9. 安全建議
- 修改默認密碼:生產(chǎn)環(huán)境中務必使用強密碼替換默認密碼
- 網(wǎng)絡隔離:將 MongoDB 容器放置在內(nèi)部網(wǎng)絡中,避免直接暴露到公網(wǎng)
- 定期更新:定期更新基礎鏡像以獲取安全補丁
- 備份策略:建立定期備份機制
- 訪問控制:限制只有必要的主機可以訪問 MongoDB 端口
10. 故障排除
常見問題:
- 權限錯誤:確保宿主機目錄具有適當權限
- 配置文件錯誤:檢查 YAML 格式和縮進
- 端口沖突:確保 27017 端口未被占用
- 初始化失敗:檢查 init-db.sh 腳本格式和權限
調(diào)試命令:
# 查看容器日志
docker logs mongodb
# 進入容器檢查文件
docker exec -it mongodb bash
# 檢查 MongoDB 服務狀態(tài)
docker exec mongodb mongosh --eval "db.adminCommand('serverStatus')"通過以上步驟,您可以成功創(chuàng)建、部署和管理基于 Docker 的 MongoDB 實例。
到此這篇關于MongoDB Docker 鏡像制作與部署完整流程的文章就介紹到這了,更多相關MongoDB Docker 鏡像部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker和docker-compose的版本對應關系的實現(xiàn)
本文主要介紹了docker和docker-compose的版本對應關系的實現(xiàn),兩者雖非強制綁定,但新版本docker-compose可能依賴更高版本Docker引擎的API,具有一定的參考價值,感興趣的可以了解一下2025-06-06
總結Docker不適合部署數(shù)據(jù)庫的7大原因
在本篇文章里小編給大家整理一篇關于Docker不適合部署數(shù)據(jù)庫的7大原因,有興趣的朋友們可以參考學習下。2021-01-01

