dockerfile cd目录_使用Werf和现有的Dockerfiles改善你的CI/CD体验
構建和推送鏡像
部署應用程序到Kubernetes中
根據策略清理未使用鏡像
遵循構建典型小型Web應用程序的標準工作流程:a)安裝系統范圍的應用程序依賴項,b)安裝特定于應用程序的庫,c)構建資產(assets),d)最重要的部分,快速高效地更新鏡像中的代碼。
構建器在發生更改時應通過提交修補應用于修改的文件來創建新的鏡像層。
如果某些文件已被修改,則必須重建依賴階段。
完整的應用程序管理周期,包括刪除鏡像
在單個配置中構建多個鏡像的能力
改進的部署Helm兼容圖表的流程
FROM ubuntu:18.04
RUN echo Building ...
然后我們定義 werf.yaml它將引用上面的 Dockerfile:configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile
然后我們就可以執行werf build了:順便說下,你也可以這樣定義werf.yaml以使用多個Dockerfile同時構建鏡像:configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend
Werf配置中同樣支持傳遞額外的構建參數,例如--build-arg和--add-host等。以下是完整Dockerfile鏡像配置的鏈接[4]。它是如何運作的?在構建鏡像期間,本地層的通用Docker緩存處于活動狀態。重要的是,werf還將Dockerfile配置集成到其基礎架構中。這意味著什么?所有使用Dockerfile構建的鏡像都包含一個特定的名為dockerfile的階段。(可以在werf文檔中[5]了解“階段”相關內容)
在dockerfile階段,werf會根據Dockerfile配置中的內容計算出簽名。Dockerfile配置的改變將會引起dockerfile階段的簽名改變。在這種情況下,werf使用新的Dockerfile配置啟動此階段的重建。如果簽名保持不變,則werf使用緩存的鏡像。
你可是使用werf publish或werf build-and-publish發布構建出來的鏡像并將其部署到Kubernetes中。已推送到Docker倉庫的鏡像會通過常規werf機制進行清理。這意味著舊鏡像(超過N天)和與不存在的Git分支相關聯的鏡像將被自動刪除,且可以應用其他策略。
發布過程[6];
與Kubernetes的部署過程集成[7];
清理過程[8]。
.git目錄在最終鏡像中的存在違反了12要素應用理念。最終鏡像必須與單個提交鏈接;不應允許其在任意提交上執行git checkout。
.git目錄增大了鏡像的體積(Git倉庫可能會因為曾經添加刪除過大文件而增大)。相反地,每個特定提交對工作樹大小將不依賴于Git操作的歷史。此外,.git目錄從最終鏡像中添加以及后續的刪除,文件夾將不再起作用,因為無論如何都將生成新的層次(這正是Docker的工作原理)。
即使正在處理相同的提交(源自不同的工作樹),Docker也可能啟動不必要的重建。例如,GitLab在/home/gitlab-runner/builds/HASH/[0-N]/yourproject啟用并行構建時創建單獨的克隆文件夾。不必要的重建是由.git同一存儲庫的各種克隆版本中的文件夾的差異引起的(即使我們構建完全相同的提交)。
https://github.com/flant/werf
https://werf.io/documentation/reference/build_process.html#stapel-image-and-artifact
https://github.com/flant/werf#complete-features-list
https://werf.io/documentation/configuration/dockerfile_image.html
https://werf.io/documentation/reference/stages_and_images.html#stages
https://werf.io/documentation/reference/publish_process.html
https://werf.io/documentation/reference/deploy_process/deploy_into_kubernetes.html#integration-with-built-images
https://werf.io/documentation/reference/cleaning_process.html
https://werf.io/documentation/reference/stages_and_images.html
總結
以上是生活随笔為你收集整理的dockerfile cd目录_使用Werf和现有的Dockerfiles改善你的CI/CD体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql忽略数据类型_MYSQL 常用
- 下一篇: java 命名内部类_如何把java S