迁移Docker(一):mongodb迁移
# mongo镜像获取及设置
获取mongo
镜像,官方镜像地址。
docker pull mongo
mongo.yml
文件配置如下
version: '3.1'
services:
mongo:
image: mongo
container_name: mongodb
restart: unless-stopped
ports:
- 28018:27017
volumes:
- /workspace/docker/volume/mongodb/data/db:/data/db/
- /workspace/docker/volume/mongodb/mongodb.conf:/etc/mongod.conf
- /workspace/docker/volume/mongodb/mongo-entrypoint/:/docker-entrypoint-initdb.d/
command: --config /etc/mongod.conf
执行以下命令,运行容器
docker-compose -f mongo.yml up -d
# 挂载文件说明
1、将原来mongo
的数据文件,挂载到容器的/data/db
路径下,这样容器删除后,数据库中的数据将不会丢失。
2、将原mongodb.conf
文件,挂载到容器的/etc/mongod.conf
,可以保持原有mongo的配置逻辑。
3、可在将一些初始化的操作文件,挂载到/docker-entrypoint-initdb.d/
目录下,比如初始化设置用户,初始化插入数据等。
# 删除原来安装的mongo
先停止服务
sudo service mongod stop
# 删除服务开机启动文件
/lib/systemd/system/mongodb.service
[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target
[Service]
User=root
RuntimeDirectory=mongodb
RuntimeDirectoryMode=0755
EnvironmentFile=-/etc/default/mongodb
Environment=CONF=/etc/mongodb.conf
Environment=SOCKETPATH=/run/mongodb
ExecStart=/usr/bin/mongod --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
[Install]
WantedBy=multi-user.target
# 卸载相关软件包
sudo apt-get purge mongodb mongodb-clients mongodb-server mongodb-dev mongodb-10gen
sudo apt-get autoremove
# 删除数据文件
sudo rm -r /var/log/mongodb (日志目录)
sudo rm -r /var/lib/mongodb (数据目录)
# 迁移过程中遇到的一些问题
# 一、容器外无法链接成功
1、检查mongo
配置中绑定的ip
地址,不能使用127.0.0.1
,可以删除,或设置为0.0.0.0
2、如果使用命令工具远程链接,需要保持客户端与容器内版本一致,否则也会链接失败。
# 二、直接挂载data
目录到容器内的/data
文件
这样挂载是无法挂载成功的,容器中的mongo
会初始化db
文件夹。
# 三、mongo备份并在容器中恢复
在宿主机执行如下命令,可备份所有数据库数据
mongodump -o /backup
通过如下命令,将数据复制到容器中
docker cp /backup mongodb:/backup
上面的mongodb
为容器名称
进入容器中
docker exec -it mongodb bash
恢复所有数据
mongorestore --dir /backup
