溫故知新:docker鏡像

本文為學(xué)習(xí)筆記手负,會(huì)隨著學(xué)習(xí)深入持續(xù)更新无牵,僅供參考
場景:簡化部署步驟飞蛹,通過docker打包組件鏡像實(shí)現(xiàn)快速部署谤狡,支持機(jī)器擴(kuò)展(打包前,請參考官方確認(rèn)是否建議用docker鏡像部署)


一桩皿、基本概念
Docker 容器化技術(shù)允許你將應(yīng)用程序及其所有依賴項(xiàng)打包到一個(gè)標(biāo)準(zhǔn)化的單元中豌汇,這個(gè)單元稱為 Docker 容器。容器提供了一個(gè)隔離的運(yùn)行環(huán)境泄隔,確保應(yīng)用程序可以在任何支持 Docker 的系統(tǒng)上運(yùn)行拒贱,而無需擔(dān)心底層環(huán)境的差異。

1佛嬉、分層文件系統(tǒng)
Docker 鏡像由多個(gè)只讀層組成逻澳,每一層都是對基礎(chǔ)層的增量更新。鏡像構(gòu)建過程中暖呕,每執(zhí)行一條指令就會(huì)創(chuàng)建一層斜做。容器運(yùn)行時(shí),會(huì)在鏡像之上添加一個(gè)可寫層湾揽。
2瓤逼、隔離與虛擬化
Docker 使用 Linux 內(nèi)核的 命名空間(Namespaces) 和 控制組(cgroups) 技術(shù)來實(shí)現(xiàn)容器的資源隔離和限制。命名空間提供了隔離的運(yùn)行環(huán)境库物,控制組則限制了容器能夠使用的資源霸旗。
3、網(wǎng)絡(luò)與存儲
Docker 提供了靈活的網(wǎng)絡(luò)配置選項(xiàng)戚揭,可以通過橋接模式诱告、主機(jī)模式、自定義網(wǎng)絡(luò)等方式配置容器網(wǎng)絡(luò)民晒。Docker 卷(Volumes)用于持久化存儲數(shù)據(jù)精居,使得數(shù)據(jù)可以在容器重啟或刪除后仍然保留。


二. Docker 鏡像的構(gòu)建過程
1潜必、編寫 Dockerfile
Dockerfile 是一個(gè)包含一系列指令的文本文件靴姿,這些指令定義了如何構(gòu)建 Docker 鏡像。每條指令都會(huì)在鏡像中創(chuàng)建一層磁滚,最終形成一個(gè)多層次的鏡像空猜。
示例 Dockerfile:

復(fù)制代碼# 使用一個(gè)基礎(chǔ)鏡像
FROM ubuntu:20.04

# 安裝所需的軟件包
RUN apt-get update && apt-get install -y python3

# 復(fù)制應(yīng)用程序代碼到鏡像中
COPY . /app

# 設(shè)置工作目錄
WORKDIR /app

# 指定容器啟動(dòng)時(shí)要運(yùn)行的命令
CMD ["python3", "app.py"]

2.構(gòu)建 Docker 鏡像
在包含 Dockerfile 的目錄中運(yùn)行以下命令來構(gòu)建鏡像:

docker build -t my-application:latest 

這會(huì)創(chuàng)建一個(gè)名為 my-application 的 Docker 鏡像。

  1. Docker 鏡像的存儲與分發(fā)
    本地存儲:構(gòu)建好的 Docker 鏡像存儲在本地 Docker 注冊表中,可以通過 docker images 命令查看辈毯。
    推送到遠(yuǎn)程倉庫:為了在其他機(jī)器上使用鏡像,可以將其推送到遠(yuǎn)程鏡像倉庫搜贤,如 Docker Hub谆沃、AWS ECR 等。
docker tag my-application:latest your-dockerhub-username/my-application:latest
docker push your-dockerhub-username/my-application:latest
  1. 在其他機(jī)器上拉取與運(yùn)行 Docker 鏡像
    拉取鏡像: 在另一臺機(jī)器上仪芒,從遠(yuǎn)程倉庫拉取鏡像:
docker pull your-dockerhub-username/my-application:latest

運(yùn)行容器: 使用拉取的鏡像啟動(dòng)容器:

docker run -d --name my-application-container your-dockerhub-username/my-application:latest

-d 參數(shù)表示容器在后臺運(yùn)行唁影,--name 參數(shù)為容器指定一個(gè)名稱。


三掂名、docker鏡像擴(kuò)展機(jī)器
1据沈、kafka集群打包docker鏡像


四、Kubernetes簡介
K8s是一個(gè)用于自動(dòng)化容器化應(yīng)用程序的部署饺蔑、擴(kuò)展和管理的開源平臺锌介。它能夠有效地管理 Docker 鏡像,并在集群中的多個(gè)節(jié)點(diǎn)上運(yùn)行和擴(kuò)展容器猾警。以下是 Kubernetes 管理 Docker 鏡像的基本原理和工作流程:

  1. 鏡像存儲與分發(fā)
    容器鏡像倉庫:
    Kubernetes 使用容器鏡像倉庫(如 Docker Hub孔祸、Google Container Registry、AWS ECR 等)來存儲和分發(fā) Docker 鏡像发皿。在部署應(yīng)用程序時(shí)崔慧,Kubernetes 會(huì)從指定的鏡像倉庫拉取所需的鏡像。

  2. 配置和部署鏡像
    Pod 和 Deployment:
    在 Kubernetes 中穴墅,最小的可部署單元是 Pod惶室,一個(gè) Pod 可以包含一個(gè)或多個(gè)容器。為了方便管理和擴(kuò)展玄货,通常使用 Deployment 來定義和管理 Pod皇钞。
    以下是一個(gè)簡單的 Deployment YAML 文件示例,用于部署一個(gè)基于 Docker 鏡像的應(yīng)用程序:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-application
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-application
  template:
    metadata:
      labels:
        app: my-application
    spec:
      containers:
      - name: my-application-container
        image: your-dockerhub-username/my-application:latest
        ports:
        - containerPort: 80
  1. 鏡像拉取策略
    Kubernetes 支持多種鏡像拉取策略誉结,可以通過 imagePullPolicy 字段進(jìn)行配置:
    Always:每次啟動(dòng) Pod 時(shí)總是拉取最新的鏡像鹅士。
    IfNotPresent:如果本地沒有該鏡像則拉取,否則使用本地鏡像惩坑。
    Never:只使用本地已有的鏡像掉盅,且不會(huì)嘗試?yán) ?br> 示例:
spec:
  containers:
  - name: my-application-container
    image: your-dockerhub-username/my-application:latest
    imagePullPolicy: Always
  1. 節(jié)點(diǎn)上的鏡像緩存
    Kubernetes 集群中的每個(gè)節(jié)點(diǎn)都會(huì)運(yùn)行一個(gè)容器運(yùn)行時(shí)(如 Docker),該運(yùn)行時(shí)負(fù)責(zé)管理本地的鏡像緩存以舒。當(dāng)一個(gè) Pod 被調(diào)度到某個(gè)節(jié)點(diǎn)時(shí)趾痘,如果該節(jié)點(diǎn)上已經(jīng)存在所需的鏡像,則不會(huì)重新拉取鏡像蔓钟,從而加快啟動(dòng)速度永票。

  2. 安全性與鏡像拉取憑據(jù)
    對于私有鏡像倉庫,需要提供鏡像拉取憑據(jù)÷录可以通過創(chuàng)建 Kubernetes Secret 來存儲這些憑據(jù)键俱,并在 Pod 配置中引用它們。
    創(chuàng)建 Secret:

kubectl create secret docker-registry myregistrykey --docker-server=myregistrydomain.com --docker-username=myusername --docker-password=mypassword --docker-email=myemail@example.com

在 Pod 配置中引用 Secret:

spec:
  imagePullSecrets:
  - name: myregistrykey
  containers:
  - name: my-application-container
    image: myregistrydomain.com/my-application:latest
  1. 鏡像更新與滾動(dòng)更新
    Kubernetes 的 Deployment 控制器支持滾動(dòng)更新世分,通過逐步替換舊版本的 Pod 來實(shí)現(xiàn)應(yīng)用程序無縫升級编振。
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  1. 高可用與負(fù)載均衡
    Kubernetes 使用 Service 來暴露一組 Pod,Service 提供了負(fù)載均衡和服務(wù)發(fā)現(xiàn)功能臭埋,使得應(yīng)用程序可以實(shí)現(xiàn)高可用踪央。

示例:

apiVersion: v1
kind: Service
metadata:
  name: my-application-service
spec:
  selector:
    app: my-application
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
  1. 集群管理與調(diào)度
    Kubernetes 的控制平面(Control Plane)負(fù)責(zé)整個(gè)集群的管理與調(diào)度,包括監(jiān)控節(jié)點(diǎn)狀態(tài)瓢阴、調(diào)度 Pod畅蹂、自動(dòng)擴(kuò)展等功能∪倏郑控制平面組件包括:
    API Server:提供集群管理的 REST API 接口液斜。
    Scheduler:負(fù)責(zé)將 Pod 調(diào)度到合適的節(jié)點(diǎn)。
    Controller Manager:執(zhí)行各種控制循環(huán)募胃,如 Deployment 控制器旗唁、節(jié)點(diǎn)控制器等。
    etcd:分布式鍵值存儲痹束,用于存儲集群狀態(tài)數(shù)據(jù)检疫。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祷嘶,隨后出現(xiàn)的幾起案子屎媳,更是在濱河造成了極大的恐慌,老刑警劉巖论巍,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烛谊,死亡現(xiàn)場離奇詭異,居然都是意外死亡嘉汰,警方通過查閱死者的電腦和手機(jī)丹禀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鞋怀,“玉大人双泪,你說我怎么就攤上這事∶芩疲” “怎么了焙矛?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長残腌。 經(jīng)常有香客問我村斟,道長贫导,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任蟆盹,我火速辦了婚禮孩灯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘日缨。我一直安慰自己钱反,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布匣距。 她就那樣靜靜地躺著,像睡著了一般哎壳。 火紅的嫁衣襯著肌膚如雪毅待。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天归榕,我揣著相機(jī)與錄音尸红,去河邊找鬼。 笑死刹泄,一個(gè)胖子當(dāng)著我的面吹牛外里,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播特石,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼盅蝗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姆蘸?” 一聲冷哼從身側(cè)響起墩莫,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逞敷,沒想到半個(gè)月后狂秦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡推捐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年裂问,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牛柒。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堪簿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焰络,到底是詐尸還是另有隱情戴甩,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布闪彼,位于F島的核電站甜孤,受9級特大地震影響协饲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缴川,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一茉稠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧把夸,春花似錦而线、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岂膳,卻和暖如春誓竿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谈截。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工筷屡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人簸喂。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓毙死,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喻鳄。 傳聞我的和親對象是個(gè)殘疾皇子扼倘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容