本篇文章是一個技術探討文,探討 Docker 是如何使用硬碟空間以及當維運人員發現空間不足時應該要如何清理系統上的空間。
Docker 的便利使用方式使得開發人員可以非常簡的透過的 Container 的概念來運行各式各樣的應用程式,這中間牽扯包含 Image 的建置,抓取以及透過其產生出一個運行的 Container。
隨者時間愈用愈久,系統內可用的空間也會愈來愈少,這時候可以透過 docker system df 來觀看一下目前系統上的空間資訊,主要包含下列四種類型,而每個類型也會包含目前使用量以及可以回收的量有多少
1. Images
2. Containers
3. Local Volumes
4. Build Cache(只有 docker 18.09 後使用 buildkit 才會有)
當 Contaienr 被創建時, /var/lib/docker 底下會有很多檔案以及資料夾都被創建出來,譬如
- /var/lib/docker/containers/ID (資料夾):如果 container 使用的是預設的 logging driver,則 log 檔案都會以 JSON 的格式存放於這個資料夾底下。
所以要注意,當 contaienr 有太多 log 時,其會透過這個方式影響節點檔案系統的容量
- /var/lid/docker/overlay2 (資料夾): 這邊包含了 containers 本身的 read-write layer 的檔案,大部分 Linux 發行版預設都會使用 overlay2 來管理。此外 contaienr 內如果有存放任何額外檔案於系統中,實際上都會放這節點上的這個資料夾內。
接下來作者透過一個實際的範例,讓一個全新的 contaienr 內透過 dd 指令來產生一些檔案,並且觀察上述資料夾的變化以及 docker system df 的結果,最後介紹 docker prune 以及 docker rm 針對 contaienr 的處理。
關於 image 的部分,除了常規使用的 Image 外,還有
1. Dangling images: 不再被參考使用的 image,譬如 ID/Tag 都是 None 的
這邊可以透過 docker image ls -f dangling=true 的指令
文章後半部分還有介紹 docker volume 以及 build cache 的部分,這篇文章非常推薦大家閱讀,除了基本使用外還會介紹底層 docker 實際上用到的資料夾,有了這些概念未來對於如何清除 docker 環境就會更有概念,知道要刪除哪些資料夾以及為什麼要刪除。
https://betterprogramming.pub/docker-tips-clean-up-your-local-machine-35f370a01a78
同時也有1部Youtube影片,追蹤數超過2,460的網紅野武士のゲームプレイ動画Ch. Nobusi Gameplay Ch,也在其Youtube影片中提到,初見 ▼再生リスト https://www.youtube.com/playlist?list=PLcKJ_Q1yK4PhSHewVRTvvJoi4FrzUjBow ゲーム概要 タイトル:2064: リードオンリーメモリーズ/2064: Read Only Memories 略称:2064: R...
「read linux」的推薦目錄:
- 關於read linux 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於read linux 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於read linux 在 Microsoft Azure Facebook 的最佳貼文
- 關於read linux 在 野武士のゲームプレイ動画Ch. Nobusi Gameplay Ch Youtube 的最讚貼文
- 關於read linux 在 #新手Read/write file in Linux Kernel - 軟體工程師板 | Dcard 的評價
- 關於read linux 在 What is the meaning of read -r? - Unix & Linux Stack Exchange 的評價
- 關於read linux 在 How do I prompt for Yes/No/Cancel input in a Linux shell script? 的評價
- 關於read linux 在 torvalds/linux: Linux kernel source tree - GitHub 的評價
- 關於read linux 在 Read files in Linux using Python 3 - YouTube 的評價
read linux 在 矽谷牛的耕田筆記 Facebook 的最佳解答
本文是一篇 2017 年的文章,雖然已經四年之久,但是我認為本篇文章值得一讀。
作者團隊於 2017 年時正在經歷如何將 VM 上的各種 Java 應用程式轉移到 Kubernetes 內的 Container,而本篇文章則是探討到底 Container 是如何透過 Linux Control Group 以及 namespace 實作的,透過對這些底層實作的瞭解,才有辦法針對 Container 效能部分去除錯與提升。
這種文章探討的都是很底層的概念,建議所有人都閱讀一遍,好好複習關於 cgroups/namespace 的概念,透過對這些概念的理解與掌握,能夠更有系統的去解釋何謂Docker Container,何謂輕量級虛擬化。
以下幫大家節錄一些重點,還是推薦自行閱讀全文
1. cgroup 用來隔離與限制 CPU,Memory,Disk,Network Bandwidth 等資源的用量
2. namespace 則是用來限制 ipc, pid, mount ,network, utc 等資訊的可視性,不同 namespace 內看到的資訊是獨立的,但是最終彼此還是屬於同一個 Kernel。
3. 任何沒有被 cgroup 規範的應用程式都會被自動包含到 root cgroup 的規範,不同發行版其位置不同,譬如 /sys/fs/cgropu.
假設今天透過 docker run 去運行一個 java 應用程式
a. Docker 會創建一個 pid namespace,接者運行 Java 前先把該應用程式給掛到新的 pid namespace 上並且賦予該 java 應用程式 PID 1
註: Host 上還是可以觀察到該 Java 應用程式,因為除了 Host 本身外,每個 pid namespace 都有自己的老爸,而老爸是可以看到小孩資訊的,這意味 docker dameon 雖然創建新的 pid namespace,但是host的pid namespace 實際是新 namespace 的老爸
b. 從老爸的視角來看,可以看到該 Java 應用程式也會有一個不同的 PID,而這個 PID 也會於 cgroup 系統中有自己的設定
4. CPU Cgroup 則是會用 share 為單位來定義每個 task 可以獲得多少相對的 CPU 時間,相對的算法是去計算 task 擁有的 share 數量佔了整個 cgroup 階層元件中的多少百分比。
舉例: 捨去其他服務單純考慮運行三個 Container 且有 4 Core CPU 的環境,三個 Container Task 分別給予 2048,1024,1024 share 的話,第一個 Container 大致是會被分配到兩個 CPU Time
5. CPU shares 沒有辦法去保證每個 task 最小用量是多少,所以需要透過 CPU Quotas 的概念來設定 CPU.cfs_quota_us(假設使用 CFS 這個排成演算法)以及 CPU.cfs_period_us(預設100ms)。
概念大概就是 cfs_period_us 定義的時間內,你最小可以使用多少時間,所以假如設定 cfs_quota_us 為 100ms,則預設情況下該 process 可以使用的量就是 100ms/100ms = 1 ~= 1 Core CPU
k8s 與上述的相關bug 可參考下列 issue
https://github.com/kubernetes/kubernetes/issues/67577
6. JVM 看到的是系統上全部的 CPU 資源,但是 Contaienr 本身當被限制 CPU 用量時,會有資訊落差,造成 GC 運行的效果不如預期,因為其認為系統有超多 CPU,而不知道自己其實被限制的CPU很少。
原文滿精彩的,推薦閱讀
https://engineering.squarespace.com/blog/2017/understanding-linux-container-scheduling
read linux 在 Microsoft Azure Facebook 的最佳貼文
Read how the Nobel Prize website relies on Linux on Azure App Service Environment for the scalability to address 1,000- to 10,000-fold increases in site traffic when prizes are announced: http://msft.social/prPFYn
read linux 在 野武士のゲームプレイ動画Ch. Nobusi Gameplay Ch Youtube 的最讚貼文
初見
▼再生リスト
https://www.youtube.com/playlist?list=PLcKJ_Q1yK4PhSHewVRTvvJoi4FrzUjBow
ゲーム概要
タイトル:2064: リードオンリーメモリーズ/2064: Read Only Memories
略称:2064: ROM
ジャンル:本格SFアドベンチャー
対応機種:PlayStation 4、Nintendo Switch、Microsoft Windows、OS X、Linux、Ouya、Razer Forge、Amazon Fire TV
開発元:MidBoss
発売元:PLAYISM
公式サイト:http://publishing.playism.jp/2064-read-only-memories
Amazon関連商品ページ:http://amzn.to/2iVz2sN
その他リンク
▼YouTube実況プレイチャンネル
https://www.youtube.com/c/nobusiletsplay
▼Blog
http://nobusiblog.blog.fc2.com/
▼Twitter
https://twitter.com/NOBUSI_SHOGUN
read linux 在 What is the meaning of read -r? - Unix & Linux Stack Exchange 的推薦與評價
There is no stand-alone read command: instead, it is a shell built-in, and as such is documented in the man page for bash : read [-ers] [-a aname] [-d ... ... <看更多>
read linux 在 #新手Read/write file in Linux Kernel - 軟體工程師板 | Dcard 的推薦與評價
小弟最近剛上課老師就要求我們去寫一個關於讀寫檔的題目,本人由於對Linux Kernel 接觸不深想問問大家怎麼讀檔?下方連結為本人四處查找的寫法但在 ... ... <看更多>