RedHat9 | podman容器-續集

在這里插入圖片描述

一、管理容器存儲和網絡資源

使用容器來運行簡單的進程,然后退出。可以配置容連續運行特定服務,如數據庫服務。如果持續運行服務,需要向容器添加更多的資源,如持久存儲或對其他網絡的訪問權限。

  • 針對企業容器平臺上的大型部署:使用復雜的存儲解決方案為容器提供存儲,而無需了解底層架構。
  • 針對單個容器主機的小型部署:通過在運行的容器上創建要掛載的目錄,從容器主機創建持久存儲。

當Web服務器或數據庫服務器等容器需要為外部客戶端提供服務時,需要客戶端設置通信通道,以訪問容器的內容。可以通過配置端口映射,以啟用與容器的通信。通過端口映射,將容器主機上的端口球球轉發到容器內的端口。

容器的環境變量

容器鏡像允許在創建時傳遞環境變量以自定義容器。可以使用環境變量為容器設置相關參數,根據自己的環境進行定制,無需創建自己的自定義鏡像。通常不會修改容器鏡像,因為這會在鏡像中添加層,使其更加難以維護。

當一個容器需要在創建時指定變量,直接創建容器時會啟動失敗

查看容器鏡像,可以發現存在一個mariadb-105鏡像

podman search registry.lab.example.com/

在這里插入圖片描述

直接創建并運行容器,因為該鏡像不在本地,podman會先下載鏡像然后才創建容器

podman run -d --name db01 registry.lab.example.com/

在這里插入圖片描述

查看容器db01的狀態,可以看到狀態為Exited

podman ps -a

在這里插入圖片描述

查看容器的日志

podman logs db01
podman container logs db01
  • MYSQL_USER:要創建的MySQL賬戶的用戶名
  • MYSQL_PASSEORD:用戶賬戶的密碼
  • MYSQL_DATABASE:數據庫名稱
  • MYSQL_ROOT_PASSWORD:root管理員密碼

在這里插入圖片描述

先刪除剛剛創建的容器

podman rm -f db01

在這里插入圖片描述

重新創建容器并傳遞環境變量

podman run -d --name db01 -e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db1 -e MYSQL_ROOT_PASSWORD=redhat@123 registry.lab.example.com/rhel8/mariadb-105

在這里插入圖片描述

二、容器持久存儲

在默認情況下,運行容器時,存儲的所有內容都基于容器的鏡像。容器鏡像的壽命比較短,用戶或應用寫入的所有的新數據都會在移除容器后丟失。如果要持久保存數據,通過將容器中的主機系統內容與–volume(-v)選項搭配使用。在容器中使用此卷類型時,必須考慮文件系統級別的權限。

在Mariadb容器鏡像中,mysql用戶必須擁有/var/lib/mysql目錄,等同于Mariadb數據庫在主機上運行。掛載到容器中的目錄必須具有mysql作為用戶或組所有者。如果以root運行容器,則主機上的UID和GID與容器內的UID和GID匹配。意思是,如果要將主機中的目錄掛載到容器中,盡量保證內外的屬主和屬組一致。在Mariadb數據庫中,數據的存儲目錄為/var/lib/mysql。

1、容器存儲的SELinux上下文

如果要在本機上存儲容器數據, 則必須要給主機文件夾設置安全上下文(container_file_t),然后才能將該目錄作為持久存儲掛載到容器中。如果主機目錄沒有設置安全上下文,則容器無法訪問該目錄。通過在-v選項中附加Z參數,可以自動設置SELinux上下文。
一共有兩種參數,分別是:Z:z

  • :Z:選項用于將指定的安全上下文設置為掛載點或文件的值。當使用:Z時,Podman會更改掛載點或文件的安全上下文,以確保容器可以訪問指定的主機文件系統路徑,并具有正確的SELinux權限。會將文件或目錄安全上下文更改為container_file_t
  • :z:這個選項用于將當前SELinux安全上下文傳播給容器中的掛載點或文件。當使用:z時,Podman會將主機上的安全上下文直接傳播到容器中的掛載點或文件,以確保容器內的進程具有與宿主機相同的安全上下文。

使用:Z實際上是指定了:z選項的默認值(container_file_t),將默認的SELinux安全上下文應用于掛載點或文件。

在大多數情況下,如果你只是想讓容器能夠訪問主機上的目錄或文件,并且不關心具體的安全上下文,那么使用:Z是一個簡單而安全的選擇。如果你需要更精細地控制安全上下文,或者需要確保容器內的進程具有與主機具有相同的安全上下文,那么可以使用:z選項。

2、用戶命名空間的UID映射

podman unshare cat /proc/self/uid_map    	# 獲取用戶命名空間的UID映射
podman unshare cat /proc/self/gid_map    	# 獲取用戶命名空間的GID映射

可以看到,容器中的root用戶(UID=GID=0)映射到主機計算機上的用戶為(UID=GID=1000);容器中的UID=GID=1映射到主機計算機上為(UID=GID=100000)。

  • UID換算規則:容器的UID+99999
  • GID換算規則:容器的GID+99999

在這里插入圖片描述

3、分配端口映射到容器

要提供對容器的網絡訪問權限,客戶端必須連接到容器主機上的端口,這些端口將網絡流量傳遞到容器中的端口。將容器主機上的網絡端口映射到容器中的端口時,容器將接收發送到主機網絡端口的網絡流量。

4、容器中的網絡配置

Podman4.0中支持兩種容器網絡后端,分別是Netavark和CNI。在RedHat9中,系統默認使用Netavark。

podman info --format {{.Host.NetworkBackend}}

在這里插入圖片描述

創建容器網絡

podman network create --gateway 192.168.10.254 --subnet 192.168.10.0/24 db_net
  • podman network create:創建網絡
  • –gateway 192.168.10.254:指定網關
  • –subnet 192.168.10.0/24:指定網段
  • db_net:網絡名稱

列出容器網絡

podman network ls

在這里插入圖片描述

查看容器網絡的詳細信息

podman network inspect podman

在這里插入圖片描述

容器持久化存儲的步驟

  1. 主機建立目錄
  2. 給主機目錄設置UID和GID
  3. 創建虛擬網絡
  4. 新建容器,指定容器的掛載目錄和映射端口,自動調整主機目錄的SELinux安全上下文
    在這里插入圖片描述

先刪除當前存在的所有容器

podman rm -f -a

先在本機新建存儲目錄

如果想要容器可以訪問主機的目錄,則首先需要容器中的用戶具備對主機目錄的訪問權限

mkdir /home/student/mysql_db

在這里插入圖片描述

先臨時創建一個Mariadb數據庫容器

podman run -d --name db01 -e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db -e MYSQL_ROOT_PASSWORD=redhat@123 registry.lab.example.com/rhel8/mariadb-105

查看容器密碼文件中的mysql用戶的UID和GID,得出UID和GID都為27

podman exec -it db01 grep mysql /etc/passwd

在這里插入圖片描述

查看容器中Mariadb服務的監聽端口號

podman exec -it db01 ss -tlnp 

在這里插入圖片描述

給主機目錄設置屬組和屬主

podman unshare chown 27:27 /home/student/mysql_db

在這里插入圖片描述

創建Mariadb容器的參考語句可以借鑒容器介紹中的usage字段

skopeo inspect docker://registry.lab.example.com/rhel8/mariadb-105 | grep usage

在這里插入圖片描述

新建容器,指定容器的掛載目錄和映射端口,自動調整主機目錄的SELinux安全上下文

podman run -d --name db02 -e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db -e MYSQL_ROOT_PASSWORD=redhat@123 -v /home/student/mysql_db:/var/lib/mysql:Z -p 13306:3306 registry.lab.example.com/rhel8/mariadb-105
  • -v /home/student/mysql_db:/var/lib/mysql:Z
    • -v:掛載目錄
    • /home/student/mysql_db:主機的目錄
    • /var/lib/mysql:容器中的目錄
    • :Z:自動為主機目錄添加安全上下文
    • -p 13306:3306:將主機的13306端口映射到容器中的3306端口
      在這里插入圖片描述

查看主機掛載目錄的安全上下文

ll -dZ /home/student/mysql_db

在這里插入圖片描述

查看容器的端口映射關系

podman port -a

在這里插入圖片描述

調整防火墻規則

sudo firewall-cmd --add-port=13306/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

在這里插入圖片描述

使用本地主機測試訪問容器數據庫服務

sudo dnf install mariadb -y		# 安裝Mariadb軟件
mysql -u user -predhat -h 127.0.0.1 -P 13306
  • mysql:登錄數據庫
  • -u user:指定登錄用戶名
  • -predhat:指定密碼
  • -h localhost:指定登錄主機
  • -P 13306:指定登錄端口號
    在這里插入圖片描述

使用異地主機遠程訪問容器數據庫服務

sudo dnf install -y mariadb
mysql -u user -predhat -h 172.25.250.10 -P 13306

在這里插入圖片描述

三、作為系統服務來管理容器

將容器配置為systemd服務,并將容器服務配置為在系統啟動時自動啟動。如果希望可以無限期運行服務的容器,如Web服務器或數據庫,特權用戶通常將這些服務配置為在系統啟動時運行,使用systemctl命令進行管理。作為普通用戶,可以通過創建systemd單元來配置Rootless容器。通過此配置,可以通過systemctl命令將容器作為常規系統服務進行管理。基于systemd單元管理容器主要用于不需要擴展的基本和小型部署。如果存在的容器過多和服務更加復雜,則可以使用Kubernetes的企業編排平臺。

systemd服務分類

  • 普通用戶使用systemctl命令來啟動服務,服務會在打開會話時啟動,在關閉最后一個會話時間停止。
  • 系統服務則會在系統啟動時啟動,在系統關閉時停止。

首先需要在用戶家目錄下創建單元文件目錄,然后進入目錄

mkdir -p ~/.config/systemd/user/
cd ~/.config/systemd/user/

使用podman generate systemd生成單元文件

podman generate systemd -n ConName -f
  • podman generate systemd:生成單元文件
  • -n ConName:容器名
  • -f:生成文件

使用普通用戶來生成單元文件,如果用戶從系統注銷,systemd服務會在特定時間后停止容器。因為systemd服務單元是使用.user選項創建的,在用戶登錄時啟動服務,并在用戶注銷時停止服務。可以通過運行loginctl enable-linger命令來更改此默認行為并強制已啟用的服務在服務器啟動時啟動,并在服務器關閉時停止。

創建一個redhat9容器

podman run -d --name redhat9_con registry.lab.example.com/ubi9-beta/ubi:latest

進入用戶家目錄,創建容器服務

cd ~/.config/systemd/user
podman generate systemd -n redhat9_con -f

更改默認行為,為所配置服務的用戶注銷后服務保留

loginctl enable-linger
loginctl show-user student		# 驗證命令是否配置成功

在這里插入圖片描述

驗證:注銷當前student用戶,再次使用student用戶登陸,可以看到redhat9_con容器狀態依舊是Up(我們沒有將該容器你設置為開機自啟)
在這里插入圖片描述

四、臨時使用容器

如果只是臨時某個容器,在容器使用完就自動刪除,可以添加–rm選項

創建一個redhat9容器,查看完容器的版本號就刪除容器

podman run --rm registry.lab.example.com/ubi9-beta/ubi cat /etc/redhat-release

在這里插入圖片描述

五、綜合案例–Mariadb數據庫服務

案例說明

在這里插入圖片描述

1、登錄podman

登錄podman

podman login -u admin -p redhat321 registry.lab.example.com

驗證:查看podman登錄

podman login --get-login

在這里插入圖片描述

2、創建容器網絡

創建容器網絡

podman network create --subnet 192.168.10.0/24 --gateway 192.168.10.254 ConNet

驗證:查看容器網絡的詳細信息

podman network inspect ConNet

在這里插入圖片描述

3、創建Mariadb數據庫容器

主機上創建數據存儲目錄

mkdir /home/student/db_data
podman unshare chown 27:27 /home/student/db_data

驗證:查看主機目錄的權限

ll -d /home/student/db_data

在這里插入圖片描述

查找創建容器模板

podman inspect registry.lab.example.com/rhel8/mariadb-105 | grep usage

在這里插入圖片描述

創建數據庫容器

podman run -di --name mariadb_con --network ConNet -e MYSQL_USER=mike -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db1 -p 13307:3306 -v /home/student/db_data:/var/lib/mysql:Z registry.lab.example.com/rhel8/mariadb-105

驗證:-查看數據庫容器狀態

podman ps

在這里插入圖片描述

驗證:查看容器的網絡信息

podman exec -it mariadb_con ip add show eth0

在這里插入圖片描述

驗證:查看容器的詳細信息

podman inspect mariadb_con		# 查看Netwokrs字段內容

在這里插入圖片描述

4、創建RedHat9容器

先查看容器鏡像倉庫中的容器鏡像

podman search registry.lab.example.com/

在這里插入圖片描述

創建RedHat9容器

podman會先下載容器鏡像,然后才會創建容器,這里我們只需要容器具有倉庫文件的讀權限,而不需要有寫權限,所以無需修改SELinux安全上下文。

podman run -di --name redhat9_con --network ConNet -v /etc/yum.repos.d/:/etc/yum.repos.d/ registry.lab.example.com/ubi9-beta/ubi

在這里插入圖片描述

驗證:查看容器狀態

podman ps

在這里插入圖片描述

查找相關命令的來源包

dnf provides ping
dnf provides ip

在這里插入圖片描述

容器安裝相關包

podman exec -it redhat9_con dnf install -y iputils iproute

驗證:查看容器的網絡信息

podman exec -it redhat9_con ip add show eth0
podman exec -it redhat9_con ping 192.168.10.1 -c3

在這里插入圖片描述

驗證:測試DNS解析

podman exec -it redhat9_con ping mariadb_con -c3

在這里插入圖片描述

主機上調整防火墻策略

sudo firewall-cmd --add-port=13307/tcp --permanent
sudo firewall-cmd --reload

驗證:查看當前防火墻策略

sudo firewall-cmd --list-ports

在這里插入圖片描述

5、跨容器服務訪問

先在redhat9_con容器中安裝Mariadb服務

podman exec -it redhat9_con dnf install -y mariadb

在redhat9_con容器中訪問mariadb_con容器中的mariadb服務

podman exec -it redhat9_con /bin/bash		# 開啟偽終端
mysql -u mike -predhat -h 192.168.10.1

在這里插入圖片描述

6、給Mariadb容器添加多一個容器網絡

創建容器網絡

podman network create --subnet 192.168.20.0/24 --gateway 192.168.20.254 ConNet2

驗證:查看容器網絡的詳細信息

podman network inspect ConNet2

在這里插入圖片描述

為Mariadb容器添加網絡

podman network connect ConNet2 mariadb_con

驗證:查看容器的網絡信息

podman inspect mariadb_con

在這里插入圖片描述

六、綜合案例–Nginx數據庫服務

案例拓撲

先將本地所有的容器刪除

podman rm -f -a

在這里插入圖片描述

1、登錄podman

登錄podman

podman login registry.lab.example.com

驗證:查看登錄

podman login --get-login

在這里插入圖片描述

2、主機準備

創建主機的本地掛載目錄

mkdir -p /home/student/appdev-adm/nginx_web

在掛載目錄中添加索引頁

echo nginx_web_page > /home/student/appdev-adm/nginx_web/index.html

3、創建nginx容器

查看容器鏡像倉庫

podman search 

在這里插入圖片描述

創建nginx容器并運行

需要在-v選項中指定:Z,為掛載目錄添加SELinux安全上下文,否則SELinux 會阻止容器訪問掛載的主機目錄

podman run -d --name nginx_con -v /home/student/appdev-adm/nginx_web/:/usr/share/nginx/html:Z -p 8080:80 registry.lab.example.com/library/nginx

驗證:查看容器狀態

podman ps

在這里插入圖片描述

驗證:本地訪問nginx_con容器中的nginx服務

curl localhost:8080

在這里插入圖片描述

4、容器即服務

**新建用戶systemd單元文件存儲目錄 **

mkdir -p ~/.config/systemd/user
cd ~/.config/systemd/user

創建容器單元文件

podman generate systemd -n nginx_con -f

驗證:查看當前目錄下生成的單元文件
在這里插入圖片描述

驗證:將容器暫停,然后通過systemctl啟動

podman stop nginx_con
systemctl --user start container.nginx_con.service		# --user:用戶級別啟動

在這里插入圖片描述

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

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

相關文章

為Ubuntu-24.04-live-server-amd64磁盤擴容

系列文章目錄 Ubuntu-24.04-live-server-amd64安裝界面中文版 文章目錄 系列文章目錄前言一、檢查系統本身情況1.用 lsblk 命令查看自己系統磁盤是什么狀態2.用 df -h 命令查看文件系統的磁盤空間使用情況3.解決 Ubuntu-24.04 磁盤空間只能用一半的問題3-1擴展邏輯卷&#xff…

這才是CSDN最系統的網絡安全學習路線(建議收藏)

01 什么是網絡安全 網絡安全可以基于攻擊和防御視角來分類,我們經常聽到的 “紅隊”、“滲透測試” 等就是研究攻擊技術,而“藍隊”、“安全運營”、“安全運維”則研究防御技術。 無論網絡、Web、移動、桌面、云等哪個領域,都有攻與防兩面…

基于X86+FPGA+AI的智能倉儲AGV機器人解決方案

應用場景 智能倉儲是物流過程的一個環節,智能倉儲的應用,保證了貨物倉庫管理各個環節數據輸入的速度和準確性,確保企業及時準確地掌握庫存的真實數據,合理保持和控制企業庫存,其中搬運環節目前已大量采用AGV的方式進行…

python-邏輯語句

if else語句 不同于C:else if range語句: continue continue的作用是: 中斷所在循環的當次執行,直接進入下一次 continue在嵌套循環中的應用 break 直接結束所在的循環 break在嵌套循環中的應用 continue和break,在…

星火認知大模型Spark3.5 api調用 #AI夏令營 #Datawhale #夏令營

環境安裝 pip install --upgrade -q spark_ai_python 官網注冊 鏈接:https://console.xfyun.cn/app/myapp 官方會在報名成功后,立即發放星火大模型 Spark Max的 API 額度助力我們完成賽事, 200w Tokens 任你花! 暑期有四場夏令營…

HDC Cloud 2024 | CodeArts加速軟件智能化開發,攜手HarmonyOS重塑企業應用創新體驗

2024年6月21~23日,華為開發者大會HDC 2024在東莞溪流背坡村隆重舉行。期間華為云主辦了以“CodeArts加速軟件智能化開發,攜手HarmonyOS重塑企業應用創新體驗”為主題的分論壇。論壇匯聚了各行各業的專家學者、技術領袖和開發者,共同探討Harmo…

養殖自動化管理系統:開啟智慧養殖新篇章

在現代農業的快速演進中,養殖業正經歷一場前所未有的技術革命。養殖自動化管理系統,作為這場變革的前沿科技,正逐步成為推動行業高效、環保、可持續發展的關鍵力量。本文將深入探討自動化養殖系統如何通過精準管理、智能監控、數據驅動決策&a…

C++ 把類封裝成靜態鏈接庫

目錄 一、動態鏈接庫和靜態鏈接庫的區別 二、對比 1、靜態鏈接庫 (Static Library) 2、動態鏈接庫 (Dynamic Library) 三、制作步驟 1. 創建類頭文件 2. 實現類 3. 創建靜態鏈接庫工程 4. 構建靜態鏈接庫 5. 使用靜態鏈接庫 6、添加靜態庫和頭文件路徑 一、動態鏈接庫…

SpringCloud_Ribbon負載均衡

概述 SpringCloud底層其實是利用了一個名為Ribbon的組件,來實現負載均衡功能的。 源碼 LoadBalancerInterceptor 其中含有intercept方法,攔截用戶的HttpRequest請求: request.getURI() 獲取請求uri,即http://userservice/use…

3D Gaussian Splatting代碼中的Gaussian_Module和Cameras兩個類的代碼解讀

Gaussian_model 討論Gaussian_model這個類,是因為里面包含了三維高斯分布的基本信息,里面定義了各種參量的構建方式、用于優化學習的激活函數、學習率設置方法和高斯點優化過程中的增加與刪除方式及對應優化器的處理方法。這個類定義在scene文件夾中的g…

反激開關電源反饋電路相關參數選型

Vb的電壓正常變化范圍是:0-1V(最低0V,由于有穩壓管,最高不會超過1V) Vb的電壓越高,則輸出占空比越大,Vb電壓越低,則輸出占空比越小 那么Va的正常變化范圍應該是:1.4-4.…

怎么配置electron-builder

electron-builder 是一個用于 Electron 應用程序打包和發布的工具,它支持 macOS、Windows 和 Linux 平臺。以下是一個清晰且詳細的 electron-builder 配置指南,包括分點表示和歸納,并參考了相關文章中的信息。 一、安裝 electron-builder 首先,你需要在你的 Electron 項目…

云卓SKYDROID-H30——科技改變未來

云卓H30采用高通處理器、搭載安卓嵌入式系統,擁有三個工作頻率,讓圖像更清晰、延遲更低、距離遠、抗干擾性強,支持多種接口,更有10.1寸高清工業級陽光可視屏,防塵耐磨,結構強度高,適用于各種嚴苛…

Python和tkinter單詞游戲

Python和tkinter單詞游戲 數據字典文本文件,文件名為Dictionary.txt,保存編碼格式為:utf-8。文本內容:每行一個 單詞 ,單詞和解釋用空格分隔,如 a art.一(個);每一(個) ability n.能力&#…

springboot實驗報告管理系統-計算機畢業設計源碼10596

目錄 1 緒論 1.1 選題背景與意義 1.2國內外研究現狀 1.3論文結構與章節安排 2系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1系統開發流程 2.2.2 用戶登錄流程 2.2.3 系統操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 刪除信息流程 2.3 系統功能分析 …

HarmonyOS Next開發學習手冊——單選框 (Radio)

Radio是單選框組件,通常用于提供相應的用戶交互選擇項,同一組的Radio中只有一個可以被選中。具體用法請參考 Radio 。 創建單選框 Radio通過調用接口來創建,接口調用形式如下: Radio(options: {value: string, group: string})…

高考不是終點:如何利用教育資源實現人生躍遷?普魯士教育的利弊,你了解嗎?從科舉到高考,中國教育的變遷!鏈接上層,獲取核心資源的途徑

高考已經結束,這兩天分數將會陸續出來,無論結果好壞,我都希望你明白一些道理。這些道理在學校老師不會教你,但是非常重要。 一、中國的科舉制度 科舉制度是為王朝服務的。 科舉制度是中國古代通過考試選拔官員的制度&#xff0c…

C++類型轉換可調用對象

目錄 C的四種可視性類型轉換 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可調用對象 普通函數 函數指針 仿函數 Lambda表達式 包裝器function bind C的四種可視性類型轉換 C語言中的類型轉換是不安全、不明確的,于是C就出了更…

MQTT QoS 0, 1, 2

目錄 # 開篇 1. 精細MQS TT QoS的行為 1.1 QoS 0: 最多交付一次(At Most Once) 1.2 QoS 1: 至少交付一次(At Least Once) 1.3 QoS 2: 只交付一次(Exactly Once) 1.4 傳輸過程圖示 1.5 總結 2. MQTT…

HTTP協議頭中X-Forwarded-For是能做什么?

X-Forwarded-For和相關幾個頭部的理解 $remote_addr 是nginx與客戶端進行TCP連接過程中,獲得的客戶端真實地址. Remote Address 無法偽造,因為建立 TCP 連接需要三次握手,如果偽造了源 IP,無法建立 TCP 連接,更不會有后…