Dockerfiles 的 Top 10 常見 DevOps/SRE 面試問題及答案

1. RUN 和 CMD 之間有什么區別?

  • RUN : 在鏡像構建過程中執行命令,創建一個新的層。通常用于安裝軟件包。

    示例:

    RUN apt-get update && apt-get install -y curl
    
  • CMD : 指定容器啟動時默認運行的命令。它在運行時執行,而不是在構建過程中。

    示例:

    CMD ["node", "app.js"]
    

2. 如何在 Dockerfile 中使用多階段構建?

多階段構建允許你在 Dockerfile 中使用多個 FROM 語句來創建臨時階段,這有助于保持最終鏡像更小。

示例:

# Build stage
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp# Production stage
FROM alpine:latest
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]

3. EXPOSE 指令的目的是什么?

  • EXPOSE : 記錄容器在運行時監聽的端口。它不發布端口,但為運行容器的用戶提供提示。
  • 要使端口可訪問,請使用 -p 標志與 docker run

示例:

EXPOSE 8080

4. ARG 和 ENV 有什么區別?

  • ARG :定義一個變量,用戶可以在構建時通過 docker build --build-arg 傳遞。它在運行時不可用。

    示例:

    ARG VERSION=1.0
    RUN echo $VERSION
    ENV NODE_ENV=production
    
  • ENV : 設置在構建時和運行時都可用環境變量。

    示例:

    ENV NODE_ENV=production
    

5. 如何優化 Docker 鏡像的大小?

  • 使用多階段構建來分離構建依賴項和運行時依賴項。

    示例:

    # Build stage
    FROM node:14 AS build
    WORKDIR /app
    COPY package.json ./
    RUN npm install
    COPY . .# Production stage
    FROM node:14-alpine
    WORKDIR /app
    COPY --from=build /app .
    CMD ["node", "app.js"]
    
  • RUN 語句中組合命令以減少層數。

    示例:

    RUN apt-get update && apt-get install -y curl git
    
  • 使用更小的基礎鏡像,如 Alpine,以最小化鏡像大小。

6. 如何在容器重啟后持久化數據?

使用 Docker 卷或綁定掛載來持久化容器文件系統之外的數據。這確保即使容器被重新啟動或重新創建,數據仍然可用。

示例:

docker run -v mydata:/data myapp

7. LABEL 指令的目的是什么?

LABEL : 向圖像添加元數據,例如維護者信息、版本或描述。這有助于圖像的文檔編制和管理。

示例:

LABEL maintainer="you@example.com" version="1.0" description="A sample app"

8. 為什么你可能會在 Dockerfile 中使用 HEALTHCHECK?

HEALTHCHECK : 定義一個命令以測試容器是否正常運行。如果健康檢查失敗,Docker 可以自動重啟容器或采取其他糾正措施。

示例:

HEALTHCHECK --interval=30s --timeout=5s CMD curl -f http://localhost/ || exit 1

9. 如何在 Dockerfile 中處理秘密信息?

避免在 Dockerfile 中硬編碼秘密。相反,使用 Docker secrets、環境變量或像 HashiCorp Vault 這樣的外部工具來安全地管理敏感信息。

示例:

ENV API_KEY=${API_KEY}

10. CMD 和 ENTRYPOINT 有什么區別?

  • CMD : 為執行中的容器提供默認值。可以通過傳遞參數給 docker run 來覆蓋。

    示例:

    CMD ["nginx", "-g", "daemon off;"]
    
  • ENTRYPOINT :配置容器以可執行文件形式運行。與 docker run 一起提供的命令和參數將附加到 ENTRYPOINT 指令中。

    示例:

    ENTRYPOINT ["nginx"]
    CMD ["-g", "daemon off;"]
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895538.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ARM】JTAG接口介紹

1、 文檔目標 對 JTAG 接口有更多的認識,在遇到關于 JTAG 接口問題時有一些排查的思路。 2、 問題場景 在使用調試器過程時,免不了要接觸到 JTAG 接口,當出現連接不上時,就不知道從哪來進行排查。 3、軟硬件環境 1 軟件版本&am…

opencascade 獲取edge起始點 會出現終點與實際不同的情況

在使用 OpenCASCADE 獲取 TopoDS_Edge 的起始點和終點時,可能會出現終點與實際不一致的情況。這通常是由于以下原因導致的: 幾何曲線的方向問題:在某些情況下,幾何曲線的方向可能與拓撲邊的方向不一致,導致通過幾何曲線…

【電腦】u盤重裝win7

u盤必須8GB以上 1. CPU型號 首先查看CPU的型號看看到底能不能裝win7 2. 下載光盤映像文件 網址 看電腦是多少位的機器(32位下載x86 64位下載x64) 一共是這么多個版本按需下載對應的版本 電腦小白推薦無腦下載旗艦版 將鏈接復制到迅雷進行下載 3. 下載軟碟通 網址 下…

C++-AVL樹

一、AVL樹的概念 1.二叉搜索樹 二叉搜索樹(BST,Binary Search Tree),也稱二叉排序樹或二叉查找樹。 二叉搜索樹:一棵二叉樹,可以為空;如果不為空,滿足以下性質: 非空左子…

【網絡安全 | 漏洞挖掘】后端接受非預期參數的故事

未經許可,不得轉載。 文章目錄 正文正文 在對某項目進行測試時,我遵循了一套系統化的方法論,以確保全面理解其安全性。 首先,我創建了一個賬戶,并從用戶的角度探索主域及其各項功能。此階段,我避免使用 Burp Suite 或其他工具,而是嘗試真正理解該應用的設計邏輯與交互…

01.01、判定字符是否唯一

01.01、[簡單] 判定字符是否唯一 1、題目描述 實現一個算法,確定一個字符串 s 的所有字符是否全都不同。 在這一題中,我們的任務是判斷一個字符串 s 中的所有字符是否全都不同。我們將討論兩種不同的方法來解決這個問題,并詳細解釋每種方法…

w208基于spring boot物流管理系統設計與實現

🙊作者簡介:多年一線開發工作經驗,原創團隊,分享技術代碼幫助學生學習,獨立完成自己的網站項目。 代碼可以查看文章末尾??聯系方式獲取,記得注明來意哦~🌹贈送計算機畢業設計600個選題excel文…

《剛剛問世》系列初窺篇-Java+Playwright自動化測試-22- 操作鼠標拖拽 - 下篇(詳細教程)

1.簡介 上一篇中,宏哥說的宏哥在最后提到網站的反爬蟲機制,那么宏哥在自己本地做一個網頁,沒有那個反爬蟲的機制,谷歌瀏覽器是不是就可以驗證成功了,宏哥就想驗證一下自己想法,其次有人私信宏哥說是有那種…

神經網絡常見激活函數 8-SELU函數

SELU 縮放指數線性單元:SELU(Scaled Exponential Linear Unit) 函數導函數 SELU函數 S E L U ( x ) { λ x x > 0 λ α ( e x ? 1 ) x ≤ 0 \rm SELU(x) \left\{ \begin{array}{} \lambda x \quad & x > 0 \\ \lambda \alph…

【Elasticsearch】多字段查詢方式匯總

在 Elasticsearch 中,實現多字段查詢的常見方式有以下幾種,每種方式適用于不同的場景: --- ### 1. **multi_match 查詢** - **用途**:在多個字段中執行同一查詢,支持多種匹配策略。 - **關鍵參數**&#xff1a…

多線之旅:wait 與 notify

今天小編繼續來分享下多線程中的一些內容。 在多線程環境下,由于線程調度的不確定性,所以我們有時候無法很好的去保證其線程的執行順序。 但是呢,我們又要實現這個順序執行,所以我們可以使用到這兩個方法,wait 和 no…

批量修改mysql字符串字段子字符串

替換子字符串 使用 REPLACE 函數替換字段中的特定子字符串。 示例: 將 table_name 表中 column_name 字段的所有 old_value 替換為 new_value。 UPDATE table_name SET column_name REPLACE(column_name, old_value, new_value) WHERE column_name LIKE %old_val…

達夢:AWR 生成

目錄標題 AWR 性能診斷與報告生成1. 檢查 AWR 系統狀態2. 查看數據庫中的所有表空間3. 查看現有的 AWR 快照4. 設置 AWR 快照的時間間隔5. 創建 AWR 快照6. 查看最新的 AWR 快照7. 生成 AWR HTML 報告8. 將 AWR 報告保存到指定文件鏈接總結 自動工作集負載信息庫 AWR 報告解析指…

股票數據接口API實例代碼python、JAVA等多種語言演示免費獲取實時數據、歷史數據、CDMA、KDJ等指標數據配有API說明文檔

? 本文中所有接口均可直接在瀏覽器打開獲取數據,為了便于大家驗證有效性,已經做好了超鏈接,直接點擊即可! 滬深兩市股票列表 API接口鏈接(可點擊驗證):https://api.mairui.club/hslt/list/b…

深入理解DOM:22個核心知識點與代碼示例

本文系統介紹DOM相關的22個核心概念,每個知識點均提供代碼示例及簡要說明,幫助開發者全面掌握DOM操作技巧。 一、DOM基礎概念 1. DOM概念 DOM(Document Object Model)是HTML/XML的編程接口,通過JavaScript可動態修改…

【Map vs Set】:Java數據存儲的“雙子星”對決

個人主頁:?喜歡做夢 歡迎 👍點贊 ?關注 ??收藏 💬評論 目錄 🍰一、搜索 🍮1.概念 🍮2.模型 🍰二、Map 🍨1.什么是Map? 🍨2.Map的實例化 &…

【C語言 】C語言 桌游開發數字競拍(源碼)【獨一無二】

👉博__主👈:米碼收割機 👉技__能👈:C/Python語言 👉專__注👈:專注主流機器人、人工智能等相關領域的開發、測試技術。 【C語言 】C語言 桌游開發數字競拍(源碼…

Reinforcement Learning Heats Up 強化學習持續升溫

Reinforcement Learning Heats Up 強化學習持續升溫 核心觀點:強化學習正成為構建具有高級推理能力大語言模型(LLMs)的重要途徑。 最新進展 模型示例:近期出現了如DeepSeek - R1及其變體(DeepSeek - R1 - Zero&#xf…

Whisper+T5-translate實現python實時語音翻譯

1.首先下載模型,加載模型 import torch import numpy as np import webrtcvad import pyaudio import queue import threading from datetime import datetime from faster_whisper import WhisperModel from transformers import AutoTokenizer, AutoModelForSeq2…

湖倉分析|浙江霖梓基于 Doris + Paimon 打造實時/離線一體化湖倉架構

導讀:浙江霖梓早期使用 CDH 產品套件搭建了大數據系統,面臨業務邏輯冗余、查詢效率低下等問題,基于 Apache Doris 進行整體架構與表結構的重構,并基于湖倉一體和查詢加速展開深度探索與實踐,打造了 Doris Paimon 的實…