Docker Infra 架構簡介與實例

這邊介紹的架構可以做到什麼效果? 開新的 Web App 就可以立刻透過新的 domain name 去連線 開一大堆同名的 Web App 就可以立刻分流 系統基本架構圖 Etcd 存放設定的 Cluster DB SkyDNS 從 Etcd 讀取設定, 讓使用者查詢的 DNS Server Confd 從 Etcd 讀取設定, Reload Nginx Registrator 監聽 Docker Events, 將 Container 資訊寫入 Etcd Nginx 網頁 r-Proxy 實作部份 準備 VM/Host 如果只是要先測試的話, 可以只用一台 VM/Host, 不過考慮到系統容錯的話, 建議準備至少三台不同的機器來建構底層架構 設定 Docker 這邊在 Ubuntu 上安裝 Docker 做為範例, 其他平台請參考官網說明文件 利用 apt 安裝 lxc-docker echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list apt-get update

Consul 採到雷

今天試用 consul , 看網路上的文件好像還蠻好裝的, 沒想到還是遇到神奇的雷, 目前懷疑是跟 ZFS 有關。 環境 $ uname -rsvmo Linux 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 GNU/Linux $ docker -v Docker version 1.2.0, build fa7b24f consul 版本是 v0.4.0 現象 $ docker run progrium/consul -server -bootstrap ==> WARNING: Bootstrap mode enabled! Do not enable unless necessary ==> WARNING: It is highly recommended to set GOMAXPROCS higher than 1 ==> Starting Consul agent... ==> Error starting agent: Failed to start Consul server: Failed to start Raft: index id error: Function not implemented 啟動 consul 就爆炸了….>_< google 不到什麼有用的資料, 只好自己 trace code 了…Orz 追了大半天, 發現問題出在 consul call LMDB (Lightning Memory-Mapped Database) 的時候會死掉。 目前懷疑跟 ZFS 不支援 AIO 有關, 因為 MySQL 跑在 ZFS 上也有災情。 解法 $ docker run -v /tmp progrium/consul -server -bootstrap ==> WARNING: Bootstrap mode enabled!

Docker eclipse on Ubuntu Desktop

看到越來越多人在往雲端開發的方向在玩, 比較終極的做法當然就是把 Browser 變成 IDE , 不過就目前看來, 技術上還沒有一個比較領先的做法, 只好先找比較無痛的方向來玩玩…hehehe 今天嘗試了一個新的做法, 在 Ubuntu Desktop 上面裝 docker , 在 docker 裡面跑 eclipse 來開發, 這樣做的目的是要讓本機的開發環境不要裝太多雜七雜八的東西, 先看一下成功的畫面吧! 基本上就是先建一個 eclipse 的 container , 跑起來之後再用 ssh 連進去執行 eclipse , 需要 ssh 的原因是為了要把本機的 X11 forwarding 過去, 本來還有 google 到用 mount 的的辦法去達成 X11 forwarding , 不過試了一陣子都搞不定, 只好先暫時放棄了。

phpVirtualbox

過年期間買了新的 PC 內裝(CPU, 主機板, 記憶體) 最近終於決定 OS 的架構了 Ubuntu 12.04 x64 ZFS Virtualbox Docker 32G RAM 的 PC ….hehehe Ubuntu 選 LTS 版, 必免頻繁 Upgrade 的問題 ZFS, 實驗性質, 看看大量使用會不會有什麼鬼問題, 不過 ZFS 在 Ubuntu 感覺還是有點雷, 用預設的 properties 會狂吃記憶體, 傳檔案竟然會吃到 2x G, 目前把所有的硬碟 cache 選項關掉, 把壓縮關掉, 看起來還正常一點…>_< Docker, 去年年底才知道的好東西, linux base 的 vm 之後都可以轉到 docker 跑了, 不過之前用的 shipyard 管理界面在改版之後變得有點討厭, 限定要用 shipyard agent 才能管理 docker, 目前只好回到 console 去管理了, 看看有沒有時間弄個簡易的 web 管理界面好了… Virtualbox, 本來想試用 KVM + openstack 的, 但是搞了半天還是搞不定, 只好回到 virtualbox 了, 重點是, 發現了一個叫 phpvirtualbox 的 project, 可以不用裝 GUI 來看 virtualbox 的設定界面了, 大推!!

phpVirtualbox config notes

phpvirtualbox 要裝起來需要修改一些設定, 這邊稍微紀錄一下 ubuntu virtualbox 安裝過程 vi /etc/apt/sources.list.d/virtualbox.list ``` deb http://download.virtualbox.org/virtualbox/debian precise contrib * apt-get update && apt-get install virtualbox-4.3 * 下載 virtualbox extension pack, 這樣才能透過網頁來看 VM 的 console * https://www.virtualbox.org/wiki/Downloads * vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-*.vbox-extpack * vi /etc/default/virtualbox * 這是為了要開啟 vboxweb-service * vbox 改成要使用哪個系統 user 來開啟 virtualbox ``` VBOXWEB_USER=vbox VBOXWEB_HOST=0.0.0.0 update-rc.d vboxweb-service defaults 開機自動啟動 phpvirtualbox 安裝過程 先裝好 apache2 + php5 的環境 下載跟 virtualbox 相容的版本 http://sourceforge.net/projects/phpvirtualbox/files/ 解壓縮之後丟進 /var/www 設定 config.conf

PPTP Ubuntu Note

總結 apt-get install pptpd -y echo "localip 192.168.99.1" >> /etc/pptpd.conf echo "remoteip 192.168.99.100-150" >> /etc/pptpd.conf echo "ms-dns 8.8.8.8" >> /etc/ppp/pptpd-options echo "ms-dns 8.8.4.4" >> /etc/ppp/pptpd-options echo "USERNAME * PASSWORD *" >> /etc/ppp/chap-secrets service pptpd restart echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p iptables -t nat -I POSTROUTING -o eth0 -s 192.168.99.0/24 -j MASQUERADE iptables -A FORWARD -s 192.168.99.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1316 安裝套件 apt-get