【實戰】ubuntu使用docker搭建:Nginx + NodeJS + MongoDB

開始

接上一篇:機緣巧合與Docker結緣
在學習了docker以後,準備把這個神器逐步用到服務器上。
那就開始吧!html

選擇與思考

本身就這麼一臺小小服務器,我對docker的使用如何定位呢?
玩docker爲的是可以快速搭建環境
而後把精力都用在開發上
而不是爲了玩docker,把全部服務一股腦都改爲docker,而後配置各類複雜架構…
我只須要先完成幾個小目標。
夠用就好。
逐步深化實戰mysql

小目標一:ubuntu下安裝docker環境

ubuntu中安裝docker,參考了菜鳥的教程:
Ubuntu Docker 安裝
使用的命令有:nginx

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,即該鏡像有漏洞。
在網上查了查,不少人對此表示擔心,但也有一些人表示,本身後續會再對鏡像作好安全措施。
因而我也準備先用吧。畢竟我只是開發測試。sql

小坑

因爲4.0之後開始兼容事務,因而選擇了mongo:4.0.12這個版本。
規劃上,考慮到數據持久化的事宜,要對日誌、配置文件、數據庫存放目錄進行映射。mongodb

因而去鏡像中查找mongodb.conf,發現整個鏡像中並無這個配置文件,而/etc/mongod.conf.orig只是個示例。
真實的數據庫存放目錄爲/data/db,而日誌文件,一直沒找到。
後來在hub.docker.com查看到:docker

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

這樣就簡單了,日誌不須要映射。數據庫

而配置文件,若是須要的話,只須要-v /youconf/mongod.conf:/etc/mongod.conf便可。
但鏡像默認的設置就很好了,因此不須要再映射配置文件。json

咱們建立容器只須要這樣寫:(我加了一個備份文件夾)ubuntu

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篇)vim

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"    //成功恢復

【未完待續】

延伸閱讀:

MongoDb進階實踐之九 Mongodb的備份與還原
MongoDB容器化

【未完待續】

相關文章
相關標籤/搜索