1. 相比較虛擬機,容器有哪些技術優勢?
(1)直接在操作系統上運行,從而跨系統上的所有容器共享資源,‘
(2)共享主機的內核。
(3)與虛擬機相比,它需要的硬件資源要少得多,因此容器的啟動速度也更快。
(4)包括所有依賴項。
2. 容器鏡像是什么?
? ? ? ?容器鏡像是包含編碼步驟的靜態文件,它充當創建容器的藍圖。
3. RHEL 提供了哪些容器工具?
? ? ? ?Podman管理容器和容器鏡像;Buildah創建容器鏡像;Skopeo檢查、復制、刪除和簽署鏡像。
4. 根容器和無根容器有什么區別?
? ? ? ?由特權用戶運行的容器稱為Rootful容器,由非特權用戶運行的容器稱為Rootless容器。
? ? ? ?Rootless容器不允許使用通常為特權用戶保留的系統資源。
5. 請談一下容器鏡像(image)和倉庫/注冊表 (registry)的關系。
? ? ? ?容器鏡像是容器運行的 “靜態內容”,倉庫是這些內容的 “存儲與分發平臺”。二者相互依賴:鏡像通過倉庫實現跨環境共享和版本管理,倉庫通過存儲鏡像發揮其分發價值,共同支撐了容器從構建到部署的全生命周期。
6. 請寫出以 shell 交互方式運行容器的命令。
? ? ? ?基礎命令為 `podman run -it --rm <鏡像名> /bin/bash`,其中 `-i` 保持輸入交互,`-t` 分配終端,`--rm` 退出后自動刪除容器,`/bin/bash` 啟動 shell。?
? ? ? ?擴展場景包括:掛載主機目錄(`-v 主機路徑:容器路徑`)、暴露端口(`-p 主機端口:容器端口`)、非 root 運行(`--user UID`);若容器已后臺運行,可用 `podman exec -it <容器ID/名稱> /bin/bash` 進入新 shell。
7. 請說明如何配置容器倉庫。
(1)倉庫類型選擇:根據場景選工具,輕量用Docker Registry,企業級用Harbor(帶權限、掃描)或Red Hat Quay(集成OpenShift),OpenShift環境優先用內置倉庫。
(2)基礎配置:?
?? - 啟動倉庫并掛載存儲實現持久化;?
?? - 配置HTTPS(生成證書)和基礎認證(htpasswd);?
?? - 客戶端需信任證書或配置非安全倉庫,通過login驗證后可推送/拉取鏡像。(3)企業級配置:?
?? - Harbor:部署時配置HTTPS和存儲(如Ceph),通過Web界面管理項目和權限;?
?? - Quay:高可用部署(結合Operator),集成LDAP認證和S3/Ceph存儲。
(4)客戶端適配:配置證書信任或非安全倉庫,確保與倉庫正常通信。
8. 如何檢查倉庫中的和本地的容器鏡像?
? ? ? ?本地鏡像:用podman images或docker images列出現有鏡像,inspect看詳情、history看層結構,結合grep搜索特定鏡像。
? ? ? ?遠程倉庫鏡像:公共倉庫(如 Docker Hub)用skopeo list-tags查看標簽;私有倉庫(如 Harbor)操作類似,需先登錄,也可通過倉庫 API 查詢。
? ? ? ?對比兩者:檢查本地是否有對應版本,通過skopeo inspect和podman inspect獲取遠程與本地鏡像的唯一標識(Digest)進行比對。
9. 如何移除本地鏡像?
? ? ? ?podman rmi <鏡像ID>
? ? ? ?podman rmi <倉庫名:標簽>?
? ? ? ?docker rmi <鏡像ID或名稱>
10. 使用容器時,如何將主機端口和容器端口進行映射?
? ? ? ?命令參數:-p/--publish,格式主機端口:容器端口[協議](協議默認為 TCP)
11. 在運行容器時如何給容器傳遞參數?
(1)命令行參數:`podman run 鏡像 參數1 參數2`,直接傳遞給ENTRYPOINT/CMD
(2)環境變量:`-e 變量名=值` 或 `--env-file 文件`,容器內應用讀取
(3)配置文件掛載:`-v 主機路徑:容器路徑`,覆蓋默認配置
(4)構建參數(ARG):`--build-arg 變量名=值`,構建時傳遞
(5)卷掛載:通過數據卷傳遞大量數據
(6)結構化數據:通過環境變量傳遞JSON/YAML(需應用解析)
12. 寫出管理容器時的常見命令,比如查看、 終止、 刪除、 重啟等。
? ? ? ?查看容器:podman start <容器ID或名稱>
? ? ? ?刪除容器:podman rm <容器ID或名稱>
? ? ? ?啟動/終止容器:podman start/stop <容器ID或名稱>
? ? ? ?進入容器:podman exec -it <容器ID或名稱> /bin/bash
? ? ? ?重命名容器:podman rename <舊名稱> <新名稱>
? ? ? ?暫停/恢復容器:podman pause <容器ID或名稱>
? ? ? ? ? ? podman unpause <容器ID或名稱>
? ? ? ?導出容器為tar文件:podman export <容器ID或名稱> > container.tar
? ? ? ?從tar文件導入為鏡像:podman import container.tar myimage:v1
13. 如何在容器中運行業務系統的命令?
(1)對運行中容器:用exec -it進入容器交互執行,或直接exec非交互執行(如podman exec 容器ID 命令)。
(2)啟動容器時:在run命令后直接指定業務命令,覆蓋默認啟動指令(如podman run 鏡像 命令)。
(3)通過啟動腳本:鏡像中配置ENTRYPOINT指向腳本,容器啟動時自動執行初始化及業務命令。
14. 如何為容器提供持久存儲?
(1)數據卷(Volumes):容器引擎管理的存儲(如podman volume create),獨立于容器生命周期,推薦使用。
(2)綁定掛載(Bind Mounts):掛載主機目錄到容器(如-v /host:/container),適合開發調試。
(3)tmpfs 掛載:數據存于內存(--tmpfs /path),容器停止后丟失,適合臨時緩存。
(4)存儲插件:對接外部存儲系統(如 NFS、Ceph),適合生產集群。
15. 如何進行配置才能使容器在 Linux 啟動時自動運行?
(1)容器引擎自帶策略:啟動容器時加--restart參數,如--restart=always(系統重啟后必啟)、--restart=unless-stopped(手動停止后不自動啟),也可通過podman/docker update修改已有容器策略。
(2)systemd 服務管理:創建服務文件(如/etc/systemd/system/容器名.service),定義啟動 / 停止命令及依賴,然后systemctl daemon-reload并enable --now啟用,支持控制啟動順序等精細配置。