精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

對構建系統進行容器化的指南

系統 Linux
在使用容器搭建了一些構建系統后,我覺得有一個不錯的可復用的方法值得分享。雖然這些構建系統被用于編譯機器學習算法和為嵌入式硬件生成可加載的軟件鏡像,但這個方法足夠抽象,可用于任何基于容器的構建系統。

[[326817]]

搭建一個通過容器分發應用的可復用系統可能很復雜,但這兒有個好方法。

一個用于將源代碼轉換成可運行的應用的構建系統是由工具和流程共同組成。在轉換過程中還涉及到代碼的受眾從軟件開發者轉變為最終用戶,無論最終用戶是運維的同事還是部署的同事。

在使用容器搭建了一些構建系統后,我覺得有一個不錯的可復用的方法值得分享。雖然這些構建系統被用于編譯機器學習算法和為嵌入式硬件生成可加載的軟件鏡像,但這個方法足夠抽象,可用于任何基于容器的構建系統。

這個方法是以一種易于使用和維護的方式搭建或組織構建系統,但并不涉及處理特定編譯器或工具容器化的技巧。它適用于軟件開發人員構建軟件,并將可維護鏡像交給其他技術人員(無論是系統管理員、運維工程師或者其他一些頭銜)的常見情況。該構建系統被從終端用戶中抽象出來,這樣他們就可以專注于軟件。

為什么要容器化構建系統?

搭建基于容器的可復用構建系統可以為軟件團隊帶來諸多好處:

  • 專注:我希望專注于應用的開發。當我調用一個工具進行“構建”時,我希望這個工具集能生成一個隨時可用的二進制文件。我不想浪費時間在構建系統的查錯上。實際上,我寧愿不了解,或者說不關心構建系統。
  • 一致的構建行為:無論在哪種使用情況下,我都想確保整個團隊使用相同版本的工具集并在構建時得到相同的結果。否則,我就得不斷地處理“我這咋就是好的”的麻煩。在團隊項目中,使用相同版本的工具集并對給定的輸入源文件集產生一致的輸出是非常重要。
  • 易于部署和升級:即使向每個人都提供一套詳細說明來安裝一個項目的工具集,也可能會有人翻車。問題也可能是由于每個人對自己的 Linux 環境的個性化修改導致的。在團隊中使用不同的 Linux 發行版(或者其他操作系統),情況可能還會變得更復雜。當需要將工具集升級到下一版本時,問題很快就會變得更糟糕。使用容器和本指南將使得新版本升級非常簡單。

對我在項目中使用的構建系統進行容器化的這些經驗顯然很有價值,因為它可以緩解上述問題。我傾向于使用 Docker 作為容器工具,雖然在相對特殊的環境中安裝和網絡配置仍可能出現問題,尤其是當你在一個使用復雜代理的企業環境中工作時。但至少現在我需要解決的構建系統問題已經很少了。

漫步容器化的構建系統

我創建了一個教程存儲庫,隨后你可以克隆并檢查它,或者按照本文內容進行操作。我將逐個介紹存儲庫中的文件。這個構建系統非常簡單(它運行 gcc),從而可以讓你專注于這個構建系統結構上。

構建系統需求

我認為構建系統中有兩個關鍵點:

  • 標準化構建調用:我希望能夠指定一些形如 /path/to/workdir 的工作目錄來構建代碼。我希望以如下形式調用構建:

    1. ./build.sh /path/to/workdir

    為了使得示例的結構足夠簡單(以便說明),我將假定輸出也在 /path/to/workdir 路徑下的某處生成。(否則,將增加容器中顯示的卷的數量,雖然這并不困難,但解釋起來比較麻煩。)

  • 通過 shell 自定義構建調用:有時,工具集會以出乎意料的方式被調用。除了標準的工具集調用 build.sh 之外,如果需要還可以為 build.sh 添加一些選項。但我一直希望能夠有一個可以直接調用工具集命令的 shell。在這個簡單的示例中,有時我想嘗試不同的 gcc 優化選項并查看效果。為此,我希望調用:

    1. ./shell.sh /path/to/workdir

    這將讓我得到一個容器內部的 Bash shell,并且可以調用工具集和訪問我的工作目錄(workdir),從而我可以根據需要嘗試使用這個工具集。

構建系統的架構

為了滿足上述基本需求,這是我的構架系統架構:

 

Container build system architecture

在底部的 workdir 代表軟件開發者用于構建的任意軟件源碼。通常,這個 workdir 是一個源代碼的存儲庫。在構建之前,最終用戶可以通過任何方式來操縱這個存儲庫。例如,如果他們使用 git 作為版本控制工具的話,可以使用 git checkout 切換到他們正在工作的功能分支上并添加或修改文件。這樣可以使得構建系統獨立于 workdir 之外。

頂部的三個模塊共同代表了容器化的構建系統。最左邊的黃色模塊代表最終用戶與構建系統交互的腳本(build.shshell.sh)。

在中間的紅色模塊是 Dockerfile 和相關的腳本 build_docker_image.sh。開發運營者(在這個例子中指我)通常將執行這個腳本并生成容器鏡像(事實上我多次執行它直到一切正常為止,但這是另一回事)。然后我將鏡像分發給最終用戶,例如通過容器信任注冊庫container trusted registry進行分發。最終用戶將需要這個鏡像。另外,他們將克隆構建系統的存儲庫(即一個與教程存儲庫等效的存儲庫)。

當最終用戶調用 build.sh 或者 shell.sh 時,容器內將執行右邊的 run_build.sh 腳本。接下來我將詳細解釋這些腳本。這里的關鍵是最終用戶不需要為了使用而去了解任何關于紅色或者藍色模塊或者容器工作原理的知識。

構建系統細節

把教程存儲庫的文件結構映射到這個系統結構上。我曾將這個原型結構用于相對復雜構建系統,因此它的簡單并不會造成任何限制。下面我列出存儲庫中相關文件的樹結構。文件夾 dockerize-tutorial 能用構建系統的其他任何名稱代替。在這個文件夾下,我用 workdir 的路徑作參數調用 build.shshell.sh

  1. dockerize-tutorial/
  2. ├── build.sh
  3. ├── shell.sh
  4. └── swbuilder
  5.     ├── build_docker_image.sh
  6.     ├── install_swbuilder.dockerfile
  7.     └── scripts
  8.         └── run_build.sh

請注意,我上面特意沒列出 example_workdir,但你能在教程存儲庫中找到它。實際的源碼通常存放在單獨的存儲庫中,而不是構建工具庫中的一部分;本教程為了不必處理兩個存儲庫,所以我將它包含在這個存儲庫中。

如果你只對概念感興趣,本教程并非必須的,因為我將解釋所有文件。但是如果你繼續本教程(并且已經安裝 Docker),首先使用以下命令來構建容器鏡像 swbuilder:v1

  1. cd dockerize-tutorial/swbuilder/
  2. ./build_docker_image.sh
  3. docker image ls  # resulting image will be swbuilder:v1

然后調用 build.sh

  1. cd dockerize-tutorial
  2. ./build.sh ~/repos/dockerize-tutorial/example_workdir

下面是 build.sh 的代碼。這個腳本從容器鏡像 swbuilder:v1 實例化一個容器。而這個容器實例映射了兩個卷:一個將文件夾 example_workdir 掛載到容器內部路徑 /workdir 上,第二個則將容器外的文件夾 dockerize-tutorial/swbuilder/scripts 掛載到容器內部路徑 /scripts 上。

  1. docker container run                              \
  2.     --volume $(pwd)/swbuilder/scripts:/scripts    \
  3.     --volume $1:/workdir                          \
  4.     --user $(id -u ${USER}):$(id -g ${USER})      \
  5.     --rm -it --name build_swbuilder swbuilder:v1  \
  6.     build

另外,build.sh 還會用你的用戶名(以及組,本教程假設兩者一致)去運行容器,以便在訪問構建輸出時不出現文件權限問題。

請注意,shell.shbuild.sh 大體上是一致的,除了兩點不同:build.sh 會創建一個名為 build_swbuilder 的容器,而 shell.sh 則會創建一個名為 shell_swbuilder 的容器。這樣一來,當其中一個腳本運行時另一個腳本被調用也不會產生沖突。

兩個腳本之間的另一處關鍵不同則在于最后一個參數:build.sh 傳入參數 buildshell.sh 則傳入 shell。如果你看了用于構建容器鏡像的 Dockerfile,就會發現最后一行包含了下面的 ENTRYPOINT 語句。這意味著上面的 docker container run 調用將使用 buildshell 作為唯一的輸入參數來執行 run_build.sh 腳本。

  1. # run bash script and process the input command
  2. ENTRYPOINT [ "/bin/bash", "/scripts/run_build.sh"]

run_build.sh 使用這個輸入參數來選擇啟動 Bash shell 還是調用 gcc 來構建 helloworld.c 項目。一個真正的構建系統通常會使用 Makefile 而非直接運行 gcc

  1. cd /workdir
  2.  
  3. if [ $1 = "shell" ]; then    
  4.     echo "Starting Bash Shell"
  5.     /bin/bash
  6. elif [ $1 = "build" ]; then
  7.     echo "Performing SW Build"
  8.     gcc helloworld.c -o helloworld -Wall
  9. fi

在使用時,如果你需要傳入多個參數,當然也是可以的。我處理過的構建系統,構建通常是對給定的項目調用 make。如果一個構建系統有非常復雜的構建調用,則你可以讓 run_build.sh 調用 workdir 下最終用戶編寫的特定腳本。

關于 scripts 文件夾的說明

你可能想知道為什么 scripts 文件夾位于目錄樹深處而不是位于存儲庫的頂層。兩種方法都是可行的,但我不想鼓勵最終用戶到處亂翻并修改里面的腳本。將它放到更深的地方是一個讓他們更難亂翻的方法。另外,我也可以添加一個 .dockerignore 文件去忽略 scripts 文件夾,因為它不是容器必需的部分。但因為它很小,所以我沒有這樣做。

簡單而靈活

盡管這一方法很簡單,但我在幾個相當不同的構建系統中使用過,發現它相當靈活。相對穩定的部分(例如,一年僅修改數次的給定工具集)被固定在容器鏡像內。較為靈活的部分則以腳本的形式放在鏡像外。這使我能夠通過修改腳本并將更改推送到構建系統存儲庫中,輕松修改調用工具集的方式。用戶所需要做的是將更改拉到本地的構建系統存儲庫中,這通常是非常快的(與更新 Docker 鏡像不同)。這種結構使其能夠擁有盡可能多的卷和腳本,同時使最終用戶擺脫復雜性。

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-09-19 10:00:34

Linux虛擬

2021-03-05 00:06:12

Docker容器內存

2022-04-26 05:55:13

容器K8s管理debug問題

2010-06-09 16:27:30

PHP+MySQL

2011-05-16 15:36:00

軟件測試

2022-09-07 09:19:49

Docker健康檢查

2013-07-08 17:41:53

Linux 系統U盤格式化

2010-02-03 15:09:13

Python 構建工具

2011-04-13 08:49:33

DataSet強類型化

2019-04-11 17:57:22

容器互聯網公司開發

2023-10-09 09:27:33

Docker容器

2021-01-05 08:39:51

容器前端流水線

2025-08-25 06:40:00

GoOpenAPIRESTful

2020-07-07 13:00:00

Linux壓力測試

2021-05-13 09:07:03

容器云環境鏡像

2017-03-28 15:30:51

服務器虛擬化內存

2017-04-17 14:40:11

虛擬化服務器內存

2022-07-31 23:56:23

Magecart網絡攻擊

2009-10-22 09:32:51

ghostlinux系統備份

2021-07-09 05:25:48

CIO遺留系統現代化用戶體驗
點贊
收藏

51CTO技術棧公眾號

日韩成人高清| 午夜精品久久久久久久第一页按摩| 红杏成人性视频免费看| 亚洲妇熟xx妇色黄| 精品视频第一区| 免费看日批视频| 精品日韩欧美一区| 欧美色网一区二区| 黄色一级片av| 天天干天天色天天| 久久久久久9| 日韩亚洲一区二区| 中文字幕99页| √8天堂资源地址中文在线| 成人丝袜高跟foot| 青青久久aⅴ北条麻妃| 日本人亚洲人jjzzjjz| 青青青国产精品| 亚洲午夜久久久久久久久电影院| 精品久久久久久中文字幕动漫| www.色国产| 国产精品久久占久久| 日韩精品一区二区三区在线| 欧美牲交a欧美牲交| 国产欧美视频一区二区三区| 欧美大片在线观看| 欧美成人高潮一二区在线看| 可以免费看污视频的网站在线| 麻豆精品久久精品色综合| 久久99久久99精品免观看粉嫩| 强迫凌虐淫辱の牝奴在线观看| 日本美女久久| 亚洲一卡二卡三卡四卡 | 日韩精品久久久毛片一区二区| 一级黄色录像大片| 国内自拍一区| 中文字幕一区日韩电影| 成人区人妻精品一区二| 激情久久一区二区| 精品久久久久久国产91| 这里只有精品66| 四虎成人免费在线| 国产乱人伦精品一区二区在线观看| 欧美日韩不卡合集视频| aaaaa一级片| 欧美日韩黄色| 欧美午夜精品一区二区三区| 噜噜噜久久亚洲精品国产品麻豆| av中文字幕在线| 99久久精品国产观看| 亚洲在线视频福利| 在线播放精品视频| 久久国产一二区| 久久久爽爽爽美女图片| 我要看黄色一级片| 日韩精品欧美激情一区二区| 日韩精品福利在线| 午夜影院福利社| 久久亚洲精精品中文字幕| 欧美在线看片a免费观看| 久久久999免费视频| 制服丝袜中文字幕在线| 国产精品伦理一区二区| 欧美亚州在线观看| 青青草视频在线观看| 国产一区二区成人久久免费影院 | 精品国产国产综合精品| 欧美日韩色图| 亚洲视频免费一区| 亚洲国产天堂av| 一区二区三区日本久久久| 日韩女优av电影| 香蕉视频在线观看黄| 国产精品视频首页| 91精品国产丝袜白色高跟鞋| 好男人www社区| 欧洲av不卡| 日本高清不卡aⅴ免费网站| 青青草原av在线播放| 欧美三级网站| 色综合久久久久综合99| 欧美日韩亚洲第一| 日本h片久久| 欧美另类videos死尸| 中文字幕在线观看日| 久久免费影院| 欧美精品乱人伦久久久久久| 亚洲涩涩在线观看| 免费一级欧美在线大片 | 精品人妻一区二区三区含羞草| 国产麻豆日韩欧美久久| av成人免费观看| 黑人精品一区二区三区| 91视频一区二区| 日韩av不卡播放| 亚洲图片88| 欧美激情一区二区三区全黄| 一区不卡字幕| 日韩另类在线| 欧美日韩国产中文字幕 | 毛片免费不卡| 一区二区三区成人| 日韩亚洲欧美视频| 免费成人直播| 欧美日韩国产一级片| 99热这里只有精品在线播放| 亚洲精品无播放器在线播放| 欧美成人r级一区二区三区| 亚洲av成人片无码| 国产99精品一区| 最近2019中文字幕在线高清| www.毛片com| 99亚洲精品| 国产精品一区二区三区在线播放| 国产成人精品一区二区无码呦| 不卡av免费在线观看| 欧美午夜欧美| 69xxx在线| 色94色欧美sute亚洲线路一久 | 精品久久久久一区二区国产| 久久亚洲AV成人无码国产野外 | 国产精品久久国产| 久久久久久久| 欧美大肚乱孕交hd孕妇| 中文人妻一区二区三区| 99九九热只有国产精品| 91精品国产91久久久久久吃药 | 男人天堂欧美日韩| 成人网欧美在线视频| 日本大臀精品| 亚洲夂夂婷婷色拍ww47| 精品99在线视频| 2020最新国产精品| 中文字幕在线看视频国产欧美| √天堂中文官网8在线| 久久国产66| 91国产丝袜在线放| 岛国最新视频免费在线观看| 亚洲高清视频中文字幕| 久久久久久综合网| 九九在线精品| 97国产在线观看| 一二三区中文字幕| 国产亚洲一本大道中文在线| 99在线精品免费视频| 欧美一级做一级爱a做片性| 日韩国产精品一区| 久久综合色综合| 精品亚洲成a人| 日韩电影免费观看高清完整| 欧美gv在线观看| 欧美成人一区二区三区片免费| 国产无遮挡在线观看| 亚洲电影在线| 超碰在线观看97| 韩国av网站在线| 欧美色视频在线| 91视频在线网站| 国产欧美精品久久| 国产专区一区二区| 丁香花在线电影| 亚洲成人三级在线| 久久久久久久久久综合| 国产麻豆9l精品三级站| 亚洲激情一区二区| 日韩一区精品| 日韩精品免费看| 香蕉视频一区二区| 99久久综合狠狠综合久久| 亚洲熟妇无码av在线播放| 欧美国产中文高清| 欧美成人免费网| 97人妻精品一区二区三区软件 | 国精品人伦一区二区三区蜜桃| 日本最新不卡在线| 亚洲va韩国va欧美va精四季| 国产电影一区二区三区爱妃记| 一道本无吗dⅴd在线播放一区| 欧美日韩一级黄色片| 国产日本亚洲高清| 成年人在线观看视频免费| 精品久久电影| 91精品久久久久久久久久久久久久 | 国产一区二区三区免费看| 国产又爽又黄ai换脸| 二区三区精品| 久久久噜噜噜久久久| 噜噜噜久久,亚洲精品国产品| 午夜私人影院久久久久| 欲求不满的岳中文字幕| 久久国产精品久久久久久电车| 奇米影视首页 狠狠色丁香婷婷久久综合 | 国产一区亚洲二区三区| 九九热播视频在线精品6 | 99热99re6国产在线播放| 亚洲国产精品小视频| 亚洲GV成人无码久久精品| 一本色道久久精品| 欧洲一区二区在线观看| 天堂精品在线视频| 国产精品第七十二页| 亚洲妇熟xxxx妇色黄| 亚洲欧美成人精品| 99久久久久成人国产免费| 欧美日韩亚洲一区二| 国产精品夜夜夜爽阿娇| 91视频com| 中文字幕第六页| 日韩福利视频网| 日本少妇高潮喷水视频| 亚洲成人精选| 日韩精品一区二区三区丰满| 国产一区调教| 成人免费午夜电影| 日韩成人亚洲| 欧美一级黄色网| 精品精品导航| 久久视频国产精品免费视频在线| 精品久久久久一区二区三区| 精品国产亚洲在线| 国产美女明星三级做爰| 日本精品一级二级| 日本一二三区视频| 亚洲黄网站在线观看| 一级黄色毛毛片| 久久精品亚洲精品国产欧美kt∨| 麻豆tv在线观看| 黄一区二区三区| 亚洲精品性视频| 日韩精品一卡二卡三卡四卡无卡| 中文字幕日韩精品无码内射| 五月开心六月丁香综合色啪| 色综合视频二区偷拍在线| 亚洲精品动态| 精品网站在线看| 国产一区在线电影| 国产精品一区二区不卡视频| 年轻的保姆91精品| 91九色对白| 日本综合精品一区| 99在线高清视频在线播放| 精品午夜视频| 91影视免费在线观看| 天天综合91| 成人黄色av免费在线观看| 99精品在免费线偷拍| 国产成人免费av| 香蕉成人影院| 国产精品国产自产拍高清av水多| 成人短视频app| 欧美亚洲在线视频| 欧洲av不卡| 国产精品免费一区二区三区都可以 | 美女主播精品视频一二三四| 国产精品亚洲一区| 欧美大胆视频| 欧美12av| 欧美日韩一区二区综合| 神马影院午夜我不卡| 精品国产乱码久久久久久1区2匹| 秋霞在线观看一区二区三区| 国产一区网站| 一区二区精品国产| 亚洲精品888| 日韩 欧美 视频| 国产精品久久国产愉拍| 日韩a在线播放| 久久国产欧美日韩精品| 亚洲综合20p| 大白屁股一区二区视频| 国产精品久久久久久久无码| 久久久久久久久久久电影| 午夜在线观看一区| 国产精品国产三级国产aⅴ入口 | 色综合欧美在线| 亚洲中文字幕在线一区| 日韩精品一区二区三区中文不卡| 无码国产精品一区二区免费16| 日韩精品中文字幕在线| 1pondo在线播放免费| 久久综合免费视频| 色是在线视频| 成人亲热视频网站| 精品亚洲自拍| 亚洲一二三区精品| 好看的av在线不卡观看| 国产女女做受ⅹxx高潮| 精品一区二区三区影院在线午夜| 无码国产精品一区二区高潮| 91丨porny丨国产入口| 女同久久另类69精品国产| 夜夜亚洲天天久久| 日韩综合在线观看| 91精品国产综合久久福利 | 久久综合九色综合97婷婷女人| 久久久精品成人| 亚洲一区中文在线| 涩涩视频在线观看| 精品国产伦理网| 1024免费在线视频| 午夜免费久久久久| 日韩久久99| 欧美精品欧美精品| 欧美精品首页| www.亚洲高清| 99久久777色| 91成人福利视频| 欧美影片第一页| 天堂影院在线| 欧美精品性视频| 成人全视频在线观看在线播放高清 | 久久影院免费观看| 桃花岛tv亚洲品质| 国产精品久久九九| 婷婷亚洲最大| 丁香婷婷激情网| 91在线小视频| 欧美黑人一级片| 欧美日韩大陆一区二区| 欧美拍拍视频| 午夜精品一区二区三区在线视频| 欧美激情三级| 做爰高潮hd色即是空| 久久婷婷丁香| 久久午夜夜伦鲁鲁片| 亚洲欧美日韩综合aⅴ视频| 中文字幕av片| 亚洲欧美成人一区二区在线电影| av中文在线资源| 97视频资源在线观看| 久久中文亚洲字幕| 男人的天堂日韩| 99riav久久精品riav| 国产真实的和子乱拍在线观看| 欧美精品乱码久久久久久| 东凛在线观看| 国产精品久久久久久影视| 视频一区在线观看| 国产福利视频在线播放| a级精品国产片在线观看| 精品亚洲永久免费| 欧美va天堂va视频va在线| 欧美草逼视频| 亚洲最大福利网站| 亚洲综合色站| 潘金莲一级淫片aaaaaaa| 一区二区日韩av| www.成人精品| 久久久久亚洲精品国产| julia中文字幕一区二区99在线| 四虎精品欧美一区二区免费| 国产乱码精品一区二区三| 精品国产大片大片大片| 欧美老女人第四色| 成人免费网址| 粉嫩av四季av绯色av第一区| 在线不卡视频| www.自拍偷拍| 在线观看91视频| 日本激情在线观看| 亚洲a在线观看| 激情综合在线| 给我看免费高清在线观看| 色综合久久88色综合天天免费| 国产专区在线| 成人av在线网址| 国模大胆一区二区三区| 亚洲第一页av| 欧美日韩免费观看一区三区| 超碰个人在线| 精品国产综合| 日韩**一区毛片| 亚洲熟女www一区二区三区| 亚洲电影免费观看高清完整版在线| 国产极品在线观看| 日韩高清三级| 国产精品99久久久久久有的能看 | 91福利视频久久久久| 人人干在线视频| 国产高清在线精品一区二区三区| 99伊人成综合| 国产精品1区2区3区4区| 日韩一区二区在线免费观看| а√天堂8资源中文在线| 日韩国产欧美一区| 国产精品一二二区| www.久久精品视频| 久久夜色精品亚洲噜噜国产mv| 鲁大师精品99久久久| 91人人澡人人爽人人精品| 亚洲六月丁香色婷婷综合久久 | 久久影院午夜论| 国产精品久久久久久久久久久久久久久久 | 日韩电影免费一区| 久久国产波多野结衣| 精品亚洲va在线va天堂资源站| 日韩国产91| 不卡影院一区二区| 一区二区三区日韩欧美精品| 黄色片在线看|