Docker學習總結

簡介

Docker是一種類似虛擬機的技術,通過docker,可以在一臺雲主機,物理機上運行完全隔離的獨立環境,環境都是通過DockerFIle描述,發佈成鏡像後,通過鏡像就可以在任意環境下
實現相同環境的運行,例如開發環境是mac下,有些編譯內容和純linux下不一定相同,到發佈時可能需要重新編譯。通過docker可以將應用和環境進行粘合,無論在什麼主機條件下,應用運行的環境永遠都是一樣的。

除此之外,docker還可以讓一臺主機進行環境隔離,比較極端的例子,如果有不同應用需要運行在不同版本的同一SDK下,一般我們通過指定絕對路徑來啓動也可以達到目的。但是會很麻煩,後期維護也容易出錯。
通過Docker可以讓兩個應用使用不同版本的鏡像,可以在一臺物理機上完美兼容,互不影響。

雖然現階段看來,如果你的應用不是很複雜,都是單應用搭建,確實也不需要上docker,可能會讓環境搭建變的複雜。
但是現在多主機應用模式越來越多,雲計算已經是大勢所趨,將應用打包成鏡像進行發佈,可以簡單快捷的完整應用的部署,一切只需要安裝了Docker和提供鏡像即可。

通過Docker的上層部署系統如k8s,或者編排系統rancher可以將所有云主機進行統一管理,並且針對應用可以提供填空式的參數式部署,只需要在界面中輸入關鍵參數,就可以完成應用部署。
可以極大的提高應用部署的效率,也避免了人工進行可能引入的錯誤。

安裝

docker官方提供了安裝腳本,執行命令
sudo wget -qO- https://get.docker.com/ | sh
就可以自動完成docker的安裝

修改鏡像源

docker的默認鏡像都是從DockerHub上拉取的,因此速度也不會太快,可以將鏡像源替換成國內的,這裏推薦阿里雲
docker配置阿里雲鏡像
免費的

配置文件爲/etc/docker/daemon.json,如果沒有就創建一個,加入如下字段

{
  "registry-mirrors": ["從阿里雲獲得的加速地址"]
}

配置是標準的json對,如果已經有外面的括號了,就只加入registry-mirrors項即可
修改完成後執行systemctl restart docker,重啓完成後執行sudo docker info 可以看到修改是否成功

將來可能會遇到的問題

  • docker的最小運行單位是Container, 如果啓動的時候沒有指定 -rm 就算啓動失敗或者後面強行刪除了也不會完全清除
    如果在學習過程中想完全重置環境,又不想重置鏡像,可以執行sudo docker rm $(sudo docker ps -aq)
  • 一般範例中也會講,一般會在容器的啓動參數中加入 -i -t 這樣方便調試,自己玩的時候也別忘了
  • 關於性能,如果你是在win或者mac下使用的docker,那就不要考慮所謂的性能問題,無論是win還是mac都是通過類似虛擬機的邏輯來實現的,所以最好自己裝一個Ubuntu系統。
    win和mac只能算做是玩具,用來學習如何使用,和日常開發。
  • 關於環境保存,如果你要下次環境運行的結果進行保存,那麼最好進行硬盤映射,通過-v參數
  • mac和win下的網絡模式同樣會因爲是基於模擬器的運行無法使用主機網絡,只能使用橋接,所以遇到了網絡問題也不用太糾結。

推薦後續的學習

  • DockerFile是docker的基石,當然我們可以直接用現成構建好的鏡像,但是學會怎麼編寫DockerFile和用DOckerFile來製作一個鏡像是很有必要的,以erlang爲例,可以看下官方鏡像的DockerFile的編寫方法來學習erlang的官方鏡像信息
  • 通過編排引擎可以將Docker的使用完全可視化,推薦初學的話使用rancher1.0+Cattle, Cattle的編排相對簡單,在mac下也可以兼容
  • k8s是當前比較流行的容器編排引擎,因爲他提供的功能多,對應的學習難度也比較大,但是如果想使用Rancher2.0就必須瞭解k8s的基礎邏輯才行
  • 關於Rancher,Rancher並不是一個編排引擎,他只是一個工具,讓需要參數化的複雜的應用部署變得可控,通過編寫應用模板,可以將應用的部署概括到幾個關鍵參數的填充就可以,如果你熟悉了k8s,那麼rancher對你就會相對簡單的多。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章