中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何寫Dockerfile

發布時間:2021-12-14 10:12:52 來源:億速云 閱讀:134 作者:iii 欄目:云計算

這篇文章主要介紹“如何寫Dockerfile”,在日常操作中,相信很多人在如何寫Dockerfile問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何寫Dockerfile”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

應用最好不要跑在特權用戶( root )底下

Docker 默認所有的應用都會跑在容器的 root user 底下,但是這樣會造成一些潛在的安全隱患。在 production 環境跑的 Container 最好是通過 USER 命令跑在非特權用戶底下。

隱患在哪,求補充。

安全隱患是說如果這個 container 被 compromise 了,那么如果是 root 在跑這個 container 更可能使系統出現問題。但是用 root user 本身應該是沒問題的。

是指的如果用 root 跑 container 會有問題嗎?那為什么推薦用 USER 命令來改變 docker 的非 root ?

就是 Docker 的隔離效力有限,如果一個 container 里的應用是惡意的,而且是 root ,那如果它改了系統配置( root 權限,比如 unload 某個系統 module ,更改了某個系統文件),也會影響其他的 container ( share 一個 kernel )。

避免使用 apt-get upgrade

Upgrade 命令是用來升級當前基礎鏡像的。非特權用戶無法 Upgrade 一些核心的應用。而且 Upgrade 命令會打亂已經緩存的鏡像,使得編譯時間加長。在一般情況下,選用正確的基礎鏡像是不需要升級的,如果真的需要,最好聯系基本鏡像的維護方,這樣所有使用者都能從中獲益。如果只是需要更新某個程序 foo ,那么使用 apt-get install – y foo 就能到達這個目的。

盡量合并命令

Dockerfile 中的每一個命令都會創建一個新的 layer ,而一個容器能夠擁有的最多 layer 數是有限制的。所以盡量將邏輯上連貫的命令合并可以減少 layer 的層數,合并命令的方法可以包括將多個可以合并的命令( EXPOSE , ENV , VOLUME , COPY )合并。

Dockerfile 中的每一個命令都會創建一個新的 layer ,而一個容器能夠擁有的最多 layer 數是有限制的。所以盡量將邏輯上連貫的命令合并可以減少 layer 的層數,這也可以加快編譯速度?

將多個可以合并的命令( EXPOSE , ENV , VOLUME , COPY )合并,比如:

使用“&&”來連接 RUN 命令,比如:

不過過度合并命令可能會影響 Dockerfile 的可讀性,所以需要在優化代碼和可讀性之間做出權衡。

合理安排命令的順序

命令的順序會影響編譯所需要的時間。每一個命令都會產生一個 layer 。如果一個 layer 已經在緩存中,那么生成這個 layer 所需要的時間就很短。從第一個不在緩存的 layer 起,所有以后的命令都會被重新編譯。因為這個原因,我們推薦將不常變動的命令放在前面,這樣可以使得更多的 layer 被成功緩存,從而減少編譯時間。

避免在容器中存儲數據

容器需要是無狀態的,這樣方便啟動新的 Container 來替代 down 掉的 Container 。如果容器中包含狀態,那么就需要額外的運維人員來恢復 down 掉 Container 的狀態。

使用.dockerignore

使用.dockerignore 可以減少拷貝不必要的文件到 Container ,這樣可以減少鏡像大小。比如很多地方都有.git 文件,但是這個文件就不需要拷貝到 Container 里面。

避免安裝不必要的軟件

安裝不必要的軟件既浪費空間又增加編譯時間。比如一個數據庫的 Container 就沒有必要安裝文字編輯軟件。 更進一步,如果程序能夠在本地編譯,那么就不用在 Container 里安裝編譯程序所需要的軟件和 lib 了。直接把本地編譯好的 binary 拷貝到 Container 里就好。

到此,關于“如何寫Dockerfile”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沈丘县| 合肥市| 临清市| 利辛县| 武城县| 鄱阳县| 和硕县| 尼玛县| 罗山县| 潢川县| 林西县| 饶平县| 韩城市| 开封县| 永宁县| 石台县| 揭西县| 乌兰县| 宣化县| 扶余县| 中西区| 阿拉善盟| 宝丰县| 清水县| 广灵县| 庐江县| 自治县| 尼玛县| 普格县| 凤凰县| 枣庄市| 娱乐| 若羌县| 尉氏县| 东港市| 巴彦淖尔市| 弥渡县| 京山县| 芮城县| 晋宁县| 五常市|