這是一篇去年發的文章,但是有些見解目前來看,我覺得還是不錯的。使用者總是希望docker能把什麼工作都做了,提供自己的虛擬檔案系統,提供強大的網路空間隔離,提供配套的編排工具。。。然而,這也為自己埋下了無數的坑好吧,我承認我標題黨了。但是這篇內容應該讓你從乙個新的角度理解docker的本質是什麼。
我們在學c的時候,就有靜態鏈結,動態鏈結,本質上是程式**庫的復用而已。那個時候我們認為動態鏈結庫是最優的。為什麼呢?因為一開始磁碟很貴,記憶體很貴,網路也很貴!是的,我們節省了硬體相關的東西,但是我們也為處理系統的各種鏈結庫版本而付出了慘重的代價,浪費了程式設計師多少光年。hey,身為程式設計師的你,是不是多次為編譯依賴的鏈結庫而苦惱不已。而隨著程式規模的不斷龐大,各種依賴衝突也是不斷。
現在,是時候讓靜態鏈結發揮作用的時候了。你看docker容器動則幾百m。如果是以前,你分發乙個程式要幾百m,你自己都**了,但是現在,大家已經毫不猶豫的感覺什麼都沒有發生的一樣,接受了動則幾百m的映象了。
假設你用docker執行mysql。當你使用ps命令,你只能看到mysql程序,而看不到包裹他的殼(容器)的影子。是的這裡的主體依然是mysql,而不是殼,我們有時候會因為這個漂亮的殼而出現買櫝還珠的有趣事情。
既然docker只是無侵入性的讓現存的程序變成具有資源限制的程序,那麼程序原來是什麼樣,就應該是什麼樣:
程式和映象本身也不是耦合的。只是程式執行的時候順帶加上容器這個殼,從而實現資源的隔離。這種模式該是怎麼樣的呢?
比如,我部署tomcat服務,以前是要現在伺服器上部署除錯好tomcat,然後分發war包執行。現在是我把war包放到乙個目錄,然後執行tomcat docker容器並且載入它就好(我們最漂亮-v引數)。對的,我們只是執行乙個程序,並且指定了他的資料目錄或者程式目錄,就是這樣。
mysql也是,你為什麼要糾結能不能把mysql的儲存也放到容器裡呢?docker容器+mysql 就是mysql啊,只是給mysql包了個跨平台的殼,但它依然只是個普通的程序呀,所以資料還是應該在宿主機的磁碟上。
我們的思想會被羈絆,這也是docker公司的誤導導致的,他為什麼要在程序裡面虛擬出乙個檔案系統的,而且各種各種的實現,讓有選擇障礙性的人糾結的要死,因為他是一家商業公司,希望把大家繫結在自己的生態上。所以,把資料剝離出來,和以前一樣的方式,docker容器只是乙個殼,我們真正的主題還是被包裹的應用。
推銷下我開發的一套容器排程工具: mammuthus-yarn-docker-scheduler
把hexo放到docker上
目的是為了每一次重灌系統不需要重新安裝hexo的環境,下個docker就可以用了。docker pull registry.cn hangzhou.aliyuncs.com wuhulala website啟動容器 docker run p 4000 4000 name website v g da...
docker安裝Ubuntu以及ssh連線
環境 windows10 docker 2.1.0.1 windows的docker安裝就不再多說了,網上有很多教程 在docker的hub倉庫中,有專門的ubuntu系統。我們直接用使用就可以了。docker pull ubuntu docker images docker run name iu...
解決docker中mysql無法從外部連線的問題
vi etc mysql mysql.conf.d mysqld.cnf bind address 127.0.0.1 注釋掉 啟動並進入容器 docker run ti name mysql base container v var lib mysql var lib mysql mysql im...