Podman 教程

Podman 创建启动容器

在 Podman 中,创建并启动容器的核心命令是 podman run,该命令会自动完成 “拉取镜像(若本地不存在)→ 创建容器 → 启动容器” 的完整流程,如下图:

Podman 创建启动容器

podman run 命令通过搭配不同选项,可满足端口映射、数据持久化、环境配置等多种需求。下面将详细进行说明:

基本命令格式

podman run [选项] 镜像名[:标签] [容器内执行的命令]

参数说明:

  • 选项:命令支持的选项,如 -d 后台运行

  • 镜像名:用来创建容器的镜像名称,如:ubuntu

  • 标签:镜像的版本信息,如:latest,ubuntu:latest 则使用最新版本的 ubuntu 镜像来创建容器。

  • 容器内执行的命令:可选,默认执行镜像内置的启动命令(如 Nginx 镜像默认启动 nginx 服务)。

点击查看完整的 podman run 命令手册

  

常用选项与实战示例

基础启动(前台运行,适合查看日志)

前台运行容器的核心是不添加 -d(后台)选项,让容器主进程直接关联当前终端,日志会实时输出到终端,方便实时查看运行状态和调试。

命令如下:

podman run nginx

打开终端,执行“podman run nginx”命令,将基于 nginx:latest 镜像启动容器,前台运行(终端显示 Nginx 日志),按 Ctrl+C 停止容器。如下图:

Podman 创建启动容器

后台运行(守护进程模式,常用)

容器后台运行(守护进程模式)的核心是通过 -d(--detach)选项,让容器脱离当前终端在后台运行,不占用终端且能长期提供服务,是日常部署服务的常用方式。

命令如下:

podman run -d --name my-nginx nginx

选项说明:

  • -d(--detach):后台运行,不占用当前终端。

  • --name my-nginx:指定容器名称,自定义名称便于后续操作,如 my-nginx。

打开终端,运行上面命令,效果如下图:

Podman 创建启动容器

继续执行podman ps 命令,可以看到名称为 my-nginx 的运行中容器。如下图:

Podman 创建启动容器

端口映射(让外部访问容器服务)

默认情况下,容器处于独立网络命名空间,内部服务仅能被宿主机或同一 Pod 内的关联容器访问,外部设备(如同一局域网内的其他电脑、手机)无法直接连接。需通过 -p(--publish)选项手动映射宿主机端口到容器端口,实现端口转发,外部才能通过宿主机的映射端口访问容器内服务。

命令如下:

podman run -d -p 8080:80 --name my-nginx nginx

选项说明:

  • -p 宿主机端口:容器端口,此处将宿主机 8080 端口映射到容器 80 端口(Nginx 默认端口)。

打开终端,执行上述命令,效果如下图:

Podman 创建启动容器

然后,在宿主机或同一网络设备通过 http://宿主机IP:8080 即可访问 Nginx 服务。如下图:

Podman 创建启动容器

数据持久化(挂载本地目录到容器)

容器的文件系统属于临时存储,删除容器后,其内部数据(如配置文件、日志、数据库数据等)会随容器一起被清理。为避免数据丢失,需通过 -v(--volume)选项将宿主机的目录或文件挂载到容器内指定路径,实现数据持久化 —— 即容器内的读写操作会直接作用于宿主机的挂载目录,即使容器被删除,数据仍保存在宿主机中,新建容器时重新挂载即可复用。

命令如下:

podman run -d -p 8080:80 \
  -v /本地目录/nginx/html:/usr/share/nginx/html \
  -v /本地目录/nginx/conf:/etc/nginx/conf.d \
  --name my-nginx nginx

选项说明:

  • -v 宿主机路径:容器内路径,此处挂载了 Nginx 的网页目录和配置目录。

注意:宿主机修改 /本地目录/nginx/html 中的文件,容器内 Nginx 实时生效;容器删除后,文件仍保存在宿主机。

打开终端,运行如下命令,效果如下图:

Podman 创建启动容器

注意,在执行上述命令前需要现在 C 盘分别创建 C:/nginx/html 和 C:/nginx/conf 目录。

然后在 C:/nginx/html 目录创建一个 index.html 文件,如下图:

Podman 创建启动容器

文件内容如下:

<h1>hello, podman</h1>

继续在 C:/nginx/conf 目录下创建 simple.conf 配置文件,内容如下:

# 定义服务块,监听 80 端口
server {
    listen 80;  # 容器内监听 80 端口(与端口映射的容器端口一致)
    server_name localhost;  # 匹配本地访问,也可改为实际域名(如 example.com)

    # 静态资源配置
    root /usr/share/nginx/html;  # 容器内静态资源根目录(与挂载的 html 目录对应)
    index index.html index.htm;  # 默认索引文件

    # 访问日志配置(可选,便于排查)
    access_log /var/log/nginx/simple-access.log;
    error_log /var/log/nginx/simple-error.log;

    # 静态文件访问优化(可选)
    location ~* \.(html|htm|css|js|jpg|jpeg|png|gif)$ {
        expires 1d;  # 浏览器缓存 1 天
        add_header Cache-Control "public";
    }

    # 404 页面配置(可选)
    error_page 404 /404.html;
    location = /404.html {
        root /usr/share/nginx/html;
    }
}

保存后,你可以打开 Podman Desktop,选择名为 my-nginx 的容器,点击查看容器详情,选择 Terminal,打开终端,分别查看 /usr/share/nginx/html 和 /etc/nginx/conf.d 目录下的内容:

Podman 创建启动容器

上图显示的内容,是不是我们在 Windows 中 C 盘创建的内容,说明目录映射成功了。

接着,分别执行如下命令,重启容器:

# 停止容器
podman stop my-nginx
# 启动容器
podman start my-nginx

再次使用浏览器访问 http://localhost:8080 地址,效果如下图:

Podman 创建启动容器

交互式启动(进入容器终端,适合调试)

交互式启动的核心是通过 -it 组合选项,为容器分配交互式终端,启动后直接进入容器内部命令行,方便实时调试、执行命令或修改配置。

例如:

podman run -it --name my-ubuntu ubuntu:22.04 /bin/bash

选项说明:

  • -i(--interactive):保持输入交互。

  • -t(--tty):分配伪终端(终端界面)。

执行上述命令将启动后直接进入容器的 bash 终端,可执行 ls、apt 等命令,输入 exit 退出并停止容器。例如:

Podman 创建启动容器

注意,如果本地没有 ubuntu:22.04 镜像,将自动拉取镜像,然后运行一个容器。

配置环境变量(传递参数给容器内应用)

在 Podman 中,通过环境变量向容器内应用传递参数是一种灵活的配置方式,无需修改容器镜像即可动态调整应用行为(如数据库地址、日志级别、端口号等)。

可以通过 -e(--env)选项或 --env-file 选项实现传递环境变量。

示例:使用 alpine 镜像(轻量 Linux 系统),通过环境变量传递 MY_ENV1 和 MY_ENV2,然后进入容器执行命令打印这些变量,直观观察效果。

podman run -it -e "MY_ENV1=hello" -e "MY_ENV2=world" --name env-demo alpine:latest /bin/sh

效果如下图:

Podman 创建启动容器

下面演示如何通过环境变量文件批量传递环境变量到容器,步骤如下:

(1)创建一个环境变量文件,假如名称为 my.env,内容如下:

# 这是注释行
MY_ENV1=hello
MY_ENV2=world

注意,一行一个定义一个环境变量。

(2)通过 --env-file 启动容器

podman run -it --env-file D:/my.env --name env-file-demo alpine:latest /bin/sh

效果如下图:

Podman 创建启动容器

限制资源(CPU / 内存,避免资源占用过高)

Podman 提供了丰富的选项来限制容器对 CPU 和内存的资源占用,避免单个容器过度消耗宿主机资源,影响其他服务。

下面命令将对容器 CPU 核心和最大内存进行限制,更多用法请参考命令手册。

命令如下:

podman run -d --cpus 0.5 --memory 512m --name my-ubuntu ubuntu:24.04

选项说明:

  • --cpus 0.5:限制容器使用最多 0.5 个 CPU 核心。

  • --memory 512m:限制容器最大使用 512MB 内存。

注意,如果你采用的 rootless 模式运行上述命令,不支持限制,因此你设置的 --cpus 0.5 和 --memory 512m 选项被忽略了。如下图:

Podman 创建启动容器

到这里,podman 如何创建容器就介绍完了,更多信息可以阅读 podman run 命令帮助文档。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号