掘金 AMA:《開發者必備的 Docker 實踐指南》小冊作者--有明聊 Docker

清蒸不是水煮發表於2018-12-03

第十一期 AMA,掘金團隊請來了《沒什麼難的 Docker》書籍、《開發者必備的 Docker 實踐指南》小冊作者-- 有明做了為期三天的 Ask Me Anything (AMA) 活動(已結束)。

我們在此精選了一些來自使用者的提問及有明的回答。

關於有明

掘金 AMA:《開發者必備的 Docker 實踐指南》小冊作者--有明聊 Docker

社群小夥伴精選提問

使用jenkins釋出的go程式,且專案不大,對於這樣的專案docker能帶來什麼? ─ @itstudying

使用jenkins釋出的go程式,且專案不大,對於這樣的專案docker能帶來什麼呢,謝謝。

對於 Go 程式來說,特點就是環境依賴性很強,我們在開發平臺上編譯、執行並測試通過的程式,也許在目標平臺上還要重新編譯,甚至編譯後會出現與開發平臺上執行不一致的情況。通過 Docker,我們就可以儘可能的保證開發、測試、生產環境的一致性,減少很多不必要的麻煩和因為這些麻煩帶來的工作量。

docker有什麼具體的使用場景呢─ @勝雄

測試領悟 docker有什麼具體的使用場景呢

如果將 Docker 引入到 DevOps 流中,那麼測試人員就再也不需要為程式執行環境所困擾了。在我司的實踐中,通過使用 Docker 來搭建測試環境,測試同事對環境的管理和切換都變得非常容器,僅需幾條命令或是幾個配置就能完成。

Docker對於剛剛進去後端開發的工作者來說,是否真的有必要? ─ @旱鴨子

Docker對於剛剛進去後端開發的工作者來說,是否真的有必要。比如我,我自學的golang,就目前我的瞭解來看,我需要學習資料庫,web框架等一些基本的東西,這個時候入手docker是否合適。會不會喧賓奪主呢?

這些東西對於學習 Docker 來說,完全不衝突。同時,學習 Docker 對於後端開發來說也是非常必要的。簡單來比較,學習 Docker 與其說是學習 Docker 這門技術,不如說是學習使用 Docker 以及周邊的工具,學習通過 Docker 來提高我們的工作效率。這就好比上手一款好用的 IDE 來替代記事本編寫程式碼,雖然會消耗一些時間來掌握它,但之後的收益的非常明顯的。從另一方面來說,掌握 Docker 雖然消耗了你的一些學習時間,但在之後會不斷的為你節約大量用於環境方面的時間,用這些時間去學習其他的知識,豈不是非常完美。

怎麼開一個容器? ─ @Arthur.Li

怎麼開一個容器比如node,只用做打包比如執行個npm什麼的。最好能放到compose裡一起管理。 只能通過docker run xxx /bin/bash npm install 這種新建容器去執行嗎?

完全可以將這個容器放到 Compose 專案裡,這樣可以更優雅的與 Compose 專案中的其他容器進行結果共享等。這個容器的命令就可以直接設定為 npm install,每次啟動它就可以做一次更新。

mysql如果使用docker部署的話,會不會在特定的情況下出現效能問題?─ @Zaregoto

mysql如果使用docker部署的話,會不會在特定的情況下出現效能問題呀?比如I/O或什麼的

Docker 做的工作主要是隔離,沒有涉及資源轉換,所以容器中的程式對硬體資源的使用上與宿主機上的程式是一致的(如果你通過 Docker 做了資源限制那另當別論)。所以,容器中的程式與宿主機中的程式映象對比,在效能上沒有差別。當然,如果你的流量特別高,真的已經達到了伺服器硬體的 I/O 瓶頸,那不論程式是直接執行在伺服器還是執行在容器裡,都一樣會出現峰值限制的。

中小專案是否有必要採用Docker解決方案?─ @Colin Jiang

中小專案是否有必要採用Docker解決方案?

Docker 的優勢並不僅在於其能夠更快實現叢集搭建和管理,更在於其能夠貫穿 DevOps 流。換句話說,Docker 在開發、測試、運維領域都能發揮不少作用。所以,中小型專案更應該引入 Docker,因為它真的能夠節約大量的人力、物力以及時間,這些成本對於中小型專案來說,都是非常寶貴的。

Docker 和 微服務 或者 Service Mesh 怎麼優雅的搭配一起使用?─ @wujunze

Docker 和 微服務 或者 Service Mesh 怎麼優雅的搭配一起使用

通過 Docker 以及周邊技術來實現服務化相關的基礎設施,進而替代以往微服務體系在應用程式中實現的這些功能,使得服務基礎設施與應用分離,讓應用開發不再需要過多考慮服務化基礎架構的問題,這就是 Service Mesh 的核心理念之一。

docker裡直接pull一個centos,然後裝lnmp;與分開裝有什麼區別

docker裡直接pull一個centos,然後裝lnmp;與分開裝有什麼區別

Docker 推崇輕量級容器,即程式即容器的概念。分開使用不同的容器執行不同的程式,既符合 Docker 自身的設定,又能夠讓 Docker 更好的對這些容器映象管理。而從另外一個角度出發,用容器隔離不同的程式,才是破解程式間複雜依賴難題的關鍵步驟。

docker算不算精簡化的虛擬機器? ─ @諾墨

docker算不算精簡化的虛擬機器?

準確來說,Docker 以及它所對應的容器技術不屬於虛擬機器的範疇。虛擬機器特指的是通過 Hypervisor 也就是虛擬機器監控器來實現虛擬資源到實際資源轉換的。而容器技術更關心的是資源的隔離,其中是沒有 Hypervisor 這一層的,所以其與虛擬機器存在很大的差別。關於這兩者的比較,在我的《開發者必備的 Docker 實踐指南》中有更詳細的解讀。

如何保證安全性?─ @buheshuicat

docker並不能完全將資源隔離起來,如何保證安全性?

Docker 的安全可以從幾個角度出發去考慮:

  1. 隔離安全,也就是依靠 Docker 實現隔離的 Namespace、CGroup 等機制實現安全隔離。
  2. 核心能力限制,即通過限制 Docker 容器及其中應用對核心敏感功能的使用,來達到防範風險的目的。
  3. 伺服器安全防護,這和普通的伺服器防護原則是一致的,也就是設立防火牆,使用證書保護,應用非 root 執行等方式來限制外部攻擊。
  4. 設立安全機制,通過像 AppArmor、SELinux 這樣的安全策略或安全軟體來增強核心本身的安全性。

本期 AMA 社群小夥伴提了許多實用問題,感謝有明認真地為掘金小夥伴解答了不少疑問。瀏覽更多的問答,可以到有明的 AMA 進行閱讀和討論。

相關文章