Docker 与 Podman常用知识汇总

news2025/5/10 10:14:29

一、常用命令的对比汇总

1、基础说明

  • Docker:传统的容器引擎,使用 dockerd 守护进程。

  • Podman:无守护进程、无root容器引擎,兼容 Docker CLI。

Podman 命令几乎完全兼容 Docker 命令,只需将 docker 替换为 podman

2、命令对比总表

1. 镜像管理(Images)

功能Docker 命令Podman 命令说明示例
拉取镜像docker pullpodman pull从远程仓库拉取镜像docker pull nginx
查看镜像docker imagespodman images列出本地镜像podman images
删除镜像docker rmipodman rmi删除本地镜像docker rmi nginx
构建镜像docker buildpodman build根据 Dockerfile 构建镜像docker build -t myapp .

2. 容器管理(Containers)

功能Docker 命令Podman 命令说明示例
运行容器docker runpodman run运行新容器docker run -d -p 80:80 nginx
查看容器docker pspodman ps查看运行中容器podman ps
查看所有容器docker ps -apodman ps -a包含已停止容器podman ps -a
停止容器docker stoppodman stop停止容器运行docker stop mycontainer
启动容器docker startpodman start启动已停止容器podman start mycontainer
删除容器docker rmpodman rm删除容器docker rm mycontainer
查看容器日志docker logspodman logs查看容器输出docker logs mycontainer
进入容器docker exec -itpodman exec -it在容器中执行命令docker exec -it mycontainer bash

3. 镜像仓库与标签(Registry & Tags)

功能Docker 命令Podman 命令说明示例
给镜像打标签docker tagpodman tag添加镜像别名docker tag nginx myrepo/nginx:latest
推送镜像docker pushpodman push上传镜像到远程仓库docker push myrepo/nginx
登录仓库docker loginpodman login登录远程仓库podman login registry.example.com

4. 容器网络(Networking)

功能Docker 命令Podman 命令说明示例
创建网络docker network createpodman network create创建自定义网络docker network create mynet
查看网络docker network lspodman network ls显示可用网络podman network ls
删除网络docker network rmpodman network rm删除自定义网络docker network rm mynet

5. 容器卷(Volumes)

功能Docker 命令Podman 命令说明示例
创建卷docker volume createpodman volume create创建数据卷docker volume create myvol
查看卷docker volume lspodman volume ls列出所有卷podman volume ls
删除卷docker volume rmpodman volume rm删除数据卷podman volume rm myvol
挂载卷运行容器docker run -vpodman run -v挂载卷到容器docker run -v myvol:/data nginx

6. 容器导入导出(Import/Export)

功能Docker 命令Podman 命令说明示例
导出容器docker exportpodman export导出容器文件系统为 tar 包docker export mycontainer > mycontainer.tar
导入容器docker importpodman import从 tar 文件导入镜像docker import mycontainer.tar
保存镜像docker savepodman save保存镜像为 tar 包docker save nginx > nginx.tar
加载镜像docker loadpodman load从 tar 包加载镜像docker load < nginx.tar

7. 容器信息与检查(Inspect)

功能Docker 命令Podman 命令说明示例
检查镜像/容器详情docker inspectpodman inspect查看对象详细信息docker inspect mycontainer

 8. 系统资源(System)

功能Docker 命令Podman 命令说明示例
清理无用资源docker system prunepodman system prune清理未使用镜像、容器等podman system prune -a
查看磁盘使用docker system dfpodman system df显示容器磁盘使用情况docker system df
查看版本docker versionpodman version查看当前版本podman version
查看系统信息docker infopodman info显示系统整体信息podman info

9. Podman 专属命令

功能Podman 命令说明示例
创建 podpodman pod create创建一组共享网络和命名空间的容器组podman pod create --name mypod
将容器加入 podpodman run --pod运行容器加入已有 podpodman run --pod=mypod nginx
查看 podpodman pod ps显示当前 podspodman pod ps
删除 podpodman pod rm删除 podpodman pod rm mypod

3、总结

  • Docker 是工业标准,支持广泛,适合多数部署环境。

  • Podman 更安全、无 root、支持 systemd 集成,更适合企业和开发环境的细粒度管理。

二、 网络知识

1、基本网络原理

Docker 与 Podman 网络模型对比:

特性Docker 默认Podman 默认
网络驱动bridge、host、overlay、macvlan 等CNI(Container Network Interface)
网络隔离机制使用 docker0 网桥,iptables/NAT 规则管理使用 CNI 插件(同 Kubernetes 网络方式)
默认网段172.17.0.0/16通常为 10.88.0.0/16(由 CNI 配置)
服务暴露方式-p 端口映射 或 host 网络同样使用 -p--network=host
网络可管理性Docker 自带命令管理网络Podman 借助 CNI 插件配置,如 netavark

2、Docker 网络原理

1. Docker 默认网络

运行 docker network ls 可看到:

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b6509f3a0fd6   bridge    bridge    local
65a3c49f9fd3   host      host      local
5d6785e4d07b   none      null      local
  • bridge:默认,容器间可通信,外部需端口映射。

  • host:使用主机网络,容器与宿主机共享网络。

  • none:无网络连接,最安全但最孤立。

2. 容器连接到网络

docker run --name web --network bridge -p 8080:80 nginx
  • --network 连接到指定网络

  • -p 映射主机端口到容器端口

3. 创建自定义网络

docker network create mynet
docker run --rm -it --network=mynet busybox
  • 容器可通过名称互相解析(DNS 支持) 

3、Podman 网络原理

1. Podman 使用 CNI 插件

默认使用 /etc/cni/net.d/ 下的配置文件(如 87-podman-bridge.conflist)定义网络:

{
  "cniVersion": "0.4.0",
  "name": "podman",
  "plugins": [
    {
      "type": "bridge",
      "bridge": "cni-podman0",
      "ipam": {
        "type": "host-local",
        "subnet": "10.88.0.0/16"
      }
    }
  ]
}

 2. 查看 Podman 网络

podman network ls

3. 启动容器并使用网络

podman run -d --name web --network podman -p 8080:80 nginx

Podman 会自动创建 cni-podman0 网桥并配置 NAT、防火墙规则。

4、进阶:自定义网络

Docker 自定义网络(桥接)

docker network create \
  --driver bridge \
  --subnet=192.168.100.0/24 \
  --gateway=192.168.100.1 \
  custom_net

Podman 自定义网络

podman network create \
  --subnet 192.168.200.0/24 \
  --gateway 192.168.200.1 \
  custom_net

 然后运行容器:

podman run --rm -it --network custom_net alpine

5、常见场景与命令总结

场景Docker 命令Podman 命令
查看网络docker network lspodman network ls
创建网络docker network createpodman network create
查看容器 IPdocker inspectpodman inspect
使用 host 网络--network host--network host
显示网络配置/etc/docker/daemon.json/etc/cni/net.d/

6、实用建议

  1. 开发环境:建议使用 bridge + 端口映射。

  2. 生产环境

    • 高性能需求:使用 --network=host

    • 多容器通信:创建自定义网络,容器间通过 DNS 名称通信

  3. 安全需求:使用 --network=none,禁用网络

7、常见容器网络架构

容器可以创建多种网络架构,这些架构决定了容器如何与其他容器以及外部网络进行通信。以下是一些常见的容器网络架构及其特点:

1. Bridge 网络(默认模式)

  • 架构原理:
    • 容器运行时(如 Docker)会在宿主机上创建一个虚拟的以太网桥(通常命名为 docker0)。
    • 每个容器启动时,都会创建一对虚拟网络接口(veth pair)。其中一个接口位于容器的网络命名空间中(例如 eth0),另一个接口连接到宿主机上的桥接网络。
    • 宿主机上的桥接网络负责在连接到它的所有网络接口(包括容器的虚拟接口和宿主机的物理网卡)之间转发数据包。
    • 容器通过桥接网络的私有 IP 地址进行通信。
    • 当容器需要访问外部网络时,通常会通过宿主机的网络地址转换(NAT)将容器的私有 IP 地址转换为宿主机的 IP 地址,然后通过宿主机的物理网卡进行通信。
  • 特点:
    • 隔离性好: 每个容器拥有独立的网络命名空间和私有 IP 地址,相互之间默认是隔离的。
    • 易于管理: 这是最简单和最常用的网络模式,容器运行时会自动创建和管理桥接网络。
    • 端口映射: 要使外部网络能够访问容器内的服务,需要进行端口映射(Port Mapping),将宿主机上的某个端口映射到容器内的端口。
    • 容器间通信: 同一个桥接网络上的容器可以直接通过 IP 地址进行通信。
    • 外部访问限制: 默认情况下,外部网络无法直接访问容器,需要通过端口映射才能实现。

2. Host 网络

  • 架构原理:
    • 容器直接共享宿主机的网络命名空间。
    • 容器不会创建自己的虚拟网络接口,而是直接使用宿主机的网络接口和 IP 地址。
    • 容器内的服务监听的端口直接暴露在宿主机上,无需进行端口映射。
  • 特点:
    • 性能高: 由于容器直接使用宿主机的网络栈,避免了额外的虚拟化开销,网络性能相对较高。
    • 端口冲突风险: 同一台宿主机上的多个容器不能监听相同的端口,因为它们共享同一个网络命名空间。
    • 隔离性差: 容器与宿主机共享网络环境,隔离性较差。
    • 配置简单: 无需进行端口映射,配置相对简单。
  • 适用场景:
    • 对网络性能要求较高的场景。
    • 只需要运行单个需要特定端口的服务,且不需要与其他容器隔离网络的情况。

3. Macvlan/IPVlan 网络

  • 架构原理:
    • 允许为容器分配宿主机物理网络接口上的 MAC 地址和 IP 地址。
    • 每个容器在物理网络上看起来就像一个独立的物理设备。
    • Macvlan: 基于单个物理接口创建多个虚拟接口,每个接口拥有独立的 MAC 地址。
    • IPVlan: 允许多个虚拟接口共享同一个 MAC 地址,但拥有不同的 IP 地址。
  • 特点:
    • 直接接入物理网络: 容器可以直接与物理网络中的其他设备通信,无需 NAT 或端口映射。
    • 更好的兼容性: 对于某些需要直接与物理网络交互的应用(例如某些网络设备或监控工具)非常有用。
    • 需要网络支持: 可能需要在物理网络交换机上进行额外的配置(例如允许混杂模式)。
    • 管理复杂性: 配置和管理相对复杂。
  • 适用场景:
    • 需要容器在物理网络中拥有独立身份的场景。
    • 需要容器直接与物理网络中的设备进行通信的场景。

4. Overlay 网络

  • 架构原理:
    • 构建在现有网络之上的虚拟网络。
    • 允许多个宿主机上的容器在逻辑上属于同一个网络,即使它们在不同的物理网络中。
    • 通常使用隧道技术(例如 VXLAN)将不同宿主机上的容器网络连接起来。
  • 特点:
    • 跨主机通信: 使得部署在不同宿主机上的容器能够像在同一个局域网中一样进行通信。
    • 灵活的网络拓扑: 可以创建复杂的网络拓扑结构。
    • 适用于微服务架构: 非常适合跨多个主机部署的微服务应用。
    • 管理复杂性: 配置和管理相对复杂,通常需要专门的网络编排工具(例如 Docker Swarm 或 Kubernetes)。
  • 适用场景:
    • 需要跨多个宿主机部署容器化应用的场景。
    • 需要构建复杂的、可扩展的容器网络拓扑的场景。

5. Custom 网络

  • 架构原理:
    • 用户可以根据自己的需求创建自定义的网络。
    • 可以是自定义的桥接网络,也可以是使用第三方网络插件创建的网络(例如 Calico、Flannel、Weave Net 等)。
  • 特点:
    • 高度灵活性: 可以根据具体需求定制网络配置,例如指定 IP 地址范围、子网、网关等。
    • 可扩展性: 可以通过第三方网络插件扩展容器网络的功能,例如网络策略、安全控制等。
    • 管理复杂性: 配置和管理取决于自定义网络的类型和所使用的工具。
  • 适用场景:
    • 需要特定的网络配置或功能的场景。
    • 需要集成第三方网络解决方案的场景。

选择哪种网络架构取决于你的具体需求,包括:

  • 容器之间的隔离要求
  • 容器是否需要直接暴露给外部网络
  • 是否需要跨多个宿主机进行容器通信
  • 对网络性能的要求
  • 管理的复杂性

三、在 PVE 虚拟网络下配置 Docker(或Podman) 网络桥

1、场景目标

  • Docker 容器运行在 PVE 中的 VM;

  • 每个容器拥有独立内网 IP,可被其他主机访问;

  • 网络桥使用 Proxmox 提供的桥(如 vmbr0);

  • 可选:静态 IP、DHCP、容器间通信。 

2、PVE 虚拟机网络准备

假设:

  • 宿主机 PVE 的桥接网卡为 vmbr0

  • 它连接到内网的物理交换机;

  • 容器网络希望使用该网桥,以获得和宿主一样的内网地址(如 192.168.1.x)。

在 PVE 中创建网桥:

/etc/network/interfaces 中应有类似配置:

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    bridge_ports enp3s0
    bridge_stp off
    bridge_fd 0

3、Docker 使用 macvlan 桥接到 vmbr0

1. 创建 macvlan 网络(桥接到宿主网卡)

在宿主机(VM 内部)执行:

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  docker_macvlan
  • parent=eth0 为 VM 的网卡设备,需根据实际替换;

  • 此网卡需支持混杂模式(Proxmox 网桥需设置 bridge_ports 启用混杂模式);

  • 子网和网关请根据你的内网实际情况配置。

📌 重要提醒:macvlan 网络的容器无法直接访问宿主机(除非用额外配置)。

2. 使用该网络启动容器

docker run --rm -d \
  --name nginx_mac \
  --network docker_macvlan \
  --ip 192.168.1.88 \
  nginx
  • 容器将直接获得 192.168.1.88,和内网其他设备互通。 

4、Podman 使用 macvlan 桥接(类似)

podman network create \
  --driver macvlan \
  --subnet 192.168.1.0/24 \
  --gateway 192.168.1.1 \
  --macvlan eth0 \
  podman_macvlan

 然后运行:

podman run --rm -d \
  --network podman_macvlan \
  --ip 192.168.1.89 \
  nginx

5、让容器访问宿主机(可选)

由于 macvlan 本质上“隔离”了宿主机,可添加一个额外的 veth 接口桥接:

步骤如下(高级):

  1. 创建一个额外接口桥接到宿主;

  2. 配置 NAT 或 static route;

  3. 或者在 PVE 中启用 macvtap 并使用虚拟交换机。 

6、总结:PVE + Docker 网络桥配置方案

项目方法是否推荐
Bridge 桥接到 vmbr0使用 macvlan✅ 推荐
宿主可访问容器使用 veth + bridge⚠️ 需额外配置
容器独立 IP是(可访问内网)
支持 DHCP 分配否(需静态 IP)⚠️ 限制
容器间通信支持(同一 macvlan 网络)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2335417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Large Language Model(LLM)的训练和微调

之前一个偏工程向的论文中了&#xff0c;但是当时对工程理论其实不算很了解&#xff0c;就来了解一下 工程流程 横轴叫智能追寻 竖轴上下文优化 Prompt不行的情况下加shot(提示)&#xff0c;如果每次都要加提示&#xff0c;就可以试试知识库增强检索来给提示。 如果希望增强…

统计销量前十的订单

传入参数&#xff1a; 传入begin和end两个时间 返回参数 返回nameList和numberList两个String类型的列表 controller层 GetMapping("/top10")public Result<SalesTop10ReportVO> top10(DateTimeFormat(pattern "yyyy-MM-dd") LocalDate begin,Dat…

AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理

AI大模型原理可视化工具&#xff1a;深入浅出理解大语言模型的工作原理 在人工智能快速发展的今天&#xff0c;大语言模型&#xff08;如GPT、BERT等&#xff09;已经成为改变世界的重要技术。但对于很多人来说&#xff0c;理解这些模型的工作原理仍然是一个挑战。为了帮助更多…

qt designer 创建窗体选择哪种屏幕大小

1. 新建窗体时选择QVGA还是VGA 下面这个图展示了区别 这里我还是选择默认&#xff0c;因为没有特殊需求&#xff0c;只是在PC端使用

Spark-SQL核心编程(一)

一、Spark-SQL 基础概念 1.定义与起源&#xff1a;Spark SQL 是 Spark 用于结构化数据处理的模块&#xff0c;前身是 Shark。Shark 基于 Hive 开发&#xff0c;提升了 SQL-on-Hadoop 的性能&#xff0c;但因对 Hive 依赖过多限制了 Spark 发展&#xff0c;后被 SparkSQL 取代&…

AI与无人驾驶汽车:如何通过机器学习提升自动驾驶系统的安全性?

引言 想象一下&#xff0c;在高速公路上&#xff0c;一辆无人驾驶汽车正平稳行驶。突然&#xff0c;前方的车辆紧急刹车&#xff0c;而旁边车道有一辆摩托车正快速接近。在这千钧一发的瞬间&#xff0c;自动驾驶系统迅速分析路况&#xff0c;判断最安全的避险方案&#xff0c;精…

第5篇:Linux程序访问控制FPGA端LEDR<三>

Q&#xff1a;如何具体设计.c程序代码访问控制FPGA端外设&#xff1f; A&#xff1a;以控制DE1-SoC开发板的LEDR为例的Linux .C程序代码。头文件fcntl.h和sys/mman.h用于使用/dev/mem文件&#xff0c;以及mmap和munmap内核函数&#xff1b;address_map_arm.h指定了DE1-SoC_Com…

城市应急安防系统EasyCVR视频融合平台:如何实现多源视频资源高效汇聚与应急指挥协同

一、方案背景 1&#xff09;项目背景 在当今数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;视频监控和应急指挥系统在公共安全、城市应急等领域的重要性日益凸显。尤其是在关键场所&#xff0c;高效的视频资源整合与传输能力对于应对突发公共事件、实现快速精准的…

【笔记ing】AI大模型-03深度学习基础理论

神经网络&#xff1a;A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神经网络是神经元的网络或回路&#xff0c;或者在现在意义上来说&#xff0c;是一个由人工神经元或节…

07软件测试需求分析案例-修改用户信息

修改用户信息是后台管理菜单的一个功能模块&#xff0c;只有admin才有修改权限。包括查询用户名进行显示用户相关信息&#xff0c;并且修改用户相关信息的功能。 1.1 通读文档 通读需求规格说明书是提取信息&#xff0c;提出问题&#xff0c;输出具有逻辑、规则、流程的业务…

设计模式 --- 状态模式

状态模式​​是一种​​行为型设计模式​​&#xff0c;允许对象在内部状态改变时动态改变其行为​​&#xff0c;使对象的行为看起来像是改变了。该模式通过将状态逻辑拆分为独立类​​&#xff0c;消除复杂的条件分支语句&#xff0c;提升代码的可维护性和扩展性。 状态模式的…

深入剖析Go Channel:从底层原理到高阶避坑指南|Go语言进阶(5)

文章目录 引言channel的底层数据结构channel操作原理发送操作(ch <- data)接收操作(<-ch) 常见陷阱及避坑指南1. 死锁问题2. 关闭channel的错误方式3. 内存泄漏4. nil channel特性5. 性能考量 最佳实践总结 引言 Channel是Go语言实现CSP并发模型的核心机制&#xff0c;提…

OpenCV 图形API(31)图像滤波-----3x3 腐蚀操作函数erode3x3()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用3x3矩形结构元素腐蚀图像。 该函数通过使用中心作为锚点的3x3矩形结构元素来腐蚀源图像。腐蚀操作可以应用多次&#xff08;迭代&#xff0…

AI Agent开发大全第二十八课-MCP实现本地命令调用怎么做的?

开篇 MCP很强大,Client端一旦实现了稳定的连接和执行流程后任Server端随意改动都可兼容,这就是热插拨功能。 如果我们仅仅满足于MCP查点网上资料、读点图片即文字型的功能肯定是不能充分发挥MCP的强大之处的,正应了Google以及Anthropic最近的研究报告上说的:不要再在chat…

A2A协议实现详解及示例

A2A协议概述 A2A (Agent2Agent) 是Google推出的一个开放协议&#xff0c;旨在使AI智能体能够安全地相互通信和协作。该协议打破了孤立智能体系统之间的壁垒&#xff0c;实现了复杂的跨应用自动化。[1] A2A协议的核心目标是让不同的AI代理能够相互通信、安全地交换信息以及在各…

活动图与流程图的区别与联系:深入理解两种建模工具

目录 前言1. 活动图概述1.1 活动图的定义1.2 活动图的基本构成要素1.3 活动图的应用场景 2. 流程图概述2.1 流程图的定义2.2 流程图的基本构成要素2.3 流程图的应用场景 3. 活动图与流程图的联系4. 活动图与流程图的区别4.1 所属体系不同4.2 表达能力差异4.3 使用目的与语境4.4…

图片文本识别OCR+DeepSeekapi实现提取图片关键信息

用到的技术&#xff1a; 通过腾讯OCR文字识别&#xff0c;deepseek的api实现 目录 需求分析&#xff1a; 文字识别&#xff08;OCR&#xff09;具体实现步骤 起步工作 代码编写 deepseek整合消息&#xff0c;返回文本关键信息 起步工作 编写工具类 具体调用实现 具体…

go 通过汇编分析函数传参与返回值机制

文章目录 概要一、前置知识二、汇编分析2.1、示例2.2、汇编2.2.1、 寄存器传值的汇编2.2.2、 栈内存传值的汇编 三、拓展3.1 了解go中的Duff’s Device3.2 go tool compile3.2 call 0x46dc70 & call 0x46dfda 概要 在上一篇文章中&#xff0c;我们研究了go函数调用时的栈布…

解决Ubuntu Desktop 24.04 VMware中安装后不能全屏显示,只能居中的问题

Ubuntu Desktop 24.04 VMware中安装后不能全屏显示&#xff0c;只能居中。 sudo apt-get install open-vm-tools sudo apt-get install open-vm*

【笔记ing】AI大模型-04逻辑回归模型

一个神经网络结构&#xff0c;其中的一个神经网络层&#xff0c;本质就是一个逻辑回归模型 深度神经网络的本质就是多层逻辑回归模型互相连接或采用一定的特殊连接的方式连接在一起构成的。其中每一个层本质就是一个逻辑回归模型。 逻辑回归模型基本原理 逻辑回归&#xff0…