Docker學習筆記——輕量級虛擬化

前言

學習筆記,工作需要學習一下Docker,學習內容有

  • Docker官網
  • 尚硅谷Docker視頻
  • https://juejin.im/post/5a43037b5188252bca05239a#heading-15(一,二,三講的很清楚)
    [學的不深,僅供工作使用]

學習思路:找到了優秀的猿還原的老師上課的思維導圖(b站搜尚硅谷docker很多優秀的朋友寫了學習筆記),非常齊全。看看思維導圖,定期問問自己問題。如果工作中遇到相關難點,會補充在這裏。
ps:看視頻真的費時間,可能最近太浮躁了吧,嫌看視頻繁瑣,看書又不能靜下心。

Docker類比理解

建房子 軟件帶環境安裝
在一片空地上建房子 在一個操作系統上配環境:依賴,各種庫,程序
搬家了 在另一臺機子上配環境
房子 鏡像
裝房子的揹包 倉庫
拿出揹包裏的房子再複製一個房子 容器

直接拎包入住,不會出現"在我的機器上可以跑,在你的機器上不能跑。"解決開發與運維的問題。
除系統核心外,需要的系統環境由下而上打包,做到應用程式跨平臺無縫接軌運作。

Docker

個人心得:和git思路基本一致,與linux命令行差不多。容器,倉庫,鏡像,Dockerfile。容器和鏡像是千層餅一樣的東西[一層一層編譯,節約],輕量級虛擬輕就輕在不用kernel,用宿主機的kernel。是個文件系統,union 文件系統。一個centos虛擬機(虛擬硬件,os,及一些應用)和一個centos鏡像:用宿主機的kernel,rootfs(內核基礎上多的一些配置讓他變成了centos,基礎少量)。

理解:ubuntu,centos這些linux的不同發行版本,可以看作(bootfs+rootfs+kernel)。其中只有rootfs不同。

Docker問答環節

  1. 虛擬機與Docker?
  2. 解決的問題:開發與運維
  3. Docker的本質:環境+應用
  4. 和房子的類比,和集裝箱的類比(隔離)
  5. Docker架構圖:鏡像(本地),倉庫,容器
  6. Docker是怎樣工作的?
  7. Docker爲什麼比VM快?
  8. docker exec與docker attach的區別?
  9. 容器和主機的文件交互?cp(容器——>主機)&容器數據卷(指定兩個文件夾進行互動)
  10. docker鏡像是什麼?
  11. docker鏡像的加載原理?
  12. docker鏡像爲什麼採用分層結構?
  13. docker容器數據卷兩種添加方式?

Docker讀書學習筆記

  1. 容器客居於操作系統,只能運行與底層宿主機相同或相似的操作系統(因爲你要用他的內核)。比如在ubuntu服務器上運行Microsoft Windows是不行的
  2. 隨着越來越多的技術引入,容器不再是單純的運行環境,更像是一個完整的宿主機。與宿主機隔離更加徹底,有毒裏的網絡和存儲棧,自己的資源管理能力。
  3. docker鏡像是由文件系統疊加而成,最底端是引導文件系統,即bootfs。第二層是root文件系統rootfs。docker利用聯合加載技術在rootfs上加載更多的read-only fs。[呼應了鏡像是隻讀的,容器不過是在鏡像最頂層加載一個讀寫文件系統]。聯合加載將各層文件系統疊加
  4. 想在docker中運行的程序就是在讀寫層中執行的
  5. 如何理解**寫時複製|copy-on-write?**修改一個文件,先找,從只讀層複製到讀寫層,只讀版本依然存在,但是被讀寫層中的該文件副本所隱藏。
  6. 以ubuntu爲例,並不是一個完整的os,只是一個裁剪版本,僅包含最低限度的支持系統運行的組件。tag用於區分
  7. (都放在遠端)用戶倉庫和頂層倉庫:用戶倉庫放的是用戶自己製作的鏡像,未通過確認,可能有風險,頂層倉庫=Docker公司+優質廠商管理,可基於這些鏡像自己構建,頂層倉庫保證了鏡像是架構良好的,安全且最新的。還有存在本地的鏡像,docker commit提交的鏡像就在本地,push以後到達遠端
  8. docker commit提交的只是創建容器的鏡像與容器的當前狀態之間有差異的部分,使得更新非常輕量。【輕量,資源共享…】
  9. DockerFile的構建:鏡像——>(生成)容器-——>(對容器操作)——>(docker commit)新的鏡像 循環。每一條RUN指令都要這麼一次
  10. 對docker守護進程和C/S模式的理解:docker命令,你發出你需要的服務,守護進程完成(在docker服務器上),返回結果給你。比如docker build等【我的理解,不一定準確】
  11. Dockerfile和構建緩存:鏡像層看做緩存,調試錯誤,會從正確的最後一個位置開始,節約大量時間,如果做了修改,從修改地方的前一個鏡像開始構建。【再次提現千層餅資源共享,節約,不冗餘各方面優勢】,有時需要略過緩存功能,可以設置
  12. CMD指令:把運行的命令放在數組結構中,如果不按數組結構Docker會在命令前加上/bin/sh -c。所以建議數組語法設置。這個地方需要學習shell命令。一條CMD,多條CMD只有最後一條會執行。想在啓動容器時運行多個進程或者多條命令,考慮Supervisor這樣的服務管理工具。多條會覆蓋只有最後一條有效,run指令+命令一樣覆蓋。
  13. ENTRYPOINT指令也是數組形式寫,會把run後面的命令自覺加入數組結構,不覆蓋。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章