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 , 不過試了一陣子都搞不定, 只好先暫時放棄了。

Try CoreOS

新玩具 CoreOS ,設計理念跟 Ubuntu 差蠻多的, 光是安裝就花了不少時間在試,記錄一下奇怪的雷。 幾個重點先說一下: Cloud-Config 最前面的 #cloud-config 不能省 Cloud-Config 請按照官方文件上面的範例寫,不要畫蛇添足 Cloud-Config 會放在 /var/lib/coreos-install/user_data ,文件上說每次開機都會跑,但是 user 已經存在的話就不會再加一次 下面是安裝過程,已經有簡化一些了還是落落長,最後設定請直接 END 先開個 VM 試試 (一號機) 在 Installing CoreOS to Disk 看到有趣的安裝 script , 用 SystemRescueCD 開機之後, 抓 coreos-install 下來, 執行 coreos-install -d /dev/sda , 然後他會下載一百多 MB 的檔案來裝到硬碟, 一切順利,重開機,登入,預設帳密是啥? 嗯~~看來是要用 Cloud-Config 來初始化個人設定,該重裝了~~ 感覺好像會重裝很多次,每次都要下載一百多 MB 好像有點浪費頻寬, squid 該你出場了! 重開 VM 進 SystemRescueCD 環境 (二號機) 設定 http_proxy , 抓 coreos-install 下來, 寫 cloud-config.yaml ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0g+ZTxC7weoIJLUafOgrm+h...

Docker container bridge host physical network

想把 docker 拿來當 vm 用的話,有一個問題就是目前 docker 要做 port forwarding 還是有點麻煩, 比較好的辦法應該是 container 有自己的獨立 IP ,這樣的話就可以不用管 port 的問題了。 https://github.com/jpetazzo/pipework 把上面這個 project clone 到 docker host,這個 project 的主要功能是在幫助設定 container 的網路, 詳細的內容請參考網頁。 http://noyaudolive.net/2012/05/09/lxc-and-macvlan-host-to-guest-connection/ 另外會遇到 host ping 不到 container 的情況,建議用上面這個辦法解決。 實驗環境 Gateway 192.168.1.1 Netmask 255.255.255.0 Docker host 192.168.1.10 eth0 Docker container 192.168.1.50 Docker host vmid="$(docker run -i -t -d --net none ubuntu:14.04 /bin/bash)" pipework eth0 -i eth0 "${vmid}" 192.168.1.50/[email protected] pipework 第一個 eth0 是指 host

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 的設定界面了, 大推!!