Podman Compose 新手指南

来源:https://www.cnblogs.com/rockety/archive/2023/04/06/17291605.html
-Advertisement-
Play Games

作者:袁首京 原創文章,轉載時請保留此聲明,並給出原文連接。 技術人員多數又呆板又花心不長久。我知道你可能已經厭倦了 Docker,但是系統還沒有複雜到需要高攀 K8S 的地步。那我建議您,有空的話可以約一下 Podman。 Podman 使用起來是足夠簡單的,直接把它當做改了名字的 Docker ...


作者:袁首京

原創文章,轉載時請保留此聲明,並給出原文連接。

技術人員多數又呆板又花心不長久。我知道你可能已經厭倦了 Docker,但是系統還沒有複雜到需要高攀 K8S 的地步。那我建議您,有空的話可以約一下 Podman。

Podman 使用起來是足夠簡單的,直接把它當做改了名字的 Docker 就可以了。所以以下只介紹一下它的編排工具,也就是 podman-compose

簡介

用 Docker 的時候,你知道它提供了一個編排工具,可以將容器的細節,例如名稱、鏡像、重啟策略、捲、掛載點、埠、標簽等等,在一個單一的文件中指定,這個文件通常命名為 docker-compose.yml

Podman 可以使用 podman-compose 達成類似的功能。簡單的說,podman-compose 是使用 Podman 做為後端的一種 Compose Spec 實現,它的關註點主要是:

  • rootless 不需要 root 許可權
  • daemon-less 沒有守護進程

它最終的實現結果與 docker-compose.yml 文件的相容度非常高,只存在一些細微的差異,比如說某些值需要使用引號括起來等。

安裝

podman-compose 算是一個相對較新的工具,因此很多穩定或長期支持的 Linux 發行版,很可能還沒有將它放在內置的軟體源中。這種情況下,可以從 PyPI 安裝:

sudo pip3 install podman-compose

Ubuntu 22.10 及以上或 Debian 12 及以上,則可以使用包管理器安裝它:

sudo apt install podman-compose

Fedora 36 及以上,也可以直接安裝:

sudo dnf install podman-compose

Arch Linux 用戶:

sudo pacman -Syu podman-compose

驗證安裝

可以簡單輸出一下版本號,以驗證是否安裝正確:

podman-compose --version

輸出類似下麵:

$ podman-compose --version
['podman', '--version', '']
using podman version: 4.3.1
podman-composer version 1.0.3
podman --version
podman version 4.3.1
exit code: 0

編排

如前所述,podman-composedocker-compose 基本一致,所以不詳細描述其文件結構了。直接看一個例子,比較容易理解,內容如下:

version: 3.7

services:
  reverse-proxy:
    image: docker.io/library/caddy:alpine
    container_name: caddy-vishwambhar
    command: caddy run --config /etc/caddy/Caddyfile
    restart: always
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - /docker-volumes/caddy/Caddyfile:/etc/caddy/Caddyfile:Z
      - /docker-volumes/caddy/site:/srv:Z
      - /docker-volumes/caddy/caddy_data:/data:Z
      - /docker-volumes/caddy/caddy_config:/config:Z
      - /docker-volumes/caddy/ssl:/etc/ssl:Z
    labels:
      - io.containers.autoupdate=registry
      - pratham.container.category=proxy
    environment:
      - TZ=Asia/Kolkata
    depends_on:
      - gitea-web

  gitea-web:
    image: docker.io/gitea/gitea:latest
    container_name: gitea-govinda
    restart: always
    ports:
      - "8010:3000"
      - "8011:22"
    volumes:
      - /docker-volumes/gitea/web:/data:Z
      - /docker-volumes/gitea/ssh:/data/git/.ssh:Z
      - /etc/localtime:/etc/localtime:ro
    labels:
      - io.containers.autoupdate=registry
      - pratham.container.category=gitea
    environment:
      - RUN_MODE=prod
      - DISABLE_SSH=false
      - START_SSH_SERVER=true
      - SSH_PORT=22
      - SSH_LISTEN_PORT=22
      - ROOT_URL=https://git.mydomain.com
      - DOMAIN=git.mydomain.com
      - SSH_DOMAIN=git.mydomain.com
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=gitea-db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=/run/secrets/gitea_database_user_password
      - GITEA__service__DISABLE_REGISTRATION=true
      - TZ=Asia/Kolkata
    depends_on:
      - gitea-db
    secrets:
      - gitea_database_user_password

  gitea-db:
    image: docker.io/library/postgres:14-alpine
    container_name: gitea-chitragupta
    restart: always
    volumes:
      - /docker-volumes/gitea/database:/var/lib/postgresql/data:Z
    labels:
      - io.containers.autoupdate=registry
      - pratham.container.category=gitea
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=/run/secrets/gitea_database_user_password
      - POSTGRES_DB=gitea
      - TZ=Asia/Kolkata
    secrets:
      - gitea_database_user_password

secrets:
gitea_database_user_password:
external: true

啟動所有容器

可以簡單使用 up 命令,啟動編排文件中的所有容器與服務:

podman-compose up -d

上述命令背後將執行啟動相關容器必須的所有操作,包括:

  • 拉取鏡像
  • 使用指定選項(埠、捲、機密、網路等)創建容器
  • 按特定順序啟動容器(由約束定義,例如 depends_on)

-d 選項,隨便一猜大概就能明白,是做為後臺進程啟動容器的意思。

容器啟動並運行後,可以通過以下命令進行驗證:

$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7b7f91c03aa docker.io/library/caddy:alpine caddy run --confi... 4 hours ago Up 4 hours ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp caddy-vishwambhar
1cfcc6efc0d0 docker.io/library/postgres:14-alpine postgres 4 hours ago Up 4 hours ago gitea-chitragupta
531be3df06d0 docker.io/gitea/gitea:latest /bin/s6-svscan /e... 4 hours ago Up 4 hours ago 0.0.0.0:8010->3000/tcp, 0.0.0.0:8011->22/tcp gitea-govinda

停止容器與服務

既然啟動是 up,那停止很明顯就是 down 了。這倆單詞我老早就認識,不知道你認識不認識?

podman-compose down

此外,您還可以設置個超時時間,容器到時可以安全地自行關閉:

podman-compose down -t TIMEOUT_IN_SECONDS
podman-compose down --timeout TIMEOUT_IN_SECONDS

註意,以上命令僅停止容器,並不會刪除容器。

啟動或停止特定服務

你應該註意到了,上面的配置文件定義了多個服務,比如其中之一是 gitea-db。如果單獨啟停它的話,可以象這樣:

$ podman-comopse start gitea-db
$ podman-compose stop gitea-db
$ podman-compose restart gitea-db

其它

主要的命令其實就是上述這些了。剩餘一兩個可能用到的,簡單描述一下。

假如想預先拉取一下相關鏡像,可以使用命令:

podman-compose pull

另外,前述命令都假定編排文件的名字仍然叫 docker-compose.yml。肯定是可以換成其它名字的,比如 foo.yml,則使用時需要多加個參數,指定配置文件:

podman-compose -f foo.yml
podman-compose --file foo.yml

總之,使用起來還是相當簡單愉快的。請君試之。

作者:袁首京

原創文章,轉載時請保留此聲明,並給出原文連接。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 給定兩個字元串 s 和 t ,判斷它們是否是同構的。 如果 s 中的字元可以按某種映射關係替換得到 t ,那麼這兩個字元串是同構的。 每個出現的字元都應當映射到另一個字元,同時不改變字元的順序。不同字元不能映射到同一個字元上,相同字元只能映射到同一個字元上,字元可以映射到自己本身。 示例 1: 輸入 ...
  • 經常會聽到開發者提起單元測試的話題,那麼今天我就帶大伙一起來看看大名鼎鼎的谷歌 C++ 測試框架 GoogleTest。這是系列文章的第二篇。 ...
  • 切片 ​ Go語言切片是一種建立在數組類型之上的抽象,它構建在數組之上並且提供更強大的能力和便捷。解決了數組長度不可變等缺陷 聲明切片 ​ 切片的數據結構非常小,只有三個欄位:指向底層數組的指針,切片長度,切片容量。切片長度是指切片的真實長度,切片容量是指切片可擴展的最大長度,一般來講切片長度要小於 ...
  • 這節講述網路通訊服務端的實現,其開發思想、原則與客戶端的類似,即組合封裝、線程運行時類,面向介面編程等等。源碼面前,了無秘密,我直接以類代碼給大家展示,包含SNetServer類、SNetServerRunning類、INetServerHandler等類。 ...
  • 數組 ​ 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列(這是一種同構的數據結構);這種類型可以是任意的原始類型例如整形、字元串或者自定義類型(結構體、介面)。數組長度也是數組類型的一部分,所以[5]int和[10]int是屬於不同類型的。 :star::在其他語言中數組大多是引用類型,但 ...
  • 前言 一、人物簡介 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。 二、構成和表示方式 關係運算符的作用是判斷符號兩邊大小的關係 C語言中的關係運算符主要有六個,如下表所示 | 運算符 | 名稱 | 示例 | 描述 | | : ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是利用i.MXRT1xxx系列ROM集成的DCD功能可輕鬆配置指定外設。 關於 i.MXRT1xxx 系列晶元 BootROM 中集成的 DCD 功能這個話題,痞子衡早就想寫了,但是一直沒有動筆,畢竟這個話題比較生澀,單獨講會比較枯燥。最 ...
  • 在安裝Mac電腦應用程式的時候,經常會遇到“xxx.app已損壞,打不開。您應該將它移到廢紙簍“或”打不開的xxx.app,因為它來自身份不明的開發者”,如圖: 遇到上述情況是不是真的要移動到廢紙簍呢?下麵小編就為您帶來Mac應用程式無法打開提示不明開發者或文件損壞的處理方法,解答Mac應用程式無法 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...