- 检查容器镜像
- 移除本地容器镜像
- 将容器主机端口映射到容器
- 停止、重新启动或删除容器
- 在运行中的容器中执行命令
- 从容器主机提供持久存储
- 感谢 💖
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 可以在正在运行的容器内挂载主机目录。容器化应用将这些主机目录视为容器存储的一部分,就像常规应用将远程网络卷视为主机文件系统的一部分一样。移除容器时,系统不会回收容器主机目录的内容。新容器可以挂载它以访问数据。
例如,数据库容器可以利用主机目录来存储数据库文件。如果这个数据库容器失败,则可使用同一主机目录创建新的容器,让数据库数据一直供客户端应用使用。存储此主机目录的数据库容器并不重要。它可以驻留在任何位置,从本地硬盘分区到远程网络文件系统均可。
我们可以按照以下步骤进行操作:
- 确保容器主机上存在要挂载的目录,并且具有适当的权限设置(包括目录的所有权和权限以及、适当的SELinux上下文)
- 添加
-v
(- -volume)选项到podman run
命令,并指定主机目录路径和容器存储路径,其中用冒号分隔。例如:
podman run -v /host/directory:/container/director image_name
- 如果要挂载整个目录或文件系统,而不仅仅是单个目录,可以使用 -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
感谢 💖
好啦,这次的分享就到这里,感谢大家看到这里🤞