安装
发行版中直接通过仓库源安装即可:
pacman -S podman podman-compose # arch
配置镜像源
配置国内镜像,加快镜像下载速度,编辑/etc/containers/registries.conf
:
unqualified-search-registries = ['docker.io']
[[registry]]
prefix = "docker.io"
insecure = false
blocked = false
location = "docker.io"
[[registry.mirror]]
location = "docker.mirrors.ustc.edu.cn"
[[registry.mirror]]
location = "hub-mirror.c.163.com"
[[registry.mirror]]
location = "mirror.ccs.tencentyun.com"
将按由上到下的顺序依次搜索并下载镜像,若都失败,最后从docker.io
搜索下载。
命令
与docker
命令基本一致,按docker
使用方式使用即可。如以数据库为例,docker-compose
文件如下:
version: '3.1'
services:
postgres-db:
image: postgres
container_name: postgres
network_mode: bridge
privileged: true
restart: always
environment:
POSTGRES_PASSWORD: postgres
TZ: Asia/Shanghai
ports:
- 15432:5432
volumes:
- ./data:/var/lib/postgresql/data
用podman
启动:
podman-compose up -d
查看容器列表:
podman ps -a
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b2820a72053 docker.io/library/postgres:latest postgres 15 hours ago Up 2 hours ago 0.0.0.0:15432->5432/tcp postgres
容器开机自启
docker
因为具有守护线程,当docker
本身自启后即会启动相关容器,但podman
无守护线程,若要容器开机自启,需要为容器生成systemd
文件,命令如下:
podman generate systemd <container> > <container>.service
将生成的文件放到/usr/lib/systemd/system
下并启用开机自启即可:
systemctl daemon-reload
systemctl enable <container>.service
WSL
下容器自启
因在wsl
下无法使用systemctl
,因此无法通过这种方式进行自启动,可以通过将容器启动命令放到~/.bashrc
与~/.zshrc
文件中,这样当登录wsl
时,启动命令就会自动被执行。在用户目录下新建.profile
文件,写入容器启动命令如下:
containers=("container1" "container2") # 需要自启动的容器,容器的名称或ID
for container in ${containers[@]}; do
stat=$(podman stats "$container" --no-stream 2>&1) # 容器未启动时执行stats会输出Error
if [[ "$stat" =~ ^Error.* ]]; then
echo "starting container $container ..."
podman start "$container"
fi
done
在~/.bashrc
与~/.zshrc
(没有则创建)中使.profile
生效,加入:
source ~/.profile
这样,每当登录wsl
时,.profile
中的内容都会被执行,都会判断一下容器是否启动,若没启动就执行启动命令。注意当不是root
用户时,除了执行podman
命令加sudo
外,需要在配置中设置用户为无需输入密码即可通过sudo
执行podman
命令,编辑配置文件:
sudo visudo
在其中加入:
<username> ALL=(ALL) NOPASSWD: /usr/bin/podman # <username>为登录用户名