從單體系統角度看待容器服務化,用到.network與.container就夠了,再學其他如.kube、.pod則就要開始理解微服務思維了。不過今天要講的.volume,是把昨天在.container設定Volume的參數,獨立成一個服務,概念上很接近古早時代的網路上的芳鄰。
以下是基於podman 5.6.0的建置,目前還沒有升到5.8.2的迫切性,設定方式可能有變。
事先在HOME目錄下建置FTP1子目錄以便區隔目前的FTP子目錄做測試。
建立a2a-ftp.volume:vi .config/containers/systemd/a2a-ftp.volume
# a2a-ftp.volume
[Volume]
VolumeName=a2a-ftp
Driver=local
Type=none
Device=%h/FTP1
Options=bind
Driver、Type、Device與Options這四個參數後面再說。先重載服務
$ systemctl --user daemon-reload
$ systemctl --user start a2a-ftp-volume.service
.volume與.network一樣,啟動成功後,可以用podman quadlet list看STATUS是active/exited,服務名稱也是把副檔名變成服務名稱的尾綴,如:
a2a-net.network --> a2a-net-network.service
a2a-ftp.volume --> a2a-ftp-volume.service
啟動完成後,可以去/run/user//systemd/generator看a2a-ftp-volume.service的內容,我這裡建appuser的uid是1001。
# Automatically generated by /usr/lib/systemd/user-generators/podman-user-generator
#
# a2a-ftp.volume
[X-Volume]
VolumeName=a2a-ftp
Driver=local
Type=none
Device=%h/FTP1
Options=bind
[Unit]
Wants=podman-user-wait-network-online.service
After=podman-user-wait-network-online.service
SourcePath=/home/appuser/.config/containers/systemd/a2a-ftp.volume
RequiresMountsFor=%t/containers
[Service]
ExecStart=/usr/bin/podman volume create --ignore --driver local --opt device=%h/FTP1 --opt type=none --opt o=bind a2a-ftp
SyslogIdentifier=%N
Type=oneshot
RemainAfterExit=yes
最重要的是ExecStart的內容,相當於執行了podman volume create指令。
最後怎麼在.container設定Volume呢?
Volume=a2a-ftp.volume:/FTP1:z
記住要用小寫的z才能多容器共用資料夾。設完要記得daemon-reload並重啟服務才能生效。
Volume的參數說明:
mount -t nfs 10.1.2.100:/share/FTP