第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
慕課專欄

目錄

索引目錄

跟 BAT 技術(shù)專家學(xué) Docker + K8S

原價 ¥ 68.00

立即訂閱
04 小身材大能量:Docker 概覽
更新時間:2020-07-21 18:58:15
生活永遠(yuǎn)不像我們想像的那樣好,但也不會像我們想像的那樣糟。——莫泊桑

這篇文章我們將來介紹一下 Docker 的基本情況,主要包括如下幾個部分:

  • Docker 是什么;
  • Docker v.s. 虛擬機(jī);
  • Docker 的應(yīng)用場景;
  • Docker 架構(gòu)淺析。

1. Docker 是什么

相信有很多同學(xué)在平時的工作或者學(xué)習(xí)中應(yīng)該都或多或少地使用過 Docker 了,那么 Docker 究竟是什么呢?有沒有一個準(zhǔn)確的定義來定義 Docker 呢?我們不妨先來看一下官方是如何來定義 Docker 的。

Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

簡單翻譯下就是:

Docker 是一個開源的平臺,我們可以用 Docker 來開發(fā)、部署和運(yùn)行我們的應(yīng)用程序。Docker 可以幫助我們將應(yīng)用程序和底層基礎(chǔ)設(shè)施進(jìn)行分離,以幫助我們更快的實(shí)現(xiàn)交付。通過 Docker 技術(shù),我們可以像管理我們的應(yīng)用一樣管理我們的基礎(chǔ)設(shè)施(比如基礎(chǔ)依賴等,這里的具體技術(shù)其實(shí)就是鏡像)。通過 Docker 技術(shù),我們可以精簡我們的整個開發(fā)和交互流程。

這里面的幾個核心點(diǎn)包括:

  • 平臺(platform):官方將 Docker 定義為一個平臺,但是其實(shí)更準(zhǔn)確的來說,Docker 其實(shí)是一個技術(shù)棧,包括 Docker 鏡像,可以類比為程序,是磁盤上面的靜態(tài)文件,可以通過 Docker 來啟動運(yùn)行;Docker 容器,也就是 Docker 鏡像的運(yùn)行時實(shí)例;Docker Daemon,用來管理機(jī)器上的鏡像、容器等。

  • 應(yīng)用程序和底層基礎(chǔ)設(shè)施分離:傳統(tǒng)的軟件開發(fā)模式是我們先開發(fā)好我們的應(yīng)用,然后在線上環(huán)境或者測試環(huán)境上先安裝應(yīng)用的基礎(chǔ)依賴,比如像一些 C++ 的二進(jìn)制文件會依賴一些操作系統(tǒng)的動態(tài)鏈接庫。

    依賴安裝完成之后,然后將應(yīng)用程序部署上去。使用 Docker 的鏡像技術(shù)我們可以將這些依賴和應(yīng)用程序都打包到鏡像中,然后測試或者正式上線的時候只需要將整個鏡像部署上去就可以了,不需要關(guān)心目標(biāo)服務(wù)器上面的基礎(chǔ)環(huán)境,這也就是應(yīng)用程序和基礎(chǔ)設(shè)施分離。也是精簡開發(fā)流程的核心的所在。

熟悉 Docker 的同學(xué)肯定會意識到這里對 Docker 的定義其實(shí)少了很多東西,確實(shí)是這樣的,比如 Docker 的隔離性和資源限制在定義里面都沒有體現(xiàn)出來。定義還是從一種更加宏觀的角度來介紹 Docker,也沒錯。

2. Docker v.s. 虛擬機(jī)

很多人學(xué)習(xí) Docker 的過程中都會看到有人把 Docker 拿來和虛擬機(jī)做對比,也就是下面這張圖。左邊是 Docker 的架構(gòu),右邊是虛擬機(jī)的架構(gòu)圖。我們可以看到 Docker 和虛擬機(jī)的主要區(qū)別有:

  • 所有的 Docker 應(yīng)用共享一個宿主機(jī)操作系統(tǒng),每個虛擬機(jī)有自己的操作系統(tǒng);
  • 每個 Docker 應(yīng)用通過 Docker 層和宿主機(jī)的操作系統(tǒng)交互,而虛擬機(jī)應(yīng)用直接和操作系統(tǒng)交互。

圖片描述

但是上圖左邊的圖中的 Docker 的位置其實(shí)很不嚴(yán)謹(jǐn),實(shí)際上 Docker 并不會像 Hypervisor 那樣對應(yīng)用進(jìn)程的隔離環(huán)境負(fù)責(zé),也不會創(chuàng)建任何實(shí)體的容器,真正對環(huán)境負(fù)責(zé)的是宿主機(jī)操作系統(tǒng)本身。所以上圖中 Docker 的問題應(yīng)該是處于靠邊的位置,因?yàn)橥ㄟ^ Docker 啟動的容器本質(zhì)上和操作系統(tǒng)中運(yùn)行的進(jìn)程并沒有本質(zhì)的區(qū)別。這個我們后面再細(xì)說。

3. Docker 的應(yīng)用場景

應(yīng)用交付

Docker 技術(shù)為應(yīng)用交付領(lǐng)域帶來的最大的變化就是開發(fā)環(huán)境的一致性。傳統(tǒng)的開發(fā)方式需要開發(fā)者自己在本地進(jìn)行開發(fā),但是本地的開發(fā)環(huán)境和遠(yuǎn)端的測試和正式環(huán)境還是存在差異,所以每次開發(fā)完成都需要反復(fù)比對環(huán)境的差異,包括操作系統(tǒng)以及操作系統(tǒng)里面的依賴軟件包是否齊全,非常的麻煩。

但是使用 Docker 鏡像,我們可以將所有的環(huán)境依賴都打包到鏡像中,然后通過鏡像來傳輸,這樣會更加地高效。

試想下面幾種場景:

  • 開發(fā)者在本地編寫代碼進(jìn)行開發(fā),然后通過 Docker 鏡像和其他協(xié)作者共享;
  • 使用 Docker 技術(shù)將應(yīng)用 push 到測試環(huán)境,自動觸發(fā)自動化 test case;
  • 當(dāng)開發(fā)者發(fā)現(xiàn)應(yīng)用程序的 bug 時,可以在本地開發(fā)環(huán)境進(jìn)行修復(fù)。修復(fù)完之后再將應(yīng)用重新部署到測試環(huán)境進(jìn)行測試驗(yàn)證;
  • 當(dāng)測試完成之后,需要給客戶的環(huán)境升級,只要把修復(fù)完的應(yīng)用鏡像推送到客戶可以訪問的鏡像中心即可。

多版本混合部署

隨著產(chǎn)品的不斷更新?lián)Q代,一臺服務(wù)器上部署同一個應(yīng)用的多個版本在企業(yè)內(nèi)部非常常見。但一臺服務(wù)器上部署同一個軟件的多個版本,文件路徑、端口等資源往往會發(fā)生沖突,造成多個版本無法共存的問題。

如果用 docker,這個問題將非常簡單。由于每個容器都有自己獨(dú)立的文件系統(tǒng),所以根本不存在文件路徑?jīng)_突的問題;對于端口沖突問題,只需要在啟動容器時指定不同的端口映射即可解決問題。

內(nèi)部開發(fā)測試環(huán)境

傳統(tǒng)的開發(fā)測試環(huán)境都是由運(yùn)維人員進(jìn)行專門的環(huán)境配置而搭建出來的,而且需要運(yùn)維人員進(jìn)行專門維護(hù)。環(huán)境一旦出現(xiàn)問題,恢復(fù)起來也很麻煩。

借助于 Docker 技術(shù),我們將應(yīng)用程序需要的依賴都固化到 Docker 鏡像中,然后在對應(yīng)的 Docker 容器中進(jìn)行開發(fā)測試。就算環(huán)境出現(xiàn)問題,我們只要將當(dāng)前容器刪除重新啟動即可恢復(fù)。

使用 Docker 鏡像來維護(hù)內(nèi)部開發(fā)測試環(huán)境還有另一個好處就是 DevOps,傳統(tǒng)的應(yīng)用開發(fā)部署要跨兩個團(tuán)隊(duì):開發(fā)團(tuán)隊(duì)負(fù)責(zé)開發(fā),運(yùn)維團(tuán)隊(duì)服務(wù)部署,一旦涉及到跨團(tuán)隊(duì)合作就要牽扯到溝通成本。而且開發(fā)作為應(yīng)用的 owner,實(shí)際上對其依賴環(huán)境會更加的熟悉才對。

通過 Docker 鏡像技術(shù),開發(fā)人員在開發(fā)應(yīng)用的過程中就將這些依賴固化到鏡像中。在環(huán)境部署環(huán)節(jié),即使需要運(yùn)維人員參與,也只是負(fù)責(zé)拉起 Docker。整個過程都會更加的高效。

Docker 的使用場景是非常多的,在這里我們主要討論幾種主要的應(yīng)用場景。

4. Docker 架構(gòu)淺析

很多人說 Docker 是簡單的 Server-Client 的架構(gòu),其實(shí)并不一定準(zhǔn)確。Docker 的架構(gòu)比較復(fù)雜,并不是純粹的只有 Server 和 Client。下圖是 Docker 架構(gòu)的一個詳細(xì)的圖。幾個主要的組成部分有:

  • Docker Client;
  • Docker Daemon;
  • Docker Registry。

圖片描述

Docker Client

我們安裝完 Docker 包之后,直接使用敲命令:docker ,界面是有提示的,這個 docker 就是 docker client。

docker client 都是用來和 docker daemon 交互的。

Docker Daemon

docker daemon 是一個 docker 后臺運(yùn)行的守護(hù)進(jìn)程,我們的 docker client 的命令就是和 Docker Daemon 來進(jìn)行交互的。

Docker daemon 啟動可以使用 service 或者 systemctl 操作.

service docker start
systemctl start docker.service

然后我們使用 ps 命令就能看到 docker daemon 進(jìn)程了。

$ ps aux | grep dockerd
root     10214  1.2  0.0 1014252 23768 ?       Ssl  00:58   0:00 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2

然后我們查看和 client 交互的 socket 文件也存在了。

$ll /var/run/docker.sock
srw-rw---- 1 root root 0 Dec  3 00:58 /var/run/docker.sock

Docker Registry

Registry 中文一般翻譯為注冊中心,是用來存儲 Docker 鏡像的地方。Docker Registry 有多種不同的表現(xiàn),比如 Docker Hub 就是一個公開的注冊中心,同時各大云廠商也提供了自己的注冊中心,比如阿里云、騰訊云等,甚至你可以搭建自己的私有注冊中心。

Docker 默認(rèn)使用 Docker Hub,比如我們執(zhí)行 docker pull <image-name> 時,Docker 默認(rèn)去 Docker Hub 中尋找名字為 image-name 的鏡像。如果使用自己的 Registry 需要進(jìn)行單獨(dú)的配置。

Docker Images

Image 一般中文稱之為鏡像。官方對鏡像的定義比較復(fù)雜,我一般使用類比的方式來理解鏡像。鏡像可以理解成計(jì)算機(jī)系統(tǒng)中的程序,也就是靜態(tài)的位于磁盤上面可以通過特定方式執(zhí)行的文件(程序是操作系統(tǒng)可以識別的特定的二進(jìn)制文件,Docker 鏡像是可以被 Docker Daemon 識別并執(zhí)行的特定文件)。

鏡像和普通的可執(zhí)行文件的區(qū)別在于鏡像是分層架構(gòu),每個鏡像一般都依賴于一個基礎(chǔ)鏡像。最基本的鏡像叫 scratch 鏡像。當(dāng)然我們也可以構(gòu)建自己的鏡像,然后發(fā)布到鏡像中心別人就也可以使用了。

Docker 鏡像的構(gòu)建是通過一個 DSL 語言來編寫的,叫 Dockerfile。后文我們會細(xì)說,這里就先不贅述了。

Docker Container

Container 也就是容器。Docker 官方對容器的定義非常的優(yōu)雅。

A container is a runnable instance of an image.

翻譯過來就是:

容器是鏡像的運(yùn)行實(shí)例。

這個定義和進(jìn)程的定義非常類似:進(jìn)程是程序的運(yùn)行實(shí)例。這樣我們就可以將鏡像類比為程序,容器類比為進(jìn)程,這樣就更好理解了。

我們可以使用 Docker 的 CLI 命令或者 API 來創(chuàng)建、啟動、停止和刪除容器等操作。同時對于運(yùn)行狀態(tài)的容器我們可以登錄進(jìn)去,類似 ssh 命令等操作。

容器默認(rèn)是和其他容器以及其宿主機(jī)隔離開的。具體的隔離策略可以進(jìn)行自定義設(shè)置。

5. 總結(jié)

本篇文章先從宏觀角度介紹了 Docker 的定位和應(yīng)用場景,然后又淺析了 Docker 的架構(gòu),學(xué)完本篇文章,對于完全的新手已經(jīng)對 Docker 有一個基本的認(rèn)識了。后面我們將循序漸進(jìn),不斷深入介紹 Docker 技術(shù)。

}
立即訂閱 ¥ 68.00

你正在閱讀課程試讀內(nèi)容,訂閱后解鎖課程全部內(nèi)容

千學(xué)不如一看,千看不如一練

手機(jī)
閱讀

掃一掃 手機(jī)閱讀

跟 BAT 技術(shù)專家學(xué) Docker + K8S
立即訂閱 ¥ 68.00

舉報

0/150
提交
取消