標籤:docker in docker docker linux核心 虛擬化 標籤
業內docker技巧和最佳實務的想法
最佳實務問題
這裡有一些技巧,可能符合或可能不符合最佳實務,回複評論將不勝感激。
?保持映像小:使用--no-install-recommends選項的apt-get,安裝真正的依賴性,而不是大的中繼資料套件(如的texlive-full)。
?避免結合RUN命令,等建立更多的AUFS層? (限為一次42,但現在是至少127)。
?可以使用Run git clone......將資料添加到一個容器到ADD位置,這快取無效判定。
?使用自動化構建連結到Github上,基於Dockerfiles而不是push本地映像產生。這不僅使Dockerfile透明地提供,並提供一個連結,人們可以提交問題庫,但它也有助於確保可在Hub上的映像從Hub(從進入點),而不是本地地從任何可用獲得的基礎映像。這可以協助避免非同步的各種可能而出現的錯誤。
Docker的標籤使用
不幸的是,Docker似乎用這個詞標記都是指應用到映像標籤(例如,在docker build -t imagelabel。在-t參數“tags”的形象為“imagelabel‘,所以我們不必記住它的雜湊)而且還使用標籤來指代一個冒號,如後應用到映像名稱的末尾的串,Ubuntu:latest中的latest。後者是作為Docker Hub的“標籤”選項卡下的“tags”的定義。對於這種標籤(我將隨意稱之為一種“版本戳記”來區分)的最佳做法還不清楚。
一種情況是清楚的標註特定版本。Docker的自動構建讓使用者無論是“版本戳記”連結到一個分支或git的曆史標籤。在這種情況下的“分支”可以指任一個不同的GIT中分支或僅僅是一個不同的子目錄。匹配一個Git標籤提供了最明確的使用docker版本標籤;提供相對靜態版本穩定連結。 (我說“相對”靜態,因為即使我們不改變Dockerfile,如果我們重新構建Dockerfile我們可能會得到應有的較新版本包括了軟體存在的新形象,這可以很好的相對於固定的安全性漏洞,而且還可能會打破先前有效環境)。
用例是不太清楚的是使用Docker,這些“版本tags”,表示相關的映像之間的其他差異,如eddelbuettel/docker-ubuntu-r:add-r和eddelbuettel/docker-ubuntu-r:add-r-devel。為什麼這些不同tags,而不是不同的根源還不清楚,除非它是多個docker檔案在一個單一的存放庫Github上的便利。不過,這是完全可以配置自動構建指向同一個Github上repo,而不是增加額外的完全獨立的docker hub構建的tags在同一個docker樞紐repo。
Docker語言從git術語學習借用,但它解釋這些過於誇張是相當危險的。
保持一個乾淨的docker環境
?運行互動式容器--rm標誌,以避免之後將其刪除。
?刪除所有停止容器:
docker rm $(docker ps -a | grep Exited | awk ‘{print $1}‘)
?清理未標記的映像docker:
docker rmi $(docker images -q --filter "dangling=true")
?停止並刪除所有容器(包括運行容器!)
docker rm -f $(docker ps -a -q)
Docker和它的持續整合
?我們可以安裝,但不能在Travis-CI在這個時候跑Docker。看來linux核心提供有太舊。也許,當他們升級到Ubuntu14:04映像...
?(至少在沒有vagrant/ VirtualBox虛擬層之間)的docker型可發送Shippable-CI,我們不能運行Docker。Docker運行在Docker裡是不可能的(見下文)。
?出於同樣的原因,我們不能在drone.io CI運行Docker。然而,Drone提供它的系統,可以在自己的伺服器,這完全託管服務不同的是,允許的自訂映像上啟動並執行開源版本。不幸的是,我不能讓它在這上面工作。
Docker內運行docker:
docker容器內,我們不能直接安裝docker。我們可以解決這個問題,加入一個完整的虛擬化層 - 如docker中的Vagrant運行/ VirtualBox的運行在docker。
或者,我們可以較為聰明,告訴我們的docker簡單地使用不同的卷儲存其AUFS層。Matt Gruter具有這是一個非常巧妙的例子,它可以使用,例如運行Drone伺服器(運行docker)docker容器(mattgruter/drone)內。
我相信這隻是工作,如果我們運行與--privileged許可權外docker的映像,如我們不能用像Shippable的伺服器這會把我們帶入一個預置的docker的容器上使用這種方法。
本文翻譯自:http://www.carlboettiger.info/2014/08/29/docker-notes
業內docker技巧和最佳實務的想法