docker並不是萬能的
在連續兩年里為每一個項目都配備一個docker後,我變得越來越不喜歡使用docker了。
不過值得肯定的是,在寫完dockerfile和docker-composer之後,一行代碼直接部署的痛快感,真的會讓人身心愉悅。
但是,為了這一行代碼的部署,調試過程也是十分折磨人的。
docker表面上很方便,其實工具鏈之間的銜接十分糟糕。
docker將linux的namespace做了深層次的封裝,使用戶上手的難度非常低,部署到生產環境也很容易。但這僅限於小型項目,比如你的一個nodejs+mongodb或者php+mysql的架構方式。如果是稍微複雜一些的項目,依賴關係非常多的話,你會發現,docker會出現各種神奇的bug。比如docker-compose之間的依賴不會等待被依賴者載入完畢,掛載volume有時會無法在entrypoint或command中執行命令,必須要用COPY…諸如此類,原本不需要如此複雜的部署,如今卻變得複雜和難以維護。
在進行多機部署的時候,跟著官方文檔走都不能成功,上stackoverflow和github上查了半天也查不到任何解決辦法,是經常發生的事情。
當然用多了之後會習慣docker的不完美,但也會讓你思考,這個項目一定需要使用docker嗎?
docker的確降低了運維難度,但是加大了運營成本。
在我看來,docker最大的一個缺點是,十分吃硬碟。docker封裝的namespace,但是並沒有對文件進行進一步的管理,只是粗暴的將文件到處複製粘貼。當伺服器上開了數百個容器後發現1TB的硬碟被吃掉了一半時,我的內心裡只有兩個字:絕望。這意味著需要不停增加伺服器資源才能維持系統的運行,如果不採用docker部署的方式,可能並不需要如此大的磁碟空間。
除了磁碟空間的佔用外,作為一名中國用戶,時區、牆等都是問題,當然這些問題都是可以解決的,但是也很花費時間。
我並不是在指責docker的不好,正相反,我覺得docker是個非常酷的工具。使用docker後,在我更新半年前寫的爬蟲時,完全不用擔心該怎麼從新部署,還是那條熟悉的命令即可完成,減輕了很多記憶上的壓力。
那麼在什麼時候不必使用docker呢
- 架構簡單,類似資料庫+應用程序這種情況是不需要docker的,因為你花在調試docker上的時間可能比你完成具體業務邏輯的時間還要多(想偷懶不想安裝各種庫時除外);
- 業務上docker會佔用太多資源的時候可以考慮不使用docker,因為伺服器資源真的很貴;
啊,想來想去,不使用docker的場景真少啊,說到底我還是喜歡使用docker的,連多找幾個不用docker的理由都找不到(笑。
docker並不是萬能的,但如果你現在告訴我不要使用docker,我可能還做不到(docker是一個讓人用上就不想扔的產品,部署時的如絲般流暢還是夠吸引人啊)。
推薦閱讀: