作為一個之前從來沒有接觸過Docker的倒霉蛋,想了解學習一下Docker
搜了CSDN和RUNOOB,得到的描述如下:
Docker 是一個開源的應用容器引擎,基于?Go 語言?并遵從 Apache2.0 協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
?Docker 的應用場景
微服務架構:每個服務獨立容器化,便于管理和擴展。
CI/CD流水線:與 Jenkins/GitLab CI 集成,實現自動化構建和測試。
開發環境標準化:新成員一鍵啟動全套依賴服務(如數據庫、消息隊列)。
云原生基礎:Kubernetes 等編排工具基于 Docker 管理容器集群。
Docker是什么
是一個開源的應用容器引擎,基于go語言開發并遵循apache2.0協議開源
是在Linux容器里運行應用的開源工具
是一種輕量級的 “虛擬機”
Docker的容器技術,可以在一臺主機上輕松為任何應用創建一個輕量級的、可移植的、自給自足的容器
市場占有率最高? ? ? ? ? ? ? ? ? ? ? ??
原文鏈接:https://blog.csdn.net/F12138X/article/details/140344339
但說實話,我讀了這些很正式的“全網統一”?的概念性官方描述,關于Docker到底是什么東西,還是沒有一個落地的認知,因為我很難理解“引擎”、“虛擬化”、“容器”。這很像是我不懂某個詞的含義,我去查,查出來的解釋里面有三個我不懂含義的詞。
于是我嘗試得出一個最簡單的結論:Docker是一個管打包的,或者我們暫且用“封裝”來理解
比方這樣一個場景:
有個項目,有前端angular環境、后端python環境、又依賴數據庫,又引用外置的三方庫包DLL
這時候新來了一個項目成員,我要給他配置搭建環境
于是我花了一個下午的時間,把什么node.js、python3.7、lib/DLL都拷到他電腦上裝好,啟動的時候又出了一些狀況,修修改改,終于是能啟動了,可以讓他看代碼然后嘗試開發。搞得汗流浹背
但如果后面再進新人,每一個我都折騰這么半天,效率實在是低
如果有一種技術可以把我們所需要的所有環境、依賴、配置都統一打包封裝好,到時候由機器按照流程去做這個搭建,那就很爽了
哎,這就是docker要干的事
于是我們引入三個Docker中的核心概念:鏡像(Image),容器(Container),倉庫(Repository)
上面說到,我們可以通過Docker,把app運行需要的所有內容(代碼、庫文件、環境變量、配置文件)都打包封裝好,這個過程生成出來的東西,叫做鏡像
我們通過指令來告知docker如何進行打包封裝,指令集我們放在Dockerfile當中
到了鏡像這里,app就已經是可移植的啦,把鏡像拿到其他目標環境當中,再進行實例化,就得到了容器。容器是鏡像的運行實例,是一個輕量級、可移植的執行環境。我們的一個鏡像可以拿到多個地方,生成多個容器,完成app的移植
那么這個鏡像是如何轉移的呢,我們自然可以像拷貝代碼一樣將鏡像一份一份拷貝,也可以像git一樣通過倉庫來完成代碼的上傳和下載。也就是說,docker也是有倉庫的。
我們可以通過注冊個人docker倉庫,將自己的鏡像上傳,供以下載使用
同時呢,docker也有很多官方倉庫,里面放了一些標準通用的環境,比如說各個版本的操作系統,各個版本的Nginx,各個版本的python等等。我們也可以在這些docker已經準備好的環境基礎上再定制自己的鏡像
【Rigistry:倉庫注冊服務器,如Docker?Hub】
【Repository:具體的鏡像倉庫,如nginx、mysql】
至此,關于docker的基本核心概念,就有一個大概準確的了解了,再回頭看文章開頭的那些描述,也更好理解他們在嘰里咕嚕表達什么了。
這里還有一個誤區,不是只有那一整套環境、代碼、依賴才叫容器,他們確實是一個大的容器,但是事實上,比方說數據庫MySQL,后端python,前端angular,他們可以是在大容器中包含的幾個小容器,容器之間是可以進行數據通信的。不要像我之前一樣把容器理解的太狹隘了
關于docker命令,我準備放在后面和linux命令合并在同一篇來寫
?