How to use NodeJS & MongoDB with Docker?

30 November 2015

這篇會講如何在Docker上部署一個NodeJS+MongoDB的application,
所以會分二個部分來講,

  1. 在Docker上部署MongoDB
  2. 在Docker上部署NodeJS+Express

1. 在Docker上部署MongoDB

要在Docker上部署MongoDB,首先要先在local machine上建立一個folder,
這個folder是待會要mapping到container裡面的volume,
然後MongoDB上的data都會存在這個volume上。

$ mkdir ~/monogo-data


Create a container


接著就可以把MongoDB的image抓下來以及run。

$ docker pull mongo:latest
$ docker run -v ~/mongo-data:/data \ 
             --name ken-mongo \
             -d \
             mongo \
             mongod --smallfiles

read more »


How to resize a LVM partition?

27 November 2015

這篇算是延續上一篇的主題,假設VG裡面還有free space尚未用到,
那麼過一段時間以後,該怎麼把它拿出來用?
所以這篇主要會講到下面2個主題:

  1. Extend
  2. 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

read more »


Do not allocate all the LVM space with preseed

27 November 2015

使用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的大小為:

  • root : 20G
  • log : 20G

你可能會以為,剩下的60G不會被加到LV裡面,
但其實剩下的60G會通通被放到log裡面去。

不過有比較tricky的解法,可以參考下面的Preseed file,
我們多增加了一個LV,叫做to_be_free
然後把所有的free space都指派給to_be_free
最後在late_command裡,用lvremoveto_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 ; \

read more »