ubuntu使用docker搭建:Nginx + NodeJS + MongoDB

开始

接上一篇:机缘巧合与Docker结缘

在学习了docker之后,准备把这个神器逐步用到服务器上。

那就开始吧!

选择与思考

自己就这么一台小小服务器,我对docker的使用如何定位呢?

玩docker为的是能够快速搭建环境

然后把精力都用在开发上

而不是为了玩docker,把所有服务一股脑都改成docker,然后配置各种复杂架构…

我只需要先完成几个小目标。

够用就好。

逐步深化实战

小目标一:ubuntu下安装docker环境

ubuntu中安装docker,参考了菜鸟的教程:

Ubuntu Docker 安装

使用的命令有:

uname -r                                //3.10以上才可以安装
wget -qO- https://get.docker.com/ | sh  //全自动,嗖嗖嗖
sudo usermod -aG docker ubuntu          //以后docker命令不用sudo
sudo vim /etc/docker/daemon.json        //加入163的镜像如下:

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

docker run hello-world                  //hello-world成功

小目标二:docker + mongodb

对,这是我的初衷。

关于安全

在hub.docker.com中搜索mongodb,找到官方的镜像,居然发现大部分都标有 This image has vulnerabilities ,即该镜像有漏洞。

在网上查了查,很多人对此表示担忧,但也有一些人表示,自己后续会再对镜像做好安全措施。

于是我也准备先用吧。毕竟我只是开发测试。

小坑

由于4.0以后开始兼容事务,于是选择了mongo:4.0.12这个版本。

规划上,考虑到数据持久化的事宜,要对日志、配置文件、数据库存放目录进行映射。

于是去镜像中查找mongodb.conf,发现整个镜像中并没有这个配置文件,而 /etc/mongod.conf.orig 只是个示例。

真实的数据库存放目录为 /data/db ,而日志文件,一直没找到。

后来在 hub.docker.com 查看到:

The MongoDB Server log is available through Docker's container log:
$ docker logs some-mongo

这样就简单了,日志不需要映射。

而配置文件,如果需要的话,只需要 -v /youconf/mongod.conf:/etc/mongod.conf 即可。

但镜像默认的设置就很好了,所以不需要再映射配置文件。

我们创建容器只需要这样写:(我加了一个备份文件夹)

docker run -d -p 27017:27017 --name mymgdb -v /youdata/db:/data/db -v /youdata/backup:/data/backup mongo:4.0.12

还有--always、--rm、-h等常用参数备查,具体参考: Docker命令详解(run篇)

docker占用空间的提醒

由于volume机制的存在,某些镜像比如mongodb、mysql,如果在docker run 的时候没有映射目录,docker会自动创建volume,而nginx、httpd、alpine则默认不会创建volume。

参数资料: Docker学习笔记(6)——Docker Volume

由于volume目的是持久化,那么删除容器之后,volumn会保留。

作为小白的我,这几天尝试了很多次mongodb的创建、删除。硬盘容量飞速下降。

这才发现是volume的原因。

甚至有网友遇到了玩docker把服务占满的情况。

以下几个命令,能帮助你查看docker占用资源的情况:

docker system df        //查看image、容器、volume等的数量和占用空间情况
docker system prune     //删除所有未使用数据,容器、volume、网络、挂起的镜像
docker volume ls        //列出所有volume
docker volume rm id     //删除指定volume
docker volume prune     //删除所有未使用的volume
docker image prune      //删除所有未使用的image
docker container prune  //删除所有未使用的prune

关于prune可以查看 Prune unused Docker objects

遇到个小问题:mongodb无法启动,错误代码(code=exited, status=100)

网上的办法,让删除mongod.lock和storage.bson,一般只删除第一个就解决问题了。

但我两个都删除了还是不行。

于是看了这个 Mongod Service start exits with code 100

下面有个54票的答案,方法很简单:

cd /var/lib/mongodb             //cd到你的数据库存放目录
sudo chown -R mongodb:mongodb * //在运行命令前你可以先ll看一下当前所属用户,是999

备份与恢复

官方 hub.docker.com 给出的办法是:

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

然后我尝试了一下,成功了:

docker exec mymgdb sh -c 'exec mongodump -d test --archive' > /data/backup/test.archive

但是在恢复的时候,就很难再把备份文件传进去。

于是放弃这种方法。

采用下文提供的办法:

Docker搭建MongoDB
docker exec mymgdb sh -c "exec mongorestore --archive=/data/backup/xx.archive"    //成功恢复

【未完待续】

延伸阅读:

【未完待续】

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章