使用Podman执行高级容器管理,包括端口映射和持久存储


hello大家好😊

检查容器镜像

将镜像下载到系统之前,可以查看镜像的相关信息。skopeo inspect 镜像完全名称 命令可检查注册表中的远程容器镜像,并显示它的相关信息

示例:

 skopeo inspect registry.redhat.io/rhe18/python-36

也可使用 podman inspect 镜像完全名称 命令检查本地存储的镜像信息。此命令提供的信息可能比 skopeo inspect 命令多

示例:

 podman inspect registry.redhat.io/rhe18/python-36

移除本地容器镜像

容器镜像不可变,也不会改变。这意味着旧镜像不会更新,因此,更新容器中的软件需要用新镜像替换旧镜像

使用podman rmi(remove image) 命令移出本地存储镜像

示例:

 podman rmi registry.redhat.io/rhe18/python-36

❗ 注意:若还有容器使用此镜像,我们则需要先删除使用此镜像的所有容器才能使用 podman rmi 来删除镜像

将容器主机端口映射到容器

当我们运行容器时,在新容器内会启动进程。这个进程可能是 Web 或数据库服务器等应用。这些应用可能需要通过网络与其他系统通信,因此可能需要进行配置。

要提供对容器的网络访问权限,客户端必须连接到容器主机上的端口,这些端口将网络流量传递到容器中的端口。

将容器主机上的网络端口映射到容器中的端口时,容器将接收发送到主机网络端口的网络流量

例如,可以将容器主机上的端口 8000 映射到容器上的端口 8080。容器可能正在运行侦听端口 8080的 httpd 进程。因此,发送到容器主机端口 8000 的流量将由容器中运行的 Web 服务器接收。

使用 -p 选项,通过 podman run 设置端口映射。它采用由两个冒号分隔的端口号,即容器主机上的端口,后面跟着容器中的端口。

示例:

 podman run -d -p 8000:8080 registry.redhat,io/rhel8/httpd-24

上述命令会从镜像创建一个容器,该容器在后台运行,并且将容器主机上的端口 8000 映射到容器中的端口 8080

我们可以使用 podman port 命令和容器ID或名称来列出其端口映射,也可使用 -a 选项列出使用中的所有端口映射

示例:

podman port -a

上述命令会列出容器主机上定义的所有端口映射

停止、重新启动或删除容器

创建和启动容器只是容器生命周期的第一步。容器的生命周期还包括停止、重新启动或删除容器。用户还可以检查容器状态和元数据以进行调试、更新或报告

  • 使用podman ps 命令列出运行中的容器。包括容器ID、用于启动容器的容器镜像、容器启动的日期和时间等等。加上 -a 选项会列出包括已停止的所有容器
  • 使用 podman stop 容器名称 命令正常停止运行中的容器
  • 使用 podman rm 容器名称 命令从主机中移除停止的容器。加上-f 选项会移除正在运行的容器
  • 使用 podman restart 命令重新启动已停止的容器。此命令利用与已停止容器相同的容器ID 创建一个新容器,该容器重复利用已停止容器的状态和文件系统

在运行中的容器中执行命令

使用 podman exec 命令,你可以在正在运行的容器中执行指定的命令。格式为:podman exec [选项] <容器ID/名称> <命令>

例如,要在名为 my-container 的容器中执行 ls 命令,可以使用以下命令:

podman exec my-container ls

❗ 注意,podman exec 命令只能在已经运行的容器中执行命令

我们同样可以以-it选项打开交互式会话

示例:

podman exec -it my_container /bin/bash

从容器主机提供持久存储

容器中的存储具有临时性,这意味着移除容器后,其内容会丢失。
如果容器重新启动时必须保留容器所使用的数据,则临时存储就不够了。例如,你的容器可能是数据库服务器,当容器重新启动时,你必须保留数据库本身。要支持有此要求的容器化应用,必须为容器提供持久存储

为容器提供持久存储的一种简单方式是使用容器主机上的目录来存储数据。Podman 可以在正在运行的容器内挂载主机目录。容器化应用将这些主机目录视为容器存储的一部分,就像常规应用将远程网络卷视为主机文件系统的一部分一样。移除容器时,系统不会回收容器主机目录的内容。新容器可以挂载它以访问数据。
例如,数据库容器可以利用主机目录来存储数据库文件。如果这个数据库容器失败,则可使用同一主机目录创建新的容器,让数据库数据一直供客户端应用使用。存储此主机目录的数据库容器并不重要。它可以驻留在任何位置,从本地硬盘分区到远程网络文件系统均可。

我们可以按照以下步骤进行操作:

  1. 确保容器主机上存在要挂载的目录,并且具有适当的权限设置(包括目录的所有权和权限以及、适当的SELinux上下文)
  2. 添加 -v (- -volume)选项到 podman run 命令,并指定主机目录路径和容器存储路径,其中用冒号分隔。例如:
podman run -v /host/directory:/container/director image_name
  1. 如果要挂载整个目录或文件系统,而不仅仅是单个目录,可以使用 -v 参数加上冒号 : 后面跟着 ro 或 rw 来指定只读 (ro) 或可读写 (rw) 的权限。同样,后跟:Z ,会自动将SELinux container_file_t上下文类型应用到主机目录
    例如,要将 MariaDB 数据库文件的 /home/user/dbfiles 主机目录用作容器内的 /var/lib/mysql,可使用以下命令:

-e 选项用于将环境变量传递到容器内的进程

 podman run -d -name mydb -v /home/user/dbfiles:/var/lib/mysql:z \
 -e MYSOL_USER=user -e MYSOL_PASSWORD=redhat \ 
 -e MYSOL_DATABASE=inventory registry.redhat.io/rhel8/mariadb-103:1-102

感谢 💖

好啦,这次的分享就到这里,感谢大家看到这里🤞

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当涉及到大数据应用程序的容器化时,通常需要使用多个容器来构建整个系统。以下是一个示例`docker-compose.yml`文件,其中包含一些常见的大数据相关容器: ```yaml version: '3' services: namenode: image: sequenceiq/hadoop-docker:2.7.1 container_name: namenode ports: - "50070:50070" volumes: - ./hadoop-namenode:/hadoop/dfs/name command: /etc/bootstrap.sh -d namenode datanode: image: sequenceiq/hadoop-docker:2.7.1 container_name: datanode volumes: - ./hadoop-datanode:/hadoop/dfs/data environment: - CORE_CONF_fs_defaultFS=hdfs://namenode:8020 command: /etc/bootstrap.sh -d datanode resourcemanager: image: sequenceiq/hadoop-docker:2.7.1 container_name: resourcemanager ports: - "8088:8088" environment: - YARN_CONF_yarn_resourcemanager_hostname=resourcemanager - YARN_CONF_yarn_resourcemanager_webapp_address=resourcemanager:8088 - YARN_CONF_yarn_resourcemanager_address=resourcemanager:8032 command: /etc/bootstrap.sh -d resourcemanager nodemanager: image: sequenceiq/hadoop-docker:2.7.1 container_name: nodemanager environment: - CORE_CONF_fs_defaultFS=hdfs://namenode:8020 - YARN_CONF_yarn_resourcemanager_hostname=resourcemanager command: /etc/bootstrap.sh -d nodemanager historyserver: image: sequenceiq/hadoop-docker:2.7.1 container_name: historyserver environment: - CORE_CONF_fs_defaultFS=hdfs://namenode:8020 - YARN_CONF_yarn_resourcemanager_hostname=resourcemanager command: /etc/bootstrap.sh -d historyserver spark-master: image: bde2020/spark-master:3.1.1-hadoop3.2 container_name: spark-master ports: - "8080:8080" environment: - SPARK_MODE=master command: /bin/bash entrypoint.sh spark-worker: image: bde2020/spark-worker:3.1.1-hadoop3.2 container_name: spark-worker environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark-master:7077 command: /bin/bash entrypoint.sh kafka: image: wurstmeister/kafka:2.12-2.1.0 container_name: kafka ports: - "9092:9092" environment: - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 depends_on: - zookeeper zookeeper: image: wurstmeister/zookeeper:3.4.6 container_name: zookeeper ports: - "2181:2181"

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值