1. 相比較虛擬機,容器有哪些技術優勢?
答:輕量級:容器共享宿主操作系統的內核,比虛擬機更輕量級,啟動速度更快,資源占用更少。
? ? ? ?高效性:容器可以快速部署和擴展,適合于微服務架構和持續集成/持續部署(CI/CD)流程。
? ? ? ?一致性:容器鏡像提供了環境的一致性,使得在不同環境中的部署更加可靠和可重復。
? ? ? ?隔離性:雖然容器共享宿主操作系統內核,但使用了 Linux 內核的各種隔離技術,能有效隔? ? ? ? ? ?離應用進程,提高安全性。
? ? ? 易管理性:容器可以通過編排工具(如 Kubernetes)集中管理,簡化了應用的部署、更新和? ? ? ? ? 擴展過程。
2. 容器鏡像是什么?
答:容器鏡像是一個輕量級、獨立、可執行的軟件包;包含運行應用所需的所有內容:代碼、運? ? ? ? ? ?行時環境、庫、環境變量和配置文件等。容器鏡像是容器的靜態模板,用來創建和運行容器? ? ? ? ? ?實。
3. RHEL 提供了哪些容器工具?
答:Docker:用于創建、部署和運行容器的開源平臺。
? ? ? ?Podman:一個容器和鏡像引擎,可以直接替代Docker,并提供了更強的安全性和命令行工? ? ? ? ? ?具的兼容性。
4. 根容器和無根容器有什么區別?
答:根容器:運行在操作系統的用戶空間,需要使用特權訪問系統資源,如訪問宿主操作系統的? ? ? ? ? ?內核。
? ? ? 無根容器:在普通用戶空間下運行,不需要特權訪問,通過用戶命名空間和其他技術提供了類? ? ? ? 似根容器的隔離和安全性,但更安全且不影響宿主系統。
5. 請談一下容器鏡像(image)和倉庫/注冊表 (registry)的關系。
答:容器鏡像是包含應用及所有依賴的不可變模板,是容器運行的 “原材料”,類似一個打包好的? ? ? ? ? ?軟件安裝包。
? ? ? ?倉庫 / 注冊表是專門存儲和分發鏡像的平臺,相當于鏡像的 “存儲中心” 和 “分發樞紐”。
? ? ? ?容器鏡像通過標簽(tag )與倉庫相關聯,標簽通常包括版本信息和其他元數據,使得鏡像可? ? ? ? ?以被唯一標識和獲取。二者協同保障了容器應用的高效分發和可靠運行。
6. 請寫出以 shell 交互方式運行容器的命令。
答:podman run -it <image_name_or_id> /bin/bash
7. 請說明如何配置容器倉庫。
答:可以使用podman login命令來認證并配置鏡像倉庫。
8. 如何檢查倉庫中的和本地的容器鏡像?
答:查看倉庫中的鏡像:podman inspect <image_name>
? ? ? ?查看本地鏡像:podman images
9. 如何移除本地鏡像?
答:使用 podman rmi <image_name_or_id>
10. 使用容器時,如何將主機端口和容器端口進行映射?
答:使用 -p 參數可以將主機的端口映射到容器的端口。
? ? ? ?podman run -p <host_port>:?<container_port> <image_name>
11. 在運行容器時如何給容器傳遞參數?
答:podman run <image_name> <command> <args>
12. 寫出管理容器時的常見命令,比如查看、 終止、 刪除、 重啟等。
答:查看容器:podman ps
? ? ? ?終止容器:podman stop <container_id>
? ? ? ?刪除容器:podman rm <container_id>
? ? ? ?重啟容器:podman restart <container_id>
13. 如何在容器中運行業務系統的命令?
答:用podman exec 命令可以在運行的容器中執行任意命令。
? ? ? ?podman exec -it <container_id> <command>
14. 如何為容器提供持久存儲?
答:可以使用Podman 的數據卷(Volumes)功能,或者直接掛載主機文件系統中的目錄到容器內? ? ? ? ?部的路徑來實現持久存儲。
? ? ? ?創建數據卷:podman volume create <volume_name>
? ? ? ?掛載數據卷:podman run -v <host_path>:<container_path> <image_name>
15. 如何進行配置才能使容器在 Linux 啟動時自動運行?
答:1)創建一個.service文件,比如mycontainer.service。
? ? ? ?2)在文件中定義容器的啟動命令,例如使用docker run或podman run。
? ? ? ?3)將文件放置在/etc/systemd/system/ 目錄下。
? ? ? ?4)使用systemctl命令重新加載(daemon-reload)并啟動(start 或 restart)該服務。