讓 Docker 無處不在
我已許諾會持續的寫些關于docker的文章。由于我是***一個在 CØ 中具有本地linux內核的幸運者, 因此我將寫一些關于怎樣在本地桌面上管理所有項目的文章。
為什么是docker,而不是純LXC?
幾年前,當我還在 Adcloud 時,就開始使用 LXC 來構建所有的微型服務。 鑒于我在臺式機上使用 Archlinux系統并且效果還不錯,但是我們的生產環境是 Ubuntu系統,并且可能會用 chef 腳本來創建容器,而我仍然把這些容器當做機器來維護。它們有自己的 DNS 域名、 IP 地址、 SSH 服務,和所有磁盤文件綁定。因此每當我開始一個新項目時,首先得通過 SSH 登錄到容器然后再開始工作。事實上我一點也不喜歡 Chef ,所以在離開 Adcloud 后我就放棄了 Chef 并開始使用 Babushka 。雖然后者能讓我以最簡單的方式來部署一個單機環境,但是創建新容器十分緩慢,當所有容器啟動之后占據了 SSD 上的大量磁盤空間,而且我還需要手動去配置多項服務。
所以當我***次啟動 Docker 容器的時候,它的速度之快真是讓人驚訝,更棒的是分層的文件系統可以減少磁盤的使用。
容器不等于機器
自從有了 Docker 容器以后,你就不需要考慮機器的概念了。它們只是在不同的內核命名空間中的進程,你希望它們可以保持精簡和干凈。它們也需要能夠運行在不同的環境中,所以我放棄了在容器中使用 SSH 。那我又是如何來創建我的項目呢?首先我創建了一系列容器,在上面安裝了我項目中需要安裝但不應該安裝在本地的工具。
在盒子里使用Go
我們先來看一下 github 上的 Dockerfile。
使用下面的別名在容器中啟動 go,隨后把容器移除:
- alias go="docker run --rm -t -i teemow/go"
你甚至可以使用不同的標簽來運行不同版本的 go( go:1.1、go:1.2 等)。不過要讓它它真正工作,還需要更多操作。你可以把你當前的目錄綁定掛載到容器中,來做類似go get這樣的事情。
- alias go="docker run --rm -t -i -v \$(pwd):\$(pwd) -w \$(pwd) teemow/go"
如果你有一個私有 git 庫的話,你甚至可以把你當前的 ssh 代理掛載到容器中:
- alias go="AGENT=\$(ls -1 --sort t /tmp/ssh-*/agent.* | head -1) && docker run --rm -t -i -v \$AGENT:\$AGENT -e SSH_AUTH_SOCK=\$AGENT -v \$(pwd):\$(pwd) -w \$(pwd) teemow/go"
類似 GOPATH 這樣的環境變量也可以傳入到容器中。
你可以完全用你自己的工具來完成這些事情,這樣你的主機會很干凈。別忘了給你的不同版本的鏡像打上標簽,否則你很難跳回到之前的項目中。也許你可以給類似 rbenv ( dockerenv )的項目做記號。我已經創建了一系列包含工具的鏡像 ,比如 npm 、 grunt 、 coffee-script 、 aws-cli 和 tugboat 等等。
專家提醒: 不要過度使用別名,建議盡可能使用小腳本,比如 /usr/local/bin/ 。
Docker 樂高積木
如果你想要在不只一個容器上運行或者測試你的項目,那么就使用上面提到的別名來構建你的項目。你不能在同一個容器中運行你的Web服務,postgres和redis。每項服務應該有自己的容器,現在你需要做的就是把所有的“磚塊”組合起來。
Docker有一個特性稱之為“鏈接”,它可以幫助你做正在做的事情。一個被鏈接的容器通過環境變量導入本身。所以其他的容器能發現Ip地址和鏈接容器的接口。Heroku 使用了一種類似的方式來添加插件的信息。
但是你能使用fig使這一切更容易。只需要添加fig.yml文件到你的項目中并運行fig up去開啟整個環境。本地目錄會被綁定到一個容器上,如果文件被修改,文件監視器可自動重啟你的服務。Mac/Vagrant用戶對這個比較熟悉。我已在piratesinn angellist list添加了fig.yml文件。
事實上,甚至連 fig 自身也是運行在本機上的一個容器中。但是你需要把docker socket 服務綁定到 fig的容器中,這樣它才可以啟動其他容器。
未完待續。
譯文來源:http://www.dockboard.org/dockerize-all-the-things/
【編輯推薦】
- Docker如何將錯綜復雜的Linux代碼轉成開發者的魔法
- 你會用嗎?Linux五大數據可視化工具
- 深度專訪Linux Deepin郭攀 :圖標的故事
- 送給Linux愛好者精彩有趣的高清Linux壁紙
- 極力推薦:一個Docker的maven插件
【責任編輯:林師授 TEL:(010)68476606】