Podman开机自启容器实现过程及与Docker对比

目录
  • 1.podman介绍
  • 2.与docker相比的优势
  • 3.兼容性
  • 4.后台服务单元文件的优先级
  • 5.podman基本操作
    • 安装
    • 版本
    • 仓库
    • 命令帮助
    • 镜像加速器
    • 拉取镜像
  • 6.运行一个web容器
    • 后台启动一个web容器,并访问容器内容
    • 暂停与删除容器
  • 7.web容器设置开机自启
    • 后台运行一个web容器
    • 创建.service单元文件
    • 查看生成的单元文件
    • 删除刚才的容器
    • 设置开机自启

1.podman介绍

podman之前是CRI-O项目的一部分,后被分离成独立的项目libpod,libpod是一个创建容器pod的工具和库,podman是个无守护程序容器引擎,以root用户或无根模式运行,简而言之podman提供了一个docker-CLI的命令行,管理着容器

2.与docker相比的优势

docker劣势一:

docker大家都知道,其守护程序在多个核心上占用差不多高达100%cpu资源,采用C/S模型

podman优势一:

podman不需要守护进程,不需要root权限组,而且利用着用户命名空间(namespace)模拟容器中的root运行,采用fork/exec模型。

fork/exec模型相比C/S模型优势:

  • 系统管理员知道某个容器由谁启动
  • 利用cgroup对podman做限制,对应着创建的容器也会受到限制
  • systemd单元文件的生成,可以管理着任务的启动与关闭
  • socket激活,将socker从systemd发送给podman容器使用

3.兼容性

docker的功能大部分podman都是兼容的,也可以使用别名(alias)来写成docker的命令

4.后台服务单元文件的优先级

/usr/lib/systemd/user:优先级最低,会被优先级高的同名 unit 覆盖 ~/.local/share/systemd/user

/etc/systemd/user:全局共享的用户级 unit[s]

~/.config/systemd/user:优先级最高

5.podman基本操作

安装

#默认centos源
[root@slave02 ~]# yum -y  module install container-tools   #容器工具基于模块
[root@slave02 ~]# yum  -y install podman-docker            #安装docker兼容包(可选)

版本

[root@slave02 ~]# podman -v
podman version 3.3.0-dev

仓库

官方仓库:registry.access.redhat.com

第三方仓库:docker.io

私有仓库:registry.lab.example.com

命令帮助

[root@slave02 ~]# podman help|head -15
Manage pods, containers and images
Usage:
  podman [options] [command]
Available Commands:
  attach      Attach to a running container
  auto-update Auto update containers according to their auto-update policy
  build       Build an image using instructions from Containerfiles
  commit      Create new image based on the changed container  #基于修改的容器创建新的容器
  container   Manage containers
  cp          Copy files/folders between a container and the local filesystem
  create      Create but do not start a container
  diff        Display the changes to the object's file system
  events      Show podman events
....

镜像加速器

修改配置文件:/etc/containers/registries.conf 即可

注意:不能带有httpds//:url格式

[root@slave02 ~]# cp /etc/containers/registries.conf  /backup/registries.conf.back  #备份一下
[root@slave02 ~]# vim  /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"]           #非限定搜索登记处
[[registry]]
prefix = "docker.io"
location = "x"             #x是阿里加速镜像地址

拉取镜像

[root@slave02 ~]# podman pull nginx

6.运行一个web容器

后台启动一个web容器,并访问容器内容

#准备html页面内容
[root@192 ~]# cat /opt/webhtml/index.html
Go your own way, see your own scenery, surpass others without complacency, and be surpassed without losing ambition
#运行一个守护web容器进程,将/opt/webhtml目录内容映射到容器的/usr/share/nginx/html存放网页的位置
[root@192 ~]# podman run -d --name web -p 8888:80 -v /opt/webhtml:/usr/share/nginx/html nginx
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c
[root@podman ~]# curl 192.168.136.129:8888
Go your own way, see your own scenery, surpass others without complacency, and be surpassed without losing ambition
#容器的ip
[root@podman ~]# podman inspect web|grep IPAddress
"IPAddress": "10.88.0.6",
"IPAddress": "10.88.0.6",
#宿主机的ip
[root@podman ~]# ip r
192.168.136.0/24 dev ens33 proto kernel scope link src 192.168.136.129 metric 100
#由于进行了端口绑定,所以直接 curl 192.168.136.129:8888即可访问

进入后台web容器,查看服务状态

[root@podman ~]# podman exec -it  web bash
root@3528e6d5148b:/# service nginx status
[ ok ] nginx is running.                             #运行中

修改容器业务内容

#修改宿主机/opt/webhtml/index.html即可
[root@podman ~]# cat /opt/webhtml/index.html
Go your own way, see your own scenery, surpass others without complacency, and be surpassed without losing ambitionRHCAS
RHCE RHCA
#进行访问
[root@podman ~]# curl 192.168.136.129:8888
Go your own way, see your own scenery, surpass others without complacency, and be surpassed without losing ambitionRHCAS
RHCE RHCA
#进入容器查看内容是否修改
[root@podman ~]# podman exec -it web bash
root@3528e6d5148b:/# cat /usr/share/nginx/html/index.html
Go your own way, see your own scenery, surpass others without complacency, and be surpassed without losing ambitionRHCAS
RHCE RHCA

暂停与删除容器

#暂停
[root@podman ~]# podman stop web
web
[root@podman ~]# podman ps -a
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS                     PORTS                 NAMES
3528e6d5148b  docker.io/library/nginx:latest  nginx -g daemon o...  25 minutes ago  Exited (0) 16 seconds ago  0.0.0.0:8888->80/tcp  web
#删除
[root@podman ~]# podman rm web
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c
#或强制删除运行中的容器
[root@podman ~]# podman rm  -f web
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c

7.web容器设置开机自启

后台运行一个web容器

[root@podman ~]# podman run --name web -d -p 8080:80 -v /opt/webhtml:/usr/shar/nginx/html nginx
910db3ab6bd1ef18e5fd0afe1844912f0b89334b7b8ab758353a948a1b55282a

基于web容器,在优先级一般的/etc/systemd/system内

创建.service单元文件

[root@192 ~]# cd /etc/systemd/system/
[root@podman user]# podman generate systemd --
--container-prefix  (Systemd unit name prefix for containers)
--files             {生成.service文件,而不是打印到标准输出}
--format            (Print the created units in specified format (json)) #以指定的格式打印单元文件
--name              (Use container/pod names instead of IDs)  #创建新容器,而不是使用现有的容器
--new               (Create a new container instead of starting an existing one)#(跳过标头生成)
--no-header         (Skip header generation)
--pod-prefix        (Systemd unit name prefix for pods)
--restart-policy    (Systemd restart-policy)
--separator         (Systemd unit name separator between name/id and prefix)
--time              (Stop timeout override)
[root@192 system]# podman generate systemd --name web --files --new
/etc/systemd/system/container-web.service

查看生成的单元文件

[root@192 system]# cat container-web.service
# container-web.service
# autogenerated by Podman 3.3.0-dev                                 #podman 3.3.0-dev自动生成
# Tue Aug 17 13:03:13 CST 2021                                      #8月17日星期二13:03:13 CST 2021
[Unit]       #单元
Description=Podman container-web.service              #描述
Documentation=man:podman-generate-systemd(1)          #帮助以及生成的系统
Wants=network-online.target                           #网络
After=network-online.target
RequiresMountsFor=%t/containers                         #前面不重要直接跳过
[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure                  #故障时重新启动
TimeoutStopSec=70                   #超时时间
ExecStart=/usr/bin/podman run --sdnotify=conmon --cgroups=no-conmon --rm --replace --name web -d -p 8080:80 -v /opt/webhtml:/usr/shar/nginx/html nginx   #执行开始为/usr/bin/podman  运行刚才创建的容器
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target default.target

删除刚才的容器

[root@podman ~]# podman rm web
910db3ab6bd1ef18e5fd0afe1844912f0b89334b7b8ab758353a948a1b55282a
[root@podman ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

设置开机自启

[root@192 ~]# systemctl daemon-reload
[root@192 ~]# systemctl enable --now container-web.service
Created symlink /etc/systemd/system/multi-user.target.wants/container-web.service → /etc/systemd/system/container-web.service.
Created symlink /etc/systemd/system/default.target.wants/container-web.service → /etc/systemd/system/container-web.service.
[root@192 user]# podman ps -a
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                   NAMES
b0c7709cb00e  docker.io/library/nginx:latest  nginx -g daemon o...  15 seconds ago  Up 16 seconds ago  0.0.0.0:8080->80/tcp    web

无根root模式设置容器和上面这种方式大同小异

使用systemctl命令带上 --user 即可

#需要运行loginctl enable-linger命令,使用户服务在服务器启动时自动启动即可
[containers@serverb ~]$ loginctl enable-linger

以上就是Podman开机自启容器实现过程的详细内容,更多关于Podman开机自启容器的资料请关注我们其它相关文章!

(0)

相关推荐

  • 被弃用的 Docker 会被 Podman 取代吗

    Kubernetes 团队近日宣布将在最新版本中弃用 Docker 支持的功能,后续版本会陆续删除这些功能. 近日,Kubernetes 团队发布了最新的 1.20 版本,新版本更新了许多内容: 存储卷快照功能趋于稳定:Kubectl Debug 进入 Beta:Beta:API 优先级和公平性:IPV4/IPV6 Alpha 功能更新:GA:限制进程 PID:Dockershim 弃用:Exec 探针超时处理等等(详情可查看:https://kubernetes.io/blog/2020/12

  • Docker镜像分析工具dive原理解析

    今天推荐一个这样的开源工具,用于探索 Docker 镜像,各层内容以及发现缩小 Docker/OCI 镜像大小的方法.这个工具就是:dive. 工具地址:https://github.com/wagoodman/dive,Star 数:22k+. 这个工具可以清晰得看到镜像每一层都包含哪些内容,方便你分析是否有必要,如下图所示. 特性 该工具的主要特性包括: 按层显示 Docker 镜像内容: 指出每一层的变化: 评估 "镜像的效率": 快速的构建/分析周期: 和 CI 集成: 支持多

  • Podman开机自启容器实现过程及与Docker对比

    目录 1.podman介绍 2.与docker相比的优势 3.兼容性 4.后台服务单元文件的优先级 5.podman基本操作 安装 版本 仓库 命令帮助 镜像加速器 拉取镜像 6.运行一个web容器 后台启动一个web容器,并访问容器内容 暂停与删除容器 7.web容器设置开机自启 后台运行一个web容器 创建.service单元文件 查看生成的单元文件 删除刚才的容器 设置开机自启 1.podman介绍 podman之前是CRI-O项目的一部分,后被分离成独立的项目libpod,libpod是

  • cloudera manager 设置开机自启的方法

    最近在使用Cloudera manager管理hadoop集群.为了方便自动化管理,需要添加开机自动启动.从网上搜了一下,在一个安装教程中找到了一个方法.这里我用的是cloudera-manager-el5-cm5.3.2_x86_64.tar.gz进行的安装.所以默认是在/opt目录下面的. 解决方案: step1:复制启动脚本 将/opt/cm-5.3.2/etc/init.d/目录下的cloudera-scm-server服务器启动脚本和cloudera-scm-agent代理服务启动脚本

  • centos6.5服务器安装Nginx设置服务和开机自启的方法

    本文介绍了centos6.5服务器安装Nginx设置服务和开机自启的方法,分享给大家,也给自己留个笔记 1.安装Nginx及其依赖 首先是老套路,使用ssh链接服务器,还记得以前的代码吗? ssh -t 用户名@服务器IP或者域名 -p 22 <!--用户名一般是root,方便操作,我的登录代码如下--> ssh -t root@acheng1314.cn -p 22 在终端中输入上面命令按下回车,要求我们输入密码,这个密码是不可见的,所以一定要输入正确. 链接到服务器后,我们切换到常用的安装

  • python脚本开机自启的实现方法

    问题描述:将python脚本设置成开机自启. 环境:windows7 64位 前段时间,一直想把文件打包成exe文件,然后设置成开机自启,虽然感觉很装逼,但是使用pyinstaller打包成exe文件的历程却是非常坎坷,一改脚本或者导入一个新的库,打包就出现各种报错,各种问题,最后博主实在找不到解决办法之后放弃了,谁知突然间却看到有博客说能直接把py程序设成开机自启,真是开心,下面说明一下操作步骤: (1)首先,需要新建一个.bat文件(用来运行脚本),格式如下,红色部分为python脚本的位置

  • 解决linux ftp匿名上传、下载开机自启问题

    如果在平时学习,工作中经常使用 FTP 服务器 ,可以设置成开机自启,在设置之前要先了解几个关于自启的命令: 1.chkconfig 命令 主要作用:用于检查,设置系统的各种服务.其中有几个重要参数,先了解 --list ,chkconfig --list :列出 chkconfig 知道的所有命令,chkconfig 服务名 on /off :开启,关闭服务(一般是开机自启或是关闭) 2.检查是否设置 vsftpd 开机自启, chkconfig --list | grep vsftpd :"

  • Linux系统设置tomcat开机自启介绍

    1.进入到 /etc/init.d 目录中: cd /etc/init.d 2.创建 tomcat 服务配置文件:vi tomcat 3.将以下代码复制到创建的 tomcat 配置文件中: #idea - tomcat config start - 2016-05-01 #!/bin/bash # description: Tomcat Start Stop Restart # processname: tomcat # chkconfig: 2345 20 80 JAVA_HOME=/usr/

  • 容器化技术架构jenkins docker k8s脚本浅析

    目录 前言碎语 浅谈docker 浅谈k8s的部署脚本 最后聊聊jenkinspipeline 前言碎语 基于kubernetes容器化技术架构能够带来诸多好处,诸如,弹性伸缩,自动修复等,在比如蓝绿部署,灰度发布等.近几年容器化技术飞速发展,了解服务网格 的人可能会发现,新兴技术 istio 等service mesh技术没有容器化的技术环境根本就没法实践. 浅谈docker docker可以类比为jvm,jvm也是虚拟机,然后docker的image可以类比为jar包,jar运行在jvm里面

  • 国产开源数据库openGauss容器部署过程详解

    目录 前言 ️ 1.openGauss介绍 ️ 2.容器部署 ️ 3.opengauss操作 ️ 4.常用信息选项 前言 openGauss是一款开源的关系型数据库管理系统,融合了华为在数据库领域多年的内核经验 ️ 1.openGauss介绍 openGauss是一款开源的关系型数据库管理系统,它具有多核高性能.全链路安全性.智能运维等企业级特性. openGauss内核早期源自开源数据库PostgreSQL,融合了华为在数据库领域多年的内核经验,在架构.事务.存储引擎.优化器及ARM架构上进行

  • Web容器启动过程中如何执行Java类

    1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetProperties</listener-class> </listener> package com.xian.jdbc; public class GetProperties{ } //implements ServletContextListener 可实现servlet的监听则启动中直接运行输出

  • Docker部署Rabbitmq容器实现过程解析

    1.拉取镜像 首先执行如下命令将镜像下载到本地: 注意:rabbitmq 是官方镜像,该镜像不带控制台.如果想要安装带控制台的镜像,则需要在拉取镜像时附带 tag 标签,例如:rabbitmq:management. docker pull rabbitmq:management 2.创建挂载本地的data目录 mkdir -p /home/rabbitmq/data 3,启动容器 (1)执行如下命令实例化 RabbitMQ 服务: docker run --name rabbitmq -d -

随机推荐