這篇會講如何在Docker上部署一個NodeJS+MongoDB的application,
所以會分二個部分來講,
- 在Docker上部署MongoDB
- 在Docker上部署NodeJS+Express
1. 在Docker上部署MongoDB
要在Docker上部署MongoDB,首先要先在local machine上建立一個folder,
這個folder是待會要mapping到container裡面的volume,
然後MongoDB上的data都會存在這個volume上。
Create a container
接著就可以把MongoDB的image抓下來以及run。
$ docker pull mongo:latest
$ docker run -v ~/mongo-data:/data \
--name ken-mongo \
-d \
mongo \
mongod --smallfiles
這篇算是延續上一篇的主題,假設VG裡面還有free space尚未用到,
那麼過一段時間以後,該怎麼把它拿出來用?
所以這篇主要會講到下面2個主題:
- Extend
- Shrink
1. Extend
Extend會講二種方法,分別為,
- 1-1. Extend from
VG
- 1-2. Extend from
new disk
1-1. Extend from PV
第一種是延續上一篇,
從既有的VG中,把Free PE加入到LV中,
以上一篇來看,你的VG應該還會剩下60GB。
可以用下面的指令vgs
去看VG中剩下多少free PE,
最後一欄的VFree
就是指剩下的free PE,
以我的機器為範例,裡面還有829.99G,
以及我有5個LV。
$ vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 5 0 wz--n- 1019.76g 829.99g
$ lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
db ubuntu-vg -wi-ao 83.92g
log ubuntu-vg -wi-ao 19.07g
root ubuntu-vg -wi-ao 66.75g
swap_1 ubuntu-vg -wi-ao 976.00m
tmp ubuntu-vg -wi-ao 19.07g
使用Preseed file分割LVM時,
並無法做到只使用某部分的VG就好,
舉例來說,假設你有一個100G的硬碟,
然後preseed file如下,
d-i partman-auto/expert_recipe string \
boot-root :: \
20480 10 20480 ext4 \
$lvmok{} lv_name{ root } $defaultignore{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
20480 10 20480 ext4 \
$lvmok{ } lv_name{ log } $defaultignore{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var/log } \
我們分別給每個lv的大小為:
你可能會以為,剩下的60G不會被加到LV裡面,
但其實剩下的60G會通通被放到log裡面去。
不過有比較tricky的解法,可以參考下面的Preseed file,
我們多增加了一個LV,叫做to_be_free
,
然後把所有的free space都指派給to_be_free
,
最後在late_command
裡,用lvremove
把to_be_free
砍掉,
這樣就可以做到把某部分space歸還了。
d-i partman-auto/expert_recipe string \
boot-root :: \
20480 10 20480 ext4 \
$lvmok{} lv_name{ root } $defaultignore{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
20480 10 20480 ext4 \
$lvmok{ } lv_name{ log } $defaultignore{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var/log } \
. \
1 10 -1 ext4 \
$lvmok{ } lv_name{ to_be_free } $defaultignore{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /to_be_free } \
d-i preseed/late_command string \
umount /target/to_be_free/ ; \
lvremove -f /dev/*/*to_be_free > /dev/null 2>&1 ; \
sed -i '/to_be_free/d' /target/etc/fstab ; \