用 Podman Compose 管理容器
容器很棒,讓你可以將你的應用連同其依賴項一起打包,並在任何地方執行。從 2013 年的 Docker 開始,容器已經讓軟體開發者的生活變得更加輕鬆。
Docker 的一個缺點是它有一箇中央守護程式,它以 root 使用者的身份執行,這對安全有影響。但這正是 Podman 的用武之地。Podman 是一個 無守護程式容器引擎,用於開發、管理和在你的 Linux 系統上以 root 或無 root 模式執行 OCI 容器。
下面這些文章可以用來了解更多關於 Podman 的資訊:
如果你使用過 Docker,你很可能也知道 Docker Compose,它是一個用於編排多個可能相互依賴的容器的工具。要了解更多關於 Docker Compose 的資訊,請看它的文件。
什麼是 Podman Compose?
Podman Compose 專案的目標是作為 Docker Compose 的替代品,而不需要對 docker-compose.yaml 檔案進行任何修改。由於 Podman Compose 使用吊艙 工作,所以最好看下“吊艙”的最新定義。
一個“吊艙 ”(如一群鯨魚或豌豆莢)是由一個或多個容器組成的組,具有共享的儲存/網路資源,以及如何執行容器的規範。
(LCTT 譯註:容器技術領域大量使用了航海比喻,pod 一詞,意為“豆莢”,在航海領域指“吊艙” —— 均指盛裝多個物品的容器。常不翻譯,考慮前後文,可譯做“吊艙”。)
Podman Compose 的基本思想是,它選中 docker-compose.yaml
檔案裡面定義的服務,為每個服務建立一個容器。Docker Compose 和 Podman Compose 的一個主要區別是,Podman Compose 將整個專案的容器新增到一個單一的吊艙中,而且所有的容器共享同一個網路。如你在例子中看到的,在建立容器時使用 --add-host
標誌,它甚至用和 Docker Compose 一樣的方式命名容器。
安裝
Podman Compose 的完整安裝說明可以在專案頁面上找到,它有幾種方法。要安裝最新的開發版本,使用以下命令:
pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz
確保你也安裝了 Podman,因為你也需要它。在 Fedora 上,使用下面的命令來安裝Podman:
sudo dnf install podman
例子:用 Podman Compose 啟動一個 WordPress 網站
想象一下,你的 docker-compose.yaml
檔案在一個叫 wpsite
的資料夾裡。一個典型的 WordPress 網站的 docker-compose.yaml
(或 docker-compose.yml
) 檔案是這樣的:
version: "3.8"
services:
web:
image: wordpress
restart: always
volumes:
- wordpress:/var/www/html
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: magazine
WORDPRESS_DB_NAME: magazine
WORDPRESS_DB_PASSWORD: 1maGazine!
WORDPRESS_TABLE_PREFIX: cz
WORDPRESS_DEBUG: 0
depends_on:
- db
networks:
- wpnet
db:
image: mariadb:10.5
restart: always
ports:
- 6603:3306
volumes:
- wpdbvol:/var/lib/mysql
environment:
MYSQL_DATABASE: magazine
MYSQL_USER: magazine
MYSQL_PASSWORD: 1maGazine!
MYSQL_ROOT_PASSWORD: 1maGazine!
networks:
- wpnet
volumes:
wordpress: {}
wpdbvol: {}
networks:
wpnet: {}
如果你用過 Docker,你就會知道你可執行 docker-compose up
來啟動這些服務。Docker Compose 會建立兩個名為 wpsite_web_1
和 wpsite_db_1
的容器,並將它們連線到一個名為 wpsite_wpnet
的網路。
現在,看看當你在專案目錄下執行 podman-compose up
時會發生什麼。首先,一個以執行命令的目錄命名的吊艙被建立。接下來,它尋找 YAML 檔案中定義的任何名稱的卷,如果它們不存在,就建立卷。然後,在 YAML 檔案的 services
部分列出的每個服務都會建立一個容器,並新增到吊艙中。
容器的命名與 Docker Compose 類似。例如,為你的 web 服務建立一個名為 wpsite_web_1
的容器。Podman Compose 還為每個命名的容器新增了 localhost
別名。之後,容器仍然可以透過名字互相解析,儘管它們並不像 Docker 那樣在一個橋接網路上。要做到這一點,使用選項 -add-host
。例如,-add-host web:localhost
。
請注意,docker-compose.yaml
包含了一個從主機 8080 埠到容器 80 埠的 Web 服務的埠轉發。現在你應該可以透過瀏覽器訪問新 WordPress 例項,地址為 http://localhost:8080
。
控制 pod 和容器
要檢視正在執行的容器,使用 podman ps
,它可以顯示 web 和資料庫容器以及吊艙中的基礎設施容器。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a364a8d7cec7 docker.io/library/wordpress:latest apache2-foregroun... 2 hours ago Up 2 hours ago 0.0.0.0:8080->80/tcp, 0.0.0.0:6603->3306/tcp wpsite_web_1
c447024aa104 docker.io/library/mariadb:10.5 mysqld 2 hours ago Up 2 hours ago 0.0.0.0:8080->80/tcp, 0.0.0.0:6603->3306/tcp wpsite_db_1
12b1e3418e3e k8s.gcr.io/pause:3.2
你也可以驗證 Podman 已經為這個專案建立了一個吊艙,以你執行命令的資料夾命名。
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
8a08a3a7773e wpsite Degraded 2 hours ago 12b1e3418e3e 3
要停止容器,在另一個命令視窗中輸入以下命令:
podman-compose down
你也可以透過停止和刪除吊艙來實現。這實質上是停止並移除所有的容器,然後再刪除包含的吊艙。所以,同樣的事情也可以透過這些命令來實現:
podman pod stop podname
podman pod rm podname
請注意,這不會刪除你在 docker-compose.yaml
中定義的卷。所以,你的 WordPress 網站的狀態被儲存下來了,你可以透過執行這個命令來恢復它。
podman-compose up
總之,如果你是一個 Podman 粉絲,並且用 Podman 做容器工作,你可以使用 Podman Compose 來管理你的開發和生產中的容器。
via: https://fedoramagazine.org/manage-containers-with-podman-compose/
作者:Mehdi Haghgoo 選題:lujun9972 譯者:geekpi 校對:wxy
相關文章
- Docker 與 Podman 容器管理的比較Docker
- RHCE(podman容器)
- 使用 Docker Compose 管理多個容器Docker
- 使用docker-compose管理freeswitch容器Docker
- Docker Compose 多容器應用Docker
- .NET Core容器化之多容器應用部署(Docker-Compose)Docker
- docker(podman)容器設定中文環境Docker
- 為什麼Podman執行容器更安全?
- 開源容器 Podman 常用命令總結!
- 1.06 docker Compose多容器部署Docker
- Podman:一個更安全的執行容器的方式
- 無需sudo使用Podman在Linux上執行容器Linux
- Docker 容器編排利器 Docker ComposeDocker
- 使用 Bitwarden 和 Podman 管理你的密碼密碼
- Podman
- Compose應用
- 如何使用 Bitwarden 和 Podman 管理你的密碼密碼
- Jetpack Compose(3) —— 狀態管理Jetpack
- 使用 makefile 管理 docker-composeDocker
- podman安裝和普通使用者使用podman的方式及podman常用命令
- Docker Vs PodmanDocker
- Docker - 03 編排容器 Docker Compose 指令速查表Docker
- 容器技術|Docker三劍客之docker-composeDocker
- docker-compose 實用示例Docker
- Docker容器中應用程式的log輸出管理Docker
- 讓容器應用管理更快更安全,Dragonfly 釋出 Nydus 容器映象加速服務Go
- Docker的容器管理Docker
- docker-compose 啟動容器後秒退問題小記Docker
- Portainer - 用於管理容器的 UI-k8sAIUIK8S
- Jetpack Compose學習(10)——使用Compose物料清單BOM,更好管理依賴版本Jetpack
- podman 入門實戰
- podman常用命令
- 在 macOS 中使用 PodmanMac
- Docker折騰記: (2)基於docker-compose構建yapi容器DockerAPI
- Dockerfile指令與Docker-compose容器編排-搭建docker私有倉庫Docker
- docker學習筆記(4)- 應用資料管理(容器外)Docker筆記
- Podman修改 image儲存位置
- 分享 6 款用於管理Docker容器的免費開源工具Docker開源工具