標籤:

學習docker要有什麼基礎?

本人大二,剛學java沒多久,學了資料庫,接觸了linux操作系統,大家覺得我該怎麼做?我知道該往哪個方向學習,覺得java種類繁多,該怎麼學習


我在Docker 1.7.x就開始用了, 三年多的使用經驗,趟過各種坑。如下建議,認為不錯的請給個贊,有問題請私信我!

入門級:

  • linux基礎命令,例如:yum,ls,top,iptables
  • 網路基礎知識,例如:host,bridge
  • 3.git/docker常用命令:docker run/stop/ps/commit/save/exec

這個階段擼官方文檔:Docker Documentation

中級:

  • linux 內核,namespace,cgroup
  • 深入理解Docker網路原理,藉助第三工具(Flannel,Calico)搭建網路模型。
  • 深入理解Docker文件系統和存儲原理。

高級:

  • 這個階段就是能能對Docker的網路模塊,存儲模塊等模塊進行調優。要對GO有一定的基礎,嘗試對一些部件的更改。

github地址:moby/moby

應用級:

一整套編排方案,主要有涉及以下部分:

  • 配置管理(anisble,saltstack,jumperserver)
  • 持續集成和持續部署(Jenkins,git,gitlab)
  • 服務編排(k8s,swarm,mesos,rancher)
  • 網路模型(host,bridge,Flannel,Calico)
  • 服務註冊(etcd)
  • 服務發現(confd)
  • 日誌平台(ELK, loghub)
  • 監控平台(zabbix,cadvisor,prometheus,grafana)
  • 腳本開發(shell,python)

一套完整的方案可以看這裡:基於Docker持續交付平台建設的實踐


推薦網易雲佈道師出品的 Docker 入門資源:

動手玩Dockerstudy.163.com

玩轉 Docker 鏡像 - 網易雲課堂study.163.com


學習docker 要具備以下條件:

  1. 熟悉 go, docker 是 go 開發的
  2. 熟悉Linux 的常用命令,尤其是網路,系統調優這些部分. 例如bridge
  3. 熟悉/學習 容器LXC的基本概念, 最好能結合docker來看, 如果能深入到cgroup/kernel 尤佳不過不是必須的.
  4. 熟悉Git 便於部署.


Java 跟docker 有什麼關係?

如果只是想了解的話,學習docker 半天就夠了,打開官網文檔安裝運行,玩過虛擬機的都瞬間理解了。

好玩的是,搭建自己的registry ,用docker 把自己寫的java程序封裝成image push 到registry,再另外一台虛擬機上pull和運行。

再可以玩一玩kubernetes ,用剛剛製作的image 起一個兩個pod的deployment 。這樣就基本上知道怎麼玩了。

既然是java 開發,就沒必要深入看代碼了。之後就可以結合mysql Nginx redis Prometheus grafana這些搭一個更大的系統,從前端到後端到資料庫到監控,能夠了解現在企業的伺服器開發。

然後就可以回去繼續擼java了


建議去騰訊雲買一台雲主機,使用docker搭建一個環境來玩一下,docker創建多個容器,各個容器之間的網路互通,掛載磁碟,計算資源分配。部署一個網站,nginx+mysql+nodejs


買本書跟著練就好了。哪那麼多前置條件??


當然是英語了


看你是怎麼用咯。比如我只是用來搭建環境復現漏洞就只用最基礎的使用就行了


不需要有啥基礎,會Linux,懂操作系統,會GO語言,稍微看看雲計算(OpenStack啥的),基本上就夠了


docker的使用門檻較低.

明白大致原理,看 @左耳朵的耗子 左耳朵耗子的酷客文章。

會製作鏡像,會啟動容器,就可以了。

之所以如此風靡,其簡單性。

要理解原理的話,狠下心閱讀k8s和docker的源碼吧。就使用而言,在網上找找資料就可以咯。


既然是要學,零基礎即可開始,docker運行在操作系統上,那麼基礎的電腦知識得有,比如什麼是文件,什麼是存儲,以及終端命令行,計算機角色許可權這些,這時候你在計算機基礎使用的問題域里

有了這些,從官網教程按照安裝指南安裝docker環境,那麼英文得會,不然看不懂就尷尬了,安裝完成後,什麼是後台daeman或者服務得清楚,保證環境在重啟後也能正常運行,這時候你在學習環境準備的問題域中

再之後的學習就到了docker本身的問題域了,這個時候你要理解它是什麼,什麼是build,dockerfile語法,鏡像等知識;什麼是ship,docker store或者其他鏡像註冊服務知識;什麼是run,如何通過鏡像啟動一個容器,以及關於容器和鏡像之間關係相互轉換相關的命令,還有容器相關的命令

有了這些知識,在docker你就已經算是入門了,之後就是軟體開發以及程序容器化相關問題域了,你的選擇你喜歡的需要開發自己的應用,並根據應用選擇合適的基礎鏡像並測試打包運行

再之後就是運維問題域,涉及多容器編排,集群環境相關知識,你需要學習docker-compose,swarm和kubernares相關知識,這些屬於高階話題,在你大學生涯可能用不到啦

手機碼子,格式不好,將就看下吧


謝邀。

本人對於docker也只是停留在很表面的了解上,這裡給出一點自己學習和使用docker的經驗,各路大神輕拍。

我認為對於docker的學習主要分為三個層面,因為其本身就是個軟體一個app,所以第一個層面就是學會使用。

第一個層面:學會使用docker

既然要學會用docker,我推薦直接看官網上的doc,無論是安裝還是命令的使用,都是最新的一定能正常work的,看其他人的博客反而會遇到很多不必要的坑。安裝完自己再pull幾個鏡像,docker run起來,再exec進去體驗一下,你會發現docker不過如此,我覺得會有利於提升初學者對docker的初步理解。

鏈接:Docker Documentation

第二個層面:理解docker的實現原理

會用docker並不難,人家文檔健全、命令好記,智力正常的話花點時間就可以搞定。如果你僅想停留於此,也不用看後續了。docker本身是一種容器機制,是依靠Linux的幾種系統調用實現,通過namespace來實現隔離機制,通過cgroup實現資源限制,這裡推薦學習左耳朵耗子的博客:

Docker基礎技術:Linux Namespace(上) | | 酷 殼 - CoolShell

Docker基礎技術:Linux CGroup | | 酷 殼 - CoolShell

耗子叔的博客非常值得仔細品讀,其博客還有關於docker鏡像存儲的幾篇文章,鏈接就不放了。

第三個層面:源碼層面

其實早在docker出現之前很多公司已經在使用Linux容器來提升資源利用率,因為Linux的這幾種系統調用n年前就有了,只是docker的出現將容器帶到了大眾程序員的眼前。學習其實現原理其實也不用花很多時間,如果需要對docker進行定製化、或者是個人的學習興趣,都需要對docker源碼進行一定的修改。

docker是使用go語言編寫,如果想看懂docker源碼首先需要對go語言有個基本的了解,源碼在github上開放可以隨意下載。其本身是一個c/s架構,可以嘗試對小部件修改後重新編譯,看到效果。由於我也沒有在這方面做過,只敢稍微帶著說一下。

github地址:moby/moby

很多地方沒有提及,例如docker的網路、存儲上有很多值得學習和要踩的坑,docker的整體架構等,如果要系統地學習docker,還請多扣官方文檔。另外本人最近也在研究一些docker 鏡像安全有關的課題,有興趣的同學可以看看:

puyangsky/DockerSecurityResearch


推薦閱讀:

DaoCloud、時速雲、靈雀雲這些Docker平台區別在哪裡?
如何學習、了解kubernetes?
如何評價 hyper_?
如何通俗解釋Docker是什麼?
網易蜂巢的原理是什麼?通俗的舉例說明

TAG:OpenStack | Docker |