鏡像不僅包含應用本身,還包含應用運行所需要的環(huán)境、配置、系統(tǒng)函數(shù)庫。Docker會在運行鏡像時創(chuàng)建一個隔離環(huán)境,稱為容器。

鏡像倉庫:存儲和管理鏡像的平臺,Docker官方維護了一個公共倉庫:Docker Hub。

image

常用命令

image

案例演示

數(shù)據(jù)卷

容器是隔離環(huán)境,容器內(nèi)程序的文件、配置、運行時產(chǎn)生的容器都在容器內(nèi)部,我們要讀寫容器內(nèi)的文件非常不方便。因此,容器提供程序的運行環(huán)境,但是程序運行產(chǎn)生的數(shù)據(jù)、程序運行依賴的配置都應該與容器解耦,由此引出數(shù)據(jù)卷。數(shù)據(jù)卷(volume)是一個虛擬目錄,是容器內(nèi)目錄與宿主機目錄之間映射的橋梁。

image

這樣以來,容器內(nèi)的/etc/nginx/conf.d/usr/share/nginx/html目錄就與宿主機的/etc/nginx/usr/share/nginx/html目錄關聯(lián)起來,我們稱為掛載。此時,我們操作宿主機的/usr/share/nginx/html就是在操作容器內(nèi)的/usr/share/nginx/html目錄。只要我們將靜態(tài)資源放入宿主機對應目錄,就可以被Nginx代理了。

數(shù)據(jù)卷常用命令

注意:容器與數(shù)據(jù)卷的掛載要在創(chuàng)建容器時配置,對于創(chuàng)建好的容器,是不能設置數(shù)據(jù)卷的。而且創(chuàng)建容器的過程中,數(shù)據(jù)卷會自動創(chuàng)建。案例演示

直接掛在本地文件或目錄

可以發(fā)現(xiàn),數(shù)據(jù)卷的目錄結構較深,如果我們?nèi)ゲ僮鲾?shù)據(jù)卷目錄會不太方便。在很多情況下,我們會直接將容器目錄與宿主機指定目錄掛載。掛載語法與數(shù)據(jù)卷類似:

注意:本地目錄或文件必須以/.開頭,如果直接以名字開頭,會被識別為數(shù)據(jù)卷名而非本地目錄名。

鏡像后端程序員往往要構建自己的鏡像,必須先了解鏡像的結構

之前說過,鏡像之所以能讓我們快速跨操作系統(tǒng)部署應用而忽略其運行環(huán)境、配置,就是因為鏡像中包含了程序運行需要的系統(tǒng)函數(shù)庫、環(huán)境、配置、依賴。因此自定義鏡像本質(zhì)就是依次準備好程序運行的基礎環(huán)境、依賴、應用本身、運行配置等文件,并且打包而成。所以鏡像就是一堆文件的集合。但需要注意的是,鏡像文件不是隨意堆放的,而是按照操作的步驟分層疊加而成,每一層形成的文件都會單獨打包并標記一個唯一id,稱為Layer(層)。這樣,如果我們構建時用到的某些層其他人已經(jīng)制作過,就可以直接拷貝使用這些層,而不用重復制作。例如,第一步中需要的Linux運行環(huán)境,通用性就很強,所以Docker官方就制作了這樣的只包含Linux運行環(huán)境的鏡像。我們在制作鏡像時,就無需重復制作,直接使用Docker官方提供的CentOS或Ubuntu鏡像作為基礎鏡像。然后再搭建其它層即可,這樣逐層搭建,最終整個項目的鏡像結構如圖所示:

image

Dockerfile

由于制作鏡像的過程中,需要逐層處理和打包,比較復雜,所以Docker就提供了自動打包鏡像的功能。我們只需要將打包的過程,每一層要做的事情用固定的語法寫下來,交給Docker去執(zhí)行即可。參考語法常用的語法如下:

網(wǎng)絡

一般一個項目往往要訪問很多中間件,如mysql,redis,如何讓容器之間能夠相互訪問?默認情況下,所有容器都是以bridge方式連接到Docker的一個虛擬網(wǎng)橋上,但是,容器的網(wǎng)絡IP其實是一個虛擬的IP,其值并不固定與某一個容器綁定,如果我們在開發(fā)時寫死某個IP,而在部署時很可能容器的IP會發(fā)生變化,連接會失敗。所以,我們必須借助于docker的網(wǎng)絡功能來解決這個問題

image

? 在自定義網(wǎng)絡中,可以給容器起多個別名,默認的別名是容器名本身
? 在同一個自定義網(wǎng)絡中的容器,可以通過別名互相訪問

DockerCompose

一般一個項目需要包含多個容器,手動每個部署非常麻煩,而Docker Compose就可以幫助我們實現(xiàn)多個相互關聯(lián)的Docker容器的快速部署。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯(lián)的應用容器。幫助我們實現(xiàn)多個相互關聯(lián)的Docker容器的快速部署。

image

image

案例參考:

原文轉載自:https://mp.weixin.qq.com/s/t3Obk8qozFutKgG8d2mTiw

上一篇:

DeepSeek + Playwright 實戰(zhàn):AI 自動生成高覆蓋率測試腳本

下一篇:

LangChain4j實戰(zhàn)-Java AI應用開源框架之LangChain4j和Spring AI
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費