日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【学习笔记】Docker - 01. Docker是啥

發布時間:2023/12/4 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】Docker - 01. Docker是啥 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我只是把之前的學習筆記整理一下,貼到這里,可能會顯得比較凌亂。

1.1?啥是Docker?

?

Docker 是一個開源項目,它被用來做構建、打包和運行程序。它是一個命令行程序,一個后臺進程,也是一組使用邏輯方法來解決常見軟件問題的遠程服務,讓你可以簡化安裝、運行、發布、刪除軟件的體驗。它是通過一種叫做容器的操作系統技術來實現這些功能的。

?

1.1.1 Hello World

前提條件:安裝Docker,需要互聯網連接。

命令:?docker run?dockerinaction/hello_world

?

docker?run,它告訴docker你想觸發這一系列動作:在容器內安裝和運行程序

命令的第二部分指明了你想在容器里運行的程序,?本例中就是?dockerinaction/hello_world,?它叫做鏡像?(image)?名?(有時候也叫做倉庫?repository).?從現在開始,?你就可以把鏡像的名字作為你想安裝或運行的程序名.?鏡像本身就是一組文件和元數據.?其中元數據包括了要運行的特定程序和相關配置.

·?????????本例容器運行結果就是輸出一個“hello world”,?輸出完,?程序就退出了.?這時容器的狀態被標記為?stopped.

·?????????容器的運行狀態直接和容器內的單個運行程序的狀態是綁定的.?如果一個程序在運行狀態,?那么容器也在運行狀態;?如果這個程序是出于停止狀態的,?那么容器也是停止狀態的.

·?????????重啟容器將會重新運行該程序.

?

當你第二次運行該命令的時候:

?


1.1.2?容器

歷史上, UNIX風格的操作系統使用jail這個術語來描述一個被修改的運行時環境,?意思是它會把jailed的程序可訪問的資源限制在一定范圍之內.

任何使用Docker運行的軟件都是放在容器內的. Docker使用現有的容器引擎來提供根據最佳實踐來構建的一致容器,?這就為每個人提供了更大的安全保障.

使用Docker,?用戶獲得容器的成本要低得很,?因為Docker會幫助你處理這一切.

?

1.1.3?容器不是虛擬化

·?????????與虛擬機不一樣, Docker容器不使用任何的硬件虛擬化.?在Docker容器內運行的程序直接與主機的Linux內核交互.

o????許多程序是可以獨立運行的,?對操作系統沒有更多的依賴,?頁不需要忍受整個啟動過程造成的延遲

o????這是一個非常重要的區別.

o????Docker不是虛擬化技術.

o????它幫助你使用你操作系統內核已經存在的容器技術.

·?????????你可以在操作系統為現代Linux的虛擬機里面使用Docker.

?

1.1.4?容器中運行軟件,?為的是隔離性

·?????????Docker?使用?Linux命名空間和cgroups,?cgroups自從2007年開始就成為了Linux?的一部分.

·?????????Docker?本身并不提供容器技術,?但是它使得容器技術可以更簡單的使用

·?????????

在這里CLI運行在user space內存里,?和其它程序一樣,?也是運行在操作系統之上.?理想狀態下,?在user space里運行的程序無法修改內核空間(kernel space)內存.?更廣泛的說,?操作系統是所有用戶程序和支撐計算機運行的硬件之間的接口.

·?????????

你可以看見,?運行Docker其實意味著在user space?里面運行兩個程序.

o????Docker?引擎,?如果安裝適當的話,?這個進行會一直運行的.

o????Docker CLI,?這額是用戶交戶的Docker程序.?如果你想開始,?停止,?或安裝軟件,?你就會向Docker程序發送一個相應的命令.

上圖中,?你可以看三個正在運行的程序,?每一個都是作為Docker引擎的子進程運行的,?外邊包裹著一個容器.

o????委托進程是運行在user space的自己的內存子空間里.

o????運行在容器內的程序至可以訪問它們自己的內存和資源,?也就是容器限定的內存和資源.

?

·?????????Docker構建容器時(構建容器在運行時)使用了10個主要的系統特性:

o????PID namespace—Process identifiers and capabilities

o????UTS namespace—Host and domain name

o????MNT namespace—File system access and structure

o????IPC namespace—Process communication over shared memory

o????NET namespace—Network access and structure

o????USR namespace—User names and identifiers

o????chroot()—Controls the location of the file system root

o????cgroups—Resource protection

o????CAP drop—Operating system feature restrictions

o????Security Modules—Mandatory access controls

1.1.5 Shipping Containers?運輸容器

你可以把Docker容器看作物理運輸使用的集裝箱一樣.?它就是一個箱子,?在這里你可以存儲和運行應用程序及其所有的依賴項(除了運行操作系統內核這一條).?和起重機,?開車,?火車,?輪船可以很方便的使用集裝箱一樣,?用Docker來運行,?復制,?分發容器也是非常簡單的.?而且Docker讓這個傳統的集裝箱比喻更加完整,?它加入了打包和分發軟件的方式.?負責運輸容器的組件就叫做鏡像?image.

?

前面的例子里的鏡像只包含一個文件,?一個linux的可執行程序.

·?????????而一般來說, Docker鏡像是容器內運行的程序需要用到的所有文件的一個捆綁的快照.

·?????????從一個鏡像,?你可以創建任意個容器,?這些容器都是從同一個鏡像作為起點來創建的,?它們并不會共享對文件系統的修改.

·?????????當你使用Docker分發軟件的時候,?你使用這些鏡像來進行分發,?其它的計算機也是通過這些鏡像來創建容器的.

·?????????鏡像就是Docker生態里可運輸的單元.

?

?

1.2 Docker?解決了什么問題?

·?????????使用軟件是一件非常復雜的事.

o????在安裝軟件前,?你需要考慮使用哪個操作系統,

o????軟件所需的資源,

o????已經安裝了哪些軟件,

o????它還依賴于其它哪些軟件.

o????還需要決定軟件應該安裝在哪,

o????然后你還需要知道如何去安裝它.

現在各個軟件的安裝過程差別也非常大,?所以安裝軟件其實是非常復雜且沒有一致性的操作.?如果你想讓多臺電腦在不同時刻使用相同的一套軟件,?那么情況只會更加糟糕.

大部分人的電腦都安裝了不只一個程序,?很多程序還依賴于其它程序.?如果你想要使用的軟件無法和其它軟件很好的一起工作,?那么該怎么辦??災難.

·?????????而當多個程序共享依賴項的時候,?一切只會變得更加復雜:

o????如果一個程序的依賴項需要升級,?而其它程序的這個依賴項卻不需要升級,?那么會發生什么?

o????當你移除了一個程序,?它真的被刪除了嗎?

o????你可以移除老的依賴項嗎?

o????你還記得為了安裝這個軟件你做的那些修改嗎??現在你想刪除這個軟件,?這些修改怎么辦?

所以說,?軟件越多,?越難管理.?此外,?還有安全性需要考慮.

這些一切的一切管理起來很難,?并且很浪費時間.

?

1.2.1 Getting Organized

沒有Docker,?你的電腦看起來就像裝滿垃圾的抽屜一樣,?亂七八糟.

?

而使用Docker, Docker會把一切整理的井然有序,?通過鏡像和容器,?一切都被隔離了.

看起來這里創建了一些多余的依賴項,?例如gcc,?所以會引入一些開銷.?這點以后再解釋,?簡單的說就是Docker的打包系統會削減存儲開銷的.

?

1.2.2?改善可移植性

另一個軟件問題就是應用程序的依賴項里通常包括特定的操作系統.?操作系統間的可移植性對用戶來說是個大問題.?例如一些在Linux和Mac上可以兼容的程序,?想要在Windows上使用它就挺困難.?這可能需要重構整個軟件,?而且還需要Windows有相應的依賴替代項.

現在, Docker可以在Linux上原生的運行,?在Mac和Windows上需要使用一個虛擬機.?這種在Linux上的聚合意味著在Docker容器中運行的軟件只需要針對一組一致的依賴項編寫一次即可.

在Windows和Mac上, Docker使用一個很小的虛擬機來運行所有容器.?這樣的話,?運行虛擬機的開銷是固定的,?而容器的數量確實可以擴展的.

優點有三個:

·?????????解鎖了新世界.?例如以前無法在Windows上運行的Linux軟件現在也可以使用了.

·?????????可以在任何系統上運行完全相同的軟件.

·?????????軟件維護者可集中精力針對一套平臺和依賴來開發軟件了.

?

1.2.3?保護你的計算機

容器可以保護我的計算機不受容器中運行的軟件影響.

程序的風險主要有這些:

·?????????程序可能是惡意程序員寫的

·?????????善意開發者寫出來的程序也可能含有有害的bug

·?????????程序輸入處理中的漏洞,?可能被惡意攻擊者利用

?

和實體監獄一樣,?容器里的任何東西只能訪問容器里面的東西.?但是用戶可以設置一些例外.

左側就是惡意程序直接訪問到了敏感資源.

右側,?惡意程序被限制在了容器里.

?

1.3 Docker?為什么這么重要?

·?????????Docker?提供了一種抽象,?抽象允許你使用簡化的方式來處理復雜的事物.?針對Docker來說,?我們只需考慮安裝哪個軟件即可.?安裝和刪除的過程異常簡單.

·?????????每個人都可以使用,?省時省力省錢.

·?????????軟件社區正在大力推動使用容器和Docker

·?????????它為桌面實現了移動設備的應用商店一樣的功能.?并且Docker的做法是跨平臺并且開放的.

·?????????更好更多的采用了操作系統的高級隔離特性.

?

1.4?何時何地使用Docker?

Docker幾乎可在任何地方運行,?但是并不意味著這樣做就合適.

在桌面上運行Windows/OS X原生程序是不行的.

容器對于必須取得機器全部控制權限的程序的安全性是沒有多大幫助的.

?

1.5 Docker在更大的生態中

·?????????今天容器的生態更大,?高級工具也很多,?它們主要是為了解決一些新出現的,?高階的問題:?容器編排,?高可用集群,?微服務生命周期管理,?可見性.

·?????????這些工具通常是作為插件或者依賴于Docker提供更高級的功能性.?有一些工具使用了Docker的子組件,?這些子組件是獨立的項目,?例如?runc,?libcontainerd, notary等.

·?????????Kubernetes是整個生態中除了Docker之外最值得一提的工具.?它提供了一個可擴展平臺,?用于在集群環境中把服務作為容器進行編排.?它已經成長為某種“數據中心操作系統”了.?就像Linux?內核一樣,?云提供商和平臺公司都在對Kubernetes進行包裝. Kubernetes依賴于像Docker一樣的容器引擎,?所以在你筆記本上構建的容器和鏡像在Kubernetes里面也會運行.

?

1.6 Docker?命令行幫助

docker

docker help

docker help <command>

?

?

總結

以上是生活随笔為你收集整理的【学习笔记】Docker - 01. Docker是啥的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。