<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56215|
      • 收錄網站:181186|

      IT精英團

      優化Docker鏡像安全性的12個技巧 建議收藏起來!

      優化Docker鏡像安全性的12個技巧 建議收藏起來!

      瀏覽次數:
      評論次數:
      編輯: 陽煦
      信息來源: ITPUB
      更新日期: 2022-05-05 15:32:28
      摘要

      本文介紹了12個優化Docker鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非root用戶身份運行,或如何確保使用最新的依賴

      • 正文開始
      • 相關閱讀
      • 推薦作品

      本文介紹了優化Docker圖像安全性的12種技術。

      每種技術都解釋了潛在的攻擊媒介,以及一種或多種緩解方法。這些技術包括避免泄漏構建密鑰、作為非根用戶運行,或者如何確保使用最新的依賴項和更新。

      1前言當你是一個使用Docker的新手時,你很可能會創建一個不安全的Docker映像,這將使攻擊者很容易接管容器,甚至整個主機,然后滲透到你公司的其他基礎設施中。

      有許多攻擊媒介可以被濫用來接管您的系統,例如:

      啟動應用程序(在Dockerfile的ENTRYPOINT中指定)以root用戶身份運行。這樣,一旦攻擊者利用漏洞并獲得外殼權限,他們就可以接管運行Docker守護程序的主機。

      您的映像基于過時和/或不安全的基本映像,其中包含(現在)眾所周知的安全漏洞。

      你的圖像包含一些工具(如curl,apt等。),一旦攻擊者獲得某種訪問權限,就可以通過它將惡意軟件加載到容器中。

      以下章節解釋了優化圖像安全性的各種方法。它們根據重要性/影響程度進行排序,這意味著排名靠前的方法更重要。

      2避免泄露大樓鑰匙。構建密鑰是僅在構建Docker映像時需要的憑證(不是在運行時)。例如,您可能希望在映像中包含應用程序的編譯版本。這個應用程序的源代碼是封閉源代碼,它的Git存儲庫是受訪問保護的。構建映像時,需要克隆Git存儲庫(需要一個構建密鑰,比如存儲庫的SSH訪問密鑰),從源代碼構建應用程序,然后刪除源代碼(和密鑰)。

      “泄露”建筑鑰匙意味著你不小心把這個鑰匙烤成了你形象的一層。這種情況很嚴重,因為每個拉你形象的人都可以找回這些秘密。這個問題源于Docker鏡像是以純加法的方式一層一層構建的。您在圖層中刪除的文件只是被“標記”為已刪除,但是提取您的圖像的人仍然可以使用高級工具訪問它們。

      您可以使用以下兩種方法之一來避免暴露生成密鑰。最新的Docker面試問題已經整理好了,可以在Java面試庫小程序里在線刷。

      多階段構建Docker多階段構建(官方文檔)有很多用例,比如加快你的圖像構建速度,或者減小圖像大小。本系列的其他文章將詳細介紹其他用例??傊?,也可以通過多階段構建來避免泄露構建密鑰,如下:

      創建一個stage #A,將憑證復制到其中,并使用它們來檢索其他工件(例如上面示例中的Git repository)并執行進一步的步驟(例如編譯應用程序)。階段#A的構建確實包含了構建的密鑰!

      創建一個#B階段,其中您只從#A階段復制未加密的工件,比如一個編譯的應用程序。

      僅發布/推送階段#B的鏡像

      KIT的關鍵背景知識。如果您使用docker build來構建,那么實際上可以執行構建的后端選項不止一個。其中更新更快的后端是BuildKit,需要在Linux上設置環境變量DOCKER_BUILDKIT=1才能顯式啟用。注意,在Windows/MacOS中,Docker for Desktop上默認啟用BuildKit。

      正如這里的文檔中所解釋的(閱讀它們以了解更多細節),BuildKit構建引擎支持Dockerfile中的附加語法。要使用build鍵,請在docker文件中放入如下內容:

      RUN-mount=type=secret,id=mysecret,dst=/foobar要運行的命令在執行RUN語句時,密鑰將可用于此構建容器,但密鑰本身(此處為:

      /foobar 文件夾)放入構建的鏡像中。你需要在運行 docker build 命令時指定密鑰的源文件 / 文件夾(位于主機上)的路徑,例如:

        docker build --secret id=mysecret,src=https:mysecret.txt -t sometag

        不過有一點需要注意:你不能通過 docker-compose up --build 來構建需要密鑰的鏡像,因為 Docker-compose 還不支持用于構建的 --secret 參數,見 GitHub 問題。如果你依賴 docker-compose 的構建,請使用方法 1(多階段構建)。

         題外話:不要推送在開發機上構建的鏡像

        你應該一直在一個干凈的環境中構建和推送鏡像(例如 CI/CD 管道),其中構建代理會將你的存儲庫克隆到一個新目錄。

        使用本地開發機器進行構建的問題是,你的本地 Git 存儲庫的“工作樹“可能是臟的。例如,它可能包含有開發過程中需要的密鑰文件,例如對中轉甚至生產服務器的訪問密鑰。如果沒有通過.dockerignore 排除這些文件,那么 Dockerfile 中的“COPY . .“等語句可能會意外導致這些密鑰泄露到最終鏡像中。

        3以非 root 用戶身份運行

        默認情況下,當有人通過“docker runyourImage:yourTag“運行你的鏡像時,這個容器(以及你在 ENTRYPOINT/CMD 中的程序)會以 root 用戶身份運行(在容器和主機上)。這給了一個使用某種漏洞在你的運行容器中獲得 shell 權限的攻擊者以下權力:

        • 對主機上所有顯式掛載到容器中的目錄的無限制寫權限(因為是 root)。

        • 能夠在容器中做 Linux 根用戶可以做的一切事情。例如,攻擊者可以安裝他們需要的額外工具來加載更多的惡意軟件,比如說通過 apt-get install(非 root 用戶無法做到這一點)。

        • 如果你的鏡像容器是用 docker run --privileged 啟動的,攻擊者甚至可以接管整個主機。

        為了避免這種情況,你應該以非 root 用戶(你在 docker build 過程中創建的一些用戶)的身份運行你的應用程序。在你的 Dockerfile 中的某個地方(通常是在結尾處)放置以下語句:

        # Create a new user (including a home-directory, which is optional)RUN useradd --create-home appuser# Switch to this userUSER appuser

        Dockerfile 中所有在 USER appuser 語句之后的命令(如 RUN、CMD 或 ENTRYPOINT)都將以這個用戶運行。這里有一些需要注意的地方:

        • 在切換到非 root 用戶之前,你通過 COPY 復制到鏡像中的文件(或由某些 RUN 命令創建的文件)是由 root 用戶擁有的,因此以非 root 用戶身份運行的應用程序無法寫入。為了解決這個問題,請把創建和切換到非 root 用戶的代碼移到 Dockerfile 的開頭。

        • 如果這些文件是在 Dockerfile 的開頭以根用戶身份創建的(存儲在 /root/ 下面,而不是 /home/appuser/ 下面),那么你的程序期望在用戶的主目錄中的某個地方(例如~/.cache)的文件,現在從應用程序的視角來看可能突然消失了。

        • 如果你的應用程序監聽一個 TCP/UDP 端口,就必須使用大于 1024 的端口。小于等于 1024 的端口只能以 root 用戶身份使用,或者以一些高級 Linux 能力來使用,但你不應該僅僅為了這個目的而給你的容器這些能力。

        4使用最新的基礎鏡像構建和更新系統包

        如果你使用的基礎鏡像包含了某個真正的 Linux 發行版(如 Debian、Ubuntu 或 alpine 鏡像)的全部工具集,其中包括一個軟件包管理器,建議使用該軟件包管理器來安裝所有可用的軟件包更新。

        背景知識
        基礎鏡像是由某人維護的,他配置了 CI/CD 管道計劃來構建基礎鏡像,并定期推送到 Docker Hub。你無法控制這個時間間隔,而且經常發生的情況是,在該管道將更新的 Docker 鏡像推送到 Docker Hub 之前,Linux 發行版的包注冊表(例如通過 apt)中已經有了安全補丁。例如,即使基礎鏡像每周推送一次,也有可能在最近的鏡像發布幾小時或幾天后出現安全更新。

        因此,最好總是運行更新本地軟件包數據庫和安裝更新的包管理器命令,采用無人值守模式(不需要用戶確認)。每個 Linux 發行版的這個命令都不一樣。

        例如,對于 Ubuntu、Debian 或衍生的發行版,使用 RUN apt-get update && apt-get -y upgrade

        另一個重要的細節是,你需要告訴 Docker(或你使用的任何鏡像構建工具)來刷新基礎鏡像。否則,如果你引用一個基礎鏡像,比如 python:3(而 Docker 在其本地鏡像緩存中已經有了這樣一個鏡像),Docker 甚至不會檢查 Docker Hub 上是否存在更新的 python:3 版本。為了擺脫這種行為,你應該使用這個命令:

        docker build --pull <rest of the build command>

        這可以確保 Docker 在構建鏡像之前拉取你的 Dockerfile 中 FROM 語句中提到的鏡像的更新。

        你還應該注意 Docker 的層緩存機制,它會讓你的鏡像變得陳舊,因為 RUN <install apt/etc. updates>命令的層是緩存的,直到基礎鏡像維護者發布新版本的基礎鏡像才刷新。如果你發現基礎鏡像的發布頻率相當低(比如少于一周一次),那么定期(比如每周一次)重建你的鏡像并禁用層緩存是個好主意。你可以運行以下命令來做到這一點:

          docker build --pull --no-cache <rest of the build command>
          5定期更新第三方依賴

          你編寫的軟件是基于第三方的依賴,也就是由其他人制作的軟件。這包括了:

          • 你的鏡像下面的基礎 Docker 鏡像,或

          • 你作為自己應用程序的一部分使用的第三方軟件組件,例如通過 pip/npm/gradle/apt/……安裝的組件。

          如果你的鏡像中的這些依賴過時了,就會增加攻擊面,因為過時的依賴往往有可利用的安全漏洞。

          你可以定期使用 SCA(軟件組件分析)工具來解決這個問題,比如 Renovate Bot。這些工具(半)自動將你聲明的第三方依賴更新為最新版本,例如在你的 Dockerfile、Python 的 requirements.txt、NPM 的 packages.json 等文件中聲明的列表。你需要設計你的 CI 管道,使 SCA 工具所做的更改自動觸發你的鏡像的 re-build。

          這種自動觸發的鏡像重建對于處在只維護模式,但代碼仍將被客戶在生產環境中使用(客戶希望它是安全的)的項目特別有用。在維護期間,你不再開發新的特性,也不會構建新的鏡像,因為沒有新的提交(由你做出)來觸發新的構建。然而,由 SCA 工具做出的提交確實會再次觸發鏡像構建。

          你可以在我的相關博文中找到更多關于 Renovate bot 的細節。最新 Docker 面試題整理好了,大家可以在Java面試庫小程序在線刷題。

          6對你的鏡像進行漏洞掃描

          即使你執行了上述建議,比如說你的鏡像總是使用最新的第三方依賴,它仍然可能是不安全的(例如一個依賴已經被棄用的情況)。在這種情況下,“不安全“意味著一個(或多個)依賴有已知的安全漏洞(在一些 CVE 數據庫中注冊)。

          出于這個原因,你可以給你的 Docker 鏡像提供某種工具來掃描所有包含的文件,以找到這種漏洞。這些工具有兩種形式:

          1. 你顯式調用的 CLI 工具(例如在 CI 管道中),比如說 Trivy(OSS,在 CI 管道中非常容易使用,見 Trivy 文檔)、Clair(OSS,但設置和使用比 Trivy 更復雜),或 Snyk(通過“docker scan“集成到 Docker CLI 中,見 cheat sheet,但只有有限的免費計劃!)

          2. 集成到你推送鏡像的鏡像注冊中心的掃描器,如 Harbor(內部使用 Clair 或 Trivy)。還有一些商業產品,如 Anchore。

          因為這些掃描器是通用的,它們還試圖覆蓋一大堆包注冊表,所以可能不會特別為你在自己項目中使用的編程語言或包注冊表定制。有時,你應該調查你的編程語言生態系統提供了哪些工具。例如,對于 Python 來說就有一個專門針對 Python 包的安全工具。

          推薦閱讀:使用 Docker 部署 Spring Boot 項目

          7掃描你的 Dockerfile 是否違反了最佳實踐

          有時,問題來自于你在 Dockerfile 中放置的語句,這些語句是不好的實踐(但你沒有意識到)。為此可以使用諸如 checkov、Conftest、trivy 或 hadolint 等工具,它們是 Dockerfile 的 linter。為了選擇正確的工具,你需要查看它的默認規則 / 政策。例如,hadolint 比 checkov 或 conftest 提供的規則更多,因為它是專門針對 Dockerfiles 的。這些工具也是相互補充的,因此在你的 Dockerfiles 上運行多個工具(如 hadolint 和 trivy)確實是有意義的。不過要做好準備,因為你需要維護“忽略文件“,在這個文件中的規則會被忽略——可能是由于誤報而有意忽略它們,或者是你準備故意破壞規則。

          8不要對 Docker Hub 使用 Docker 內容信任

          為了驗證你使用的基礎鏡像確實是由該鏡像背后的公司構建和推送的,你可以使用 Docker 內容信任(見官方文檔)特性。只需在運行 docker build 或 docker pull 時將 DOCKER_CONTENT_TRUST 環境變量設為“1“即可啟用該特性。Docker 守護進程將拒絕提取沒有經過發布者簽名的鏡像。

          不幸的是,大約一年前開始社區就不再以這種方式簽名鏡像了。就連 Docker Inc. 也在 2020 年 12 月停止了簽名官方 Docker 鏡像,也沒有官方解釋。問題更大的是如果你使用“docker pull docker:latest”這樣的命令,只會下載一個過時很久的鏡像。

          你可以查看一下鏡像簽名的其他實現,比如說 cosign(不過我還沒試過)。

          9掃描你自己的代碼是否有安全問題

          安全問題通常來源于其他人的代碼,也就是流行的第三方依賴。因為它們應用廣泛,所以在黑客那里是“有利可圖“的。然而,有時是你自己的代碼在作怪。例如,你可能不小心實現了 SQL 注入的可能性、堆棧溢出的錯誤,等等。

          為了找到這些問題,你可以使用所謂的 SAST(靜態應用安全測試)工具。一方面,有一些特定于編程語言的工具(你必須單獨研究),如 Python 的 bandit,或 Java 的 Checkstyle/Spotbugs。另一方面,還有一些支持多種編程語言和框架的工具套件(其中一些是非免費 / 商業的),如 SonarQube(對于它還有 SonarLint IDE 插件)。

          在實踐中,安全掃描有兩種基本方法:

          1. 連續(自動)掃描:你創建一個 CI 作業,在每次推送時掃描你的代碼。這可以讓你的代碼安全性保持在一個較高的水平上,但你必須弄清楚如何忽略誤報(這是一項持續的維護工作)。如果你使用 GitLab,可能還會發現 GitLab 的免費 SAST 功能很有趣。

          2. 不定期(手動)掃描:團隊中一些有安全意識的成員在本地運行安全檢查,例如每月一次或每次發布前,并手動查看結果。

          10使用 docker-slim 來刪除不必要的文件

          docker-slim 工具可以獲取大型 Docker 鏡像,臨時運行它們,分析哪些文件在臨時容器中是被真正使用的,然后生成一個新的、單層的 Docker 鏡像——其中所有未使用的文件都會被刪除。這樣做有兩個好處:

          • 鏡像被縮小

          • 鏡像變得更加安全,因為不需要的工具被刪除了(例如 curl 或包管理器)。

          請參考我之前文章中的 Docker slim 部分以了解更多細節。

          11使用最小的基礎鏡像

          一個鏡像中存儲的軟件(如 CLI 工具等)越多,攻擊面就越大。使用“最小“的鏡像是一個很好的實踐,它越小越好(無論如何這是一個很好的優勢),并且應該包含盡可能少的工具。最小的鏡像甚至超越了“優化體積“的鏡像(如 alpine 或:-slim,如 python:3.8-slim):前者沒有任何包管理器。這使攻擊者很難加載額外的工具。

          最安全的最小基礎鏡像是 SCRATCH,它完全不包含任何東西。只有當你在鏡像中放置自包含的二進制文件時,才能用 FROM SCRATCH 啟動你的 Dockerfile——這些二進制文件烘焙進了所有的依賴(包括 C-runtimes)。

          如果 SCRATCH 不適合你,谷歌的無發行版(distroless)鏡像可以是一個很好的選擇,特別是當你正在為常見的編程語言(如 Python 或 Node.js)構建應用程序,或者需要一個最小的 Debian 基礎鏡像時。

          不幸的是,最小鏡像有幾個需要注意的地方:

          • 無發行版的注意事項:

            • 不建議使用谷歌在 gcr.io 上發布的針對特定編程語言的鏡像,因為那里只有一個 latest 版本標簽,以及 major 版本的標簽(例如 python 的“3“,或 Node 的“12“)。你無法控制具體的語言運行時版本(例如是否使用 Python 3.8.3 或 3.8.4 等),這破壞了你的鏡像構建的可重用性。

            • 定制(和構建你自己的)無發行版鏡像是相當復雜的:你需要熟悉 Bazel 的構建系統并自己構建鏡像。

              • 注意:如果你唯一需要的定制是“以非 root 用戶身份運行代碼”,那么每個無發行版基礎鏡像中都有一個默認的非 root 用戶,詳見這里。

          • 最小基礎鏡像的常規注意事項:

            • 使用最小基礎鏡像調試容器是很棘手的,因為有用的工具(比如 /bin/sh)現在不見了。

              • 對于 Docker,你可以運行第二個調試容器(它確實有一個 shell 和調試工具,例如 alpine:latest),并使其共享你的最小容器的 PID 命名空間,例如通過 docker run -it --rm --pid=container:

                --cap-add SYS_PTRACE alpine sh
              • 對于 Kubernetes,你可以使用短期容器,見這里的例子

          12使用受信任的基礎鏡像

          一個受信任的鏡像指的是經過某人(要么是你自己的組織,要么是其他人)按照比如說某種安全級別審核的鏡像。這對具有高安全要求和規定的受管制行業(銀行、航空航天等)來說可能特別重要。

          雖然你自己可以通過從頭開始建立可信的鏡像來完成審計工作,但這是不可取的。因為你(這個鏡像的構建者)必須確保所有與審計有關的任務都已完成,并有正確的記錄(例如記錄鏡像中的包列表、執行的 CVE 檢查及其結果等等)。這項任務非常繁重。相反,我們建議將這項工作外包出去,使用商業性的“可信注冊表“——它提供了一套選定的可信鏡像,如 RedHat 的通用基礎鏡像(UBI)。RedHat 的 UBI 現在也可以在 Docker Hub 上免費獲取。

          背景知識

          在 Docker Hub 上托管的鏡像沒有經過審計。它們是“按原樣“提供的。它們可能是不安全的(甚至包含惡意軟件),而且沒有人會通知你這一點。因此,使用 Docker Hub 中不安全的基礎鏡像也會讓你的鏡像變得不安全。

          另外,你不應該把審計和上面提到的 Docker 的內容信任混為一談!內容信任只確認來源(鏡像上傳者)的身份,并不會確認與鏡像安全性有關的任何事實。

          13測試你的鏡像是否能在降低能力的情況下工作

          Linux capabilities 是 Linux 內核的一個特性,它允許你控制一個應用程序可以使用哪些內核特性,例如一個進程是否可以發送信號(如 SIGKILL)、配置網絡接口、掛載磁盤,或調試進程等。完整的列表見這里。一般來說,你的應用程序需要的功能越少越好。

          啟動你的鏡像容器的所有人都可以給予(或拿走)這些能力,例如通過調用“docker run --cap-drop=ALL “。默認情況下 Docker 會放棄所有能力,除了這里定義的那些以外。你的應用程序可能不需要所有這些功能。

          作為一個最佳實踐,你可以嘗試啟動你的鏡像容器,放棄所有能力(使用 --cap-drop=ALL),看看它是否仍然正常工作。如果不能,請搞清楚哪些功能是缺失的,并且你是否真的需要它們。然后請記錄你的鏡像需要哪些功能(以及為什么),這會給運行你鏡像的用戶帶去更多信心。

          14總結

          提升你的鏡像安全性并非閑庭信步。你需要花時間來評估和實施每一種實踐。本文中的列表應該可以節省你的時間,因為收集和排序重要步驟的工作已經為你做好了。

          所幸,提升你的應用程序的安全性是一個迭代過程。你可以從小處著手,每次實施一個步驟。不過你確實需要得到管理層的支持。這有時是很難辦的,特別是有時你的經理會對建議有抵觸情緒,他們可能傾向于從過去的經驗來做推斷(“我們,或我們的客戶,以前從未被黑過,那么為什么這種問題現在會發生在我們身上?我們需要的是特性!“)。你有幾個選擇:可以說服你的經理為安全性分配資源。

          例如,如果你有一個直接接觸客戶的渠道(你在為其構建軟件),那么可以說服他們,讓他們要求把安全性作為一個“特性“?;蛘咴谀愕男袠I中尋找安全漏洞的報告(例如一個直接的競爭對手受到了影響),以證明黑客攻擊確實發生了,甚至你的行業也出了問題,而且它們有嚴重的(財務)影響。

          原文

          標簽:鏡像 你的 密鑰
          JD.COM面試問題:ElasticSearch深度分頁解決方案
          ? 上一篇 2022-05-05
          MySQL支持哈希索引嗎?(收藏)
          下一篇 ? 2022-05-05
          • 胡迪核心知識點詳解(好文章合集)
            1閱讀 0條評論 個贊
            以下文章來源于公眾號-3分鐘秒懂大數據,作者在IT中穿梭旅行在Flink實時流中,經常會通過FlinkCDC插件讀取Mysql數據,然后寫入Hudi中。所以在執行上述操作時,需要了解……
          • 前端面試必須解決網絡中的跨域問題
            0閱讀 0條評論 個贊
            什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
          • 如何在Bash腳本中使用強大的Linux測試命令
            0閱讀 0條評論 個贊
            Linuxtest命令是Shell內置命令,用來檢測某個條件是否成立。test通常和if語句一起使用,并且大部分if語句都依賴test??梢詫⒁粋€元素與另一個元素進行比較,但它更?!?/div>
          • 真正的建筑設計是什么樣子的?
            1閱讀 0條評論 個贊
            什么是架構和架構本質在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的……
          • 10分鐘了解云原生 值得收藏~
            0閱讀 0條評論 個贊
            文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
          發表評論 共有條評論
          用戶名: 密碼:
          驗證碼: 匿名發表
          • MYSQL VS POLARDB唯一索引死鎖及應用設計
            1閱讀 0條評論 個贊
            #issue68021MySQLuniquecheck問題-知乎(zhihu.com)事情的開始是這樣的,最近和阿里云密切聯系,也成為他們的大客戶,(我們當然是大客戶,BIGBIG……
          • 創建Go語言最快的排序算法
            1閱讀 0條評論 個贊
            前言說到排序算法,很多同學會想起快速排序、堆排序、冒泡排序這些耳熟能詳的算法。了解得深一些的同學,也可能看過例如Python的timsort以及C++introsort之類的排序算法?!?/div>
          • 40幅最完整的計算機網絡思維導圖
            1閱讀 0條評論 個贊
            傳輸介質簡介以太網幀結構IP編址ICMP協議ARP協議傳輸層協議路由基礎靜態路由基礎距離矢量路由協議——RIP鏈路狀態協議——OSPFHDLC&PPP原理與應用幀中繼原理與配置PPPoENAT網絡地址……
          • 如何在Linux下擴展XFS根分區
            2閱讀 0條評論 個贊
            在某些情況下,/分區在Linux中磁盤空間不足。即使壓縮和刪除舊的日志文件也無濟于事,因此在這種情況下,我們別無選擇,只能擴展/文件系統。在本文中,我們將演示如何在Linux系統中擴展不……
          • Python極簡編碼規范
            1閱讀 0條評論 個贊
            本文是閱讀《PythonCodingRule》之后總結的最為精華及簡單的編碼規范,根據每個人不同喜好有些地方會有不同的選擇,我只是做了對自己來說最簡單易行的選擇,僅供大家參考。1、重要原則a.保持……
          • MySQL批量插入數據 一次插入多少行數據效率最高?
            7閱讀 0條評論 個贊
            一、前言我們在操作大型數據表或者日志文件的時候經常會需要寫入數據到數據庫,那么最合適的方案就是數據庫的批量插入。只是我們在執行批量操作的時候,一次插入多少數據才合適呢?假如需要插入的數據有百萬條,那……
          • 記得網上一個K8s Ingress訪問故障排除 最后卻不是帖子的鍋
            1閱讀 0條評論 個贊
            具體現象應用遷移至我們的PaaS平臺后會出現偶發性的502問題,錯誤見圖片:相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。為啥我們只看到了POST……
          • 優化Docker鏡像安全性的12個技巧 建議收藏起來!
            0閱讀 0條評論 個贊
            本文介紹了12個優化Docker鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非root用戶身份運行,或如何確保使用最新的依賴……
          • 一萬字長文講解HBase讀寫性能優化
            2閱讀 0條評論 個贊
            一、HBase讀優化1.HBase客戶端優化和大多數系統一樣,客戶端作為業務讀寫的入口,姿勢使用不正確通常會導致本業務讀延遲較高實際上存在一些使用姿勢的推薦用法,這里一般需要關注四個問題:1)s……
          • 詳細解釋Linux中的diff命令和例子
            1閱讀 0條評論 個贊
            文件比較在Linux中起著重要的作用,特別是對于程序員和Linux系統管理員。例如,如果您想找到兩個源代碼文件之間的差異來開發補丁,那么您需要一個文件比較工具來簡化這個過程。Linux中有幾……
          • MySQL 5.7 和 8.0 幾處細節上的差異
            9閱讀 0條評論 個贊
            MySQL8.0相對于MySQL5.7,有很多新特性,比如:快速加列、原子DDL、不可見索引、額外端口、角色管理等。這一節內容,就不講這些新特性了,只來聊聊最近在工作學習過程中遇到的幾處細節……
          • 在Linux中檢查磁盤空間的12個有用的df命令
            1閱讀 0條評論 個贊
            1.檢查文件系統磁盤空間使用情況這df命令顯示文件系統上的設備名稱、總塊數、總磁盤空間、已用磁盤空間、可用磁盤空間和掛載點信息。[root@local~]#dfFilesystem1K-bloc……
          • 10分鐘了解云原生 值得收藏~
            0閱讀 0條評論 個贊
            文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
          • 甲骨文(第11代)單實例-室內空調(第11代)遷移模擬測試
            1閱讀 0條評論 個贊
            Oracle11.2.0.4單實例----Oracle19C-RAC遷移模擬測試總體思想:通過RMAN物理備份在備庫恢復主庫數據,后續通過在主庫停業務后,將從備份后的所有日志都同步到新庫應用,重新配置……
          • 如何執行超過100M的SQL腳本?
            2閱讀 0條評論 個贊
            技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
          • 臉書數據庫項目負責人:我從做基礎設施中學到的42件事
            2閱讀 0條評論 個贊
            最近讀到了分布式系統研究者MaheshBalakrishnan的一篇博客《42thingsIlearnedfrombuildingaproductiondatabase》。同樣做……
          • 代碼| C語言根據可執行文件名獲取進程運行信息
            1閱讀 0條評論 個贊
            如下示例可根據可執行文件名獲得線程數、虛擬內存占用大小、物理內存占用大小、進程PID、CPU占用率和進程啟動次數等信息。1.程序源碼main.c:#include#include<……
          • 3種方式!轉到錯誤處理最佳實踐
            1閱讀 0條評論 個贊
            以下文章來源于公眾號-云加社區,作者李森林導語|錯誤處理一直以一是編程必需要面對的問題,錯誤處理如果做的好的話,代碼的穩定性會很好。不同的語言有不同的出現處理的方式。Go語言也一樣,在本篇文章中,我們……
          • PostgreSQL并行框架分析
            3閱讀 0條評論 個贊
            作者簡介施博文,目前就職于騰訊云PG團隊概覽PostgreSQL并行框架提供了一系列方便的函數,支持在插件或內核中直接調用相關函數,啟動若干個后臺進程進行并行操作。目前,PG的并行框架主要用來……
          • 高并發服務的幾點優化經驗
            1閱讀 0條評論 個贊
            前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
          最近發布資訊
          更多
          警花高潮嗷嗷叫
          <del id="nnjnj"></del><track id="nnjnj"></track>

          <p id="nnjnj"></p>

          <address id="nnjnj"></address>

            <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

              <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>