業內docker技巧和最佳實務的想法

來源:互聯網
上載者:User

標籤: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技巧和最佳實務的想法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.