接上一篇:機緣巧合與Docker結緣
在學習了docker以後,準備把這個神器逐步用到服務器上。
那就開始吧!html
本身就這麼一臺小小服務器,我對docker的使用如何定位呢?
玩docker爲的是可以快速搭建環境
而後把精力都用在開發上
而不是爲了玩docker,把全部服務一股腦都改爲docker,而後配置各類複雜架構…
我只須要先完成幾個小目標。
夠用就好。
逐步深化實戰mysql
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成功
對,這是個人初衷。
在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
因爲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
網上的辦法,讓刪除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容器化
【未完待續】