国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Docker優(yōu)秀實踐:5個方法精簡你的鏡像

新聞 前端
基于Dockerfile生成鏡像,使用這個鏡像生成的容器,我們要盡可能的縮短容器的生命周期。這里我的理解是,不要將容器當做vm 來使用, 這個容器可以被停止或者銷毀, 然后可以根據(jù)設置和配置的變動重新生成新的容器。

 [[323396]]

創(chuàng)建短生命周期容器

基于Dockerfile生成鏡像,使用這個鏡像生成的容器,我們要盡可能的縮短容器的生命周期。這里我的理解是,不要將容器當做vm 來使用, 這個容器可以被停止或者銷毀, 然后可以根據(jù)設置和配置的變動重新生成新的容器。

理解構建上下文

當你觸發(fā)docker build 命令時,當前目錄就被稱為構建上下文(build context)。默認情況下 Dockerfile文件就在這個目錄下, 但是可以通過 -f 參數(shù)來指定Dockerfile的位置。不管Dockerfile在哪里,當前目錄中的所有文件和目錄都會作為構建上下文發(fā)送到 docker daemon 進程。

構建上下文示例

創(chuàng)建一個目錄并且使用cd進入該目錄。在hello文件中寫”hello”,同時創(chuàng)建 Dockerfile文件并且cat hello文件。在當前上下文(.)中構建鏡像:

  1. mkdir myproject && cd myproject 
  2.  
  3. echo "hello" > hello 
  4.  
  5. echo -e "FROM busyboxnCOPY /hello /nRUN cat /hello" > Dockerfile 
  6.  
  7. docker build -t helloapp:v1 . 

將Dockerfile 和 hello 文件移動到另一個目錄中。并且再構建一個鏡像(不使用上個鏡像構建緩存)。使用-f來指定 Dockerfile 并且明確上下文目錄:

  1. mkdir -p dockerfiles context 
  2.  
  3. mv Dockerfile dockerfiles && mv hello context 
  4.  
  5. docker build --no-cache -t helloapp:v2 -f dockerfiles/Dockerfile context 

在構建過程中導入了不必要的文件將會導致更大的構建上下文,從而會構建出更大的鏡像。這會增加構建鏡像的時間,拉取和上傳鏡像的時間以及容器的大小。當你使用Dockerfile構建鏡像時,可通過如下信息查看你的構建上下文的大小:

Sending build context to Docker daemon 187.8MB

使用.dockerignore 排除不需要加入鏡像的文件

有的時候我們會需要排除一些與我們構建鏡像不相關的文件,這時候我們可以通過編寫.dockerignore在不改變代碼結構的情況下達到這一目的。這個文件的實現(xiàn)方式與.gitignore很像,關于如何創(chuàng)建一個.dockerignore,可以參考.dockerignore file

使用多階段構建

multi-stage builds 技術可以大幅度減少最終鏡像的大小,而不是想辦法去減少構建過程中的層級數(shù)和文件。

因為鏡像是在構建過程最后階段生成的,因此我們可以通過leveraging build cache來最小化鏡像層。

舉個例子來說,如果構建一個鏡像,這個鏡像有很多層,可以按照鏡像層的修改頻率來排序(就是將不經(jīng)常更新的層作為最底層,這樣可以復用構建緩存):

  • 安裝工具
  • 安裝或者更新依賴
  • 生成你的應用

一個 Go 應用的 Dockerfile示例:

  1. FROM golang:1.11-alpine AS build 
  2.  
  3. # Install tools required for project 
  4.  
  5. # Run `docker build --no-cache .` to update dependencies 
  6.  
  7. RUN apk add --no-cache git 
  8.  
  9. RUN go get github.com/golang/dep/cmd/dep 
  10.  
  11. # List project dependencies with Gopkg.toml and Gopkg.lock 
  12.  
  13. # These layers are only re-built when Gopkg files are updated 
  14.  
  15. COPY Gopkg.lock Gopkg.toml /go/src/project/ 
  16.  
  17. WORKDIR /go/src/project/ 
  18.  
  19. # Install library dependencies 
  20.  
  21. RUN dep ensure -vendor-only 
  22.  
  23. # Copy the entire project and build it 
  24.  
  25. # This layer is rebuilt when a file changes in the project directory 
  26.  
  27. COPY . /go/src/project/ 
  28.  
  29. RUN go build -o /bin/project 
  30.  
  31. # This results in a single layer image 
  32.  
  33. FROM scratch 
  34.  
  35. COPY --from=build /bin/project /bin/project 
  36.  
  37. ENTRYPOINT ["/bin/project"
  38.  
  39. CMD ["--help"

不安裝不需要的包

為了減小鏡像的復雜度和大小, 我們應當避免安裝一些我們不需要的 packages。舉個例子來說,你不需要在數(shù)據(jù)庫鏡像中安裝文本編輯器。

應用解耦

每個容器應當只含有一個應用實例, 將多個應用解耦至多個容器可以很方便的對應用進行水平擴展,并且可以復用容器。舉個例子來說,一個 web 應用應當包含三個容器(web容器, 數(shù)據(jù)庫容器, 緩存容器),每一個容器對應一個鏡像。

每個容器中限制只能有一個進程是一個很好的經(jīng)驗法則, 但這也不是一個硬性的規(guī)定。容器中的進程不僅可以由 init 創(chuàng)建, 一些程序可能會額外的生成一些他們自己的進程。比如, Celery會生成多個 worker 進程, Apache 對每一個請求創(chuàng)建一個進程。

每種場景不一樣,規(guī)則也不一樣。但是應該盡可能的保證我們的容器功能明確和模塊化。如果容器之間相互依賴(容器之間可能需要通信), 你可以使用Docker container networks 確保容器間通信。

減小鏡像層數(shù)

減少鏡像層數(shù)對于鏡像構建非常重要。在更老的版本的 docker 中需要特別注意,現(xiàn)在通過下面的這些特性我們可以方便的對鏡像層數(shù)進行限制:

  • 只有 ONLY, COPY,ADD這三個命令增加層數(shù),其他的命令只會創(chuàng)建一些臨時的鏡像,并不會增加構建的鏡像的層數(shù)
  • 使用 multi-stage builds只拷貝真正需要的artifaces(制品) 到最終的鏡像。這可以使你在構建過程中使用工具和打印調試信息,但不會增加最終的鏡像大小。

對多行參數(shù)排序

只要有可能, 將參數(shù)按照字母進行排序是一種非常好的實踐,這種方式可以避免重復安裝包(特指apt-get命令),也可以是開發(fā)人員更加容易的閱讀和審查。

下面是 buildpack-deps鏡像的例子 images:

  1. RUN apt-get update && apt-get install -y 
  2.  
  3. bzr 
  4.  
  5. cvs 
  6.  
  7. git 
  8.  
  9. mercurial 
  10.  
  11. subversion 

借助構建緩存

在構建鏡像的時候,docker 會按照dockerfile中的指令順序來一次執(zhí)行。每一個指令被執(zhí)行的時候 docker 都會去緩存中檢查是否有已經(jīng)存在的鏡像可以復用,而不是去創(chuàng)建一個新的鏡像復制。

如果不想使用構建緩存,可以使用docker build參數(shù)選項—no-cache=true來禁用構建緩存。在使用鏡像緩存時,要弄清楚緩存合適生效,何時失效。構建緩存最基本規(guī)則如下:

  • 如果引用的父鏡像在構建緩存中,下一個命令將會和所有從該父進程派生的子鏡像做比較,如果有子鏡像使用相同的命令,那么緩存命中,否則緩存失效。
  • 在大部分情況下,通過比較Dockerfile中的指令和子鏡像已經(jīng)足夠了。但是有些指令需要進一步的檢查。
  • 對于ADD和COPY指令, 文件的內容會被檢查,并且會計算每一個文件的校驗碼。但是文件最近一次的修改和訪問時間不在校驗碼的考慮范圍內。在構建過程中,docker 會比對已經(jīng)存在的鏡像,只要有文件內容和元數(shù)據(jù)發(fā)生變動,那么緩存就會失效。
  • 除了ADD和COPY指令,鏡像緩存不會檢查容器中文件來判斷是否命中緩存。例如,在處理RUN apt-get -y update命令時,不會檢查容器中的更新文件以確定是否命中緩存,這種情況下只會檢查命令字符串是否相同。 

 

責任編輯:張燕妮 來源: 高效運維
相關推薦

2021-03-01 19:24:13

Kubernetes備份容器

2021-05-08 16:11:08

Java開發(fā)代碼

2023-01-13 16:34:08

2023-04-10 11:25:29

工程交流DX

2020-09-29 07:19:54

InnoDBMySQL存儲引擎

2019-12-16 12:11:53

Docker容器Kubernetes

2020-02-03 12:25:35

Python工具服務器

2021-05-10 16:41:19

機器學習人工智能IT

2021-02-21 09:33:19

Docker容器安全 應用程序

2023-09-20 09:00:00

2022-04-19 10:17:20

云遷移云原生可觀測

2023-03-15 15:54:36

Java代碼

2021-06-25 14:50:21

DevSecOps安全 DevOps

2020-10-27 06:56:53

IoT產(chǎn)品實踐

2022-10-10 14:53:00

云安全云計算云平臺

2022-02-28 15:56:14

零信任企業(yè)

2020-11-24 10:32:16

CIO首席信息官工具

2020-12-14 09:00:00

云計算公有云工具

2017-06-06 11:59:26

Docker工具容器

2022-05-13 08:17:05

HTTPRESTful架構
點贊
收藏

51CTO技術棧公眾號

国产亚洲激情在线| 国产综合久久久| 精品国产中文字幕第一页 | 国产欧美一区二区精品久导航 | 亚洲一区二区自拍偷拍| 免费看精品久久片| 中文字幕黄色大片| 国产精品自在欧美一区| 99视频精品免费| 亚洲美女视频一区| 中文产幕区在线观看| 欧美激情一区二区三区在线| 免费 成 人 黄 色| 国产视频亚洲色图| 91污色多多| 色菇凉天天综合网| 亚洲精品传媒| 亚洲欧美成人精品| 国产精品主播在线观看| 国产精品视频中文字幕91| 欧美日韩中文另类| 99亚洲伊人久久精品影院| 欧美色爱综合网| 麻豆传媒免费在线观看| 亚洲成色www8888| 美女的胸无遮挡在线观看| 超碰公开在线| 欧美日韩国产精品一区| 免费a级在线播放| 精品久久久网站| 日韩久久一区二区三区| 久久久亚洲精选| 久久免费大视频| 视频一区三区| 日韩激情一二三区| 日本视频久久久| 日日夜夜精品视频天天综合网| 99视频资源网| 中文字幕精品久久| 日韩在线一区二区三区| 国产三级在线观看| 国产91免费观看| 国产欧美在线观看一区| 国精产品一区一区三区四川| 日本精品二区| 欧美亚洲动漫制服丝袜| 91精品国偷自产在线电影| metart日本精品嫩模| 欧美激情精品久久久久久大尺度| 午夜亚洲福利| 在线观看老湿视频福利| 久久精品国产综合| 麻豆精品久久久| 国产福利第一视频在线播放| 57pao成人永久免费视频| 日韩欧美色综合| 欧美少妇精品| 国产乱码精品一区二区三区中文| 久久久久久久久一| **欧美日韩在线观看| 亚洲精品不卡| 99在线欧洲视频| 亚洲你懂的在线视频| 中文在线a√在线8| 茄子视频成人在线| 亚洲婷婷国产精品电影人久久| 亚洲国产精品综合小说图片区| 色偷偷色偷偷色偷偷在线视频| 国产欧美日韩视频一区二区三区| 夜色激情一区二区| 国产精品毛片视频| 亚洲人成免费| 白白色在线发布| 久久婷婷国产麻豆91天堂| 国产精品一区二区你懂的| 天堂中文最新版在线中文| 久久综合99| 亚洲77777| 97国产精品久久| 国产精品久久二区二区| 精品国产亚洲一区二区三区大结局 | 小泽玛利亚av在线| 看一级黄色录像| 亚洲精品网址在线观看| 成人av资源网站| 亚洲大片精品免费| 国产福利免费在线观看| 日韩电影免费观看高清完整| 中文字幕在线看视频国产欧美| 国产主播一区二区三区| 欧洲免费在线视频| 欧美激情精品久久久久久蜜臀| 成人一级片网址| 男女在线观看视频| 精品伦精品一区二区三区视频| 色老汉一区二区三区| 欧美电影一区| 一区二区三区不卡在线视频| 国产精品视频免费在线| 亚洲综合色视频| 色综合久久网| 午夜在线观看91| 成人免费在线一区二区三区| 一本大道久久a久久综合| 97精品国产| 国产在线观看精品一区| 国产精品视频一区二区三区经| 色婷婷综合久久久中文字幕| 欧美视频亚洲视频| 永久免费网站在线| 亚欧精品在线| 亚洲精品一区在线观看香蕉| 国产精品一区二区你懂的| 欧美在线se| 天堂色在线视频| 成人在线精品视频| 欧美日本韩国一区二区三区视频| 久久久噜噜噜| 成人免费影院| 日日碰狠狠躁久久躁婷婷| 情事1991在线| 色婷婷久久久综合中文字幕| 日本亚洲天堂网| 日韩电影免费观| 成人av小说网| 999精品视频一区二区三区| 日韩一区二区三区在线| 成人永久免费视频| 五月天亚洲一区| 国产在线色视频| 中文字幕av日韩精品| 久久人人爽人人| 欧美在线一二三| 国产精品亚洲第一区在线暖暖韩国| 伊色综合久久之综合久久| 石原莉奈一区二区三区高清在线| 国产精品手机视频| 亚洲午夜性刺激影院| 亚洲人被黑人高潮完整版| 国内精品久久久久久久97牛牛| 久久久成人av毛片免费观看| ·天天天天操| 日本视频一区在线观看| 久久99久久99精品中文字幕| 色爱区综合激月婷婷| 国产69精品久久99不卡| 成人羞羞网站入口免费| 日本在线影院| 美女的尿口免费视频| 日韩精品欧美专区| 欧美在线xxx| 欧美成人激情免费网| 国产精品久久久一本精品| 久久蜜桃精品| 欧美男人操女人视频| 草草在线视频| 一二三在线视频社区| 国产精品无码免费专区午夜| 99在线观看视频网站| 九九精品视频在线观看| 欧美精品日韩精品| 一区二区三区产品免费精品久久75| 国精产品一区一区三区mba视频| 波多野结衣在线播放一区| 国产69精品久久| 日本综合在线| 一级片免费视频| 每日在线观看av| 日本一区免费看| 91精品在线一区| 欧美日韩成人在线观看| 亚洲国产精品va| 欧美日韩国内自拍| 国产精品免费久久久久| 国产自产视频一区二区三区| 亚洲高清资源| 精品无人区麻豆乱码久久久| 黄页免费欧美| av免费不卡国产观看| 四虎电影院在线观看| wwwcom羞羞网站| 蜜臀av.com| 日韩国产欧美精品| 精品国产一区二区三区日日嗨 | 中文字幕免费一区二区三区| 亚洲尤物av| 精品视频一区二区三区| 日本少妇一区| 狠狠操一区二区三区| 免费网站成人| 视频二区在线| 在线免费激情视频| 亚洲77777| 手机视频在线观看| 成人小视频在线看| 欧美s码亚洲码精品m码| 国产一区 在线播放| www.日本在线播放| 丁香色欲久久久久久综合网| 欧美 日韩 国产 在线观看|