• (转)Podman 新的一代Linux容器工具


    原文:https://blog.csdn.net/weixin_40826349/article/details/103649769

    一、简介

    Podman是一个开源项目,可在大多数Linux平台上使用并开源在GitHub上。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发,管理和运行Open Container Initiative(OCI)容器和容器镜像。Podman提供了一个与Docker兼容的命令行前端,它可以简单地作为Docker cli,简单地说你可以直接添加别名:alias docker = podman来使用podman。

    Podman控制下的容器可以由root用户运行,也可以由非特权用户运行。Podman管理整个容器的生态系统,其包括pod,容器,容器镜像,和使用libpod library的容器卷。Podman专注于帮助您维护和修改OCI容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建,运行和维护从这些映像创建的容器。

    Podman 官网地址:https://podman.io/

    Podman 项目地址:https://github.com/containers/libpod

    二、Podman和docker不同之处?

    1. docker需要在我们的系统上运行一个守护进程(docker daemon),而Podman不需要

    2. 启动容器的方式不同:

      docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLIchild process(子进程),而是Docker Enginechild process
      Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podmanchild process

    3. 因为docke有docker daemon,所以docker启动的容器支持--restart策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动

    4. docker需要使用root用户来创建容器,但是podman不需要

    三、Podman安装

    ## Fedora,Centos
    sudo yum -y install podman
    ## Arch Linux & Manjaro Linux
    sudo pacman -S podman
    ## Gentoo
    sudo emerge app-emulation/libpod
    ## MacOS
    brew cask install podman#
    podman version
    
    ## 配置阿里云镜像
    cp /etc/containers/registries.conf{,.bak}
    cat > /etc/containers/registries.conf << EOF
    unqualified-search-registries = ["docker.io"]
    
    [[registry]]
    prefix = "docker.io"
    location = "uyah70su.mirror.aliyuncs.com"
    EOF
    

    ## Fedora,Centos
    sudo yum -y install podman
    ## Arch Linux &amp; Manjaro Linux
    sudo pacman -S podman
    ## Gentoo
    sudo emerge app-emulation/libpod
    ## MacOS
    brew cask install podman#
    podman version

    ## 配置阿里云镜像
    cp /etc/containers/registries.conf{,.bak}
    cat > /etc/containers/registries.conf << EOF
    unqualified-search-registries = ["docker.io"]

    [[registry]]
    prefix = "docker.io"
    location = "uyah70su.mirror.aliyuncs.com"
    EOF

    四、Podman cli介绍

    Podman CLI 里面87%的指令都和DOcker CLI 相同,官方给出了这么个例子alias docker=podman,所以说经常使用DOcker CLI的人使用podman上手非常快

    五、案例

    # 拉取镜像
    > podman pull redis
    Copying blob 76e034b0f296 skipped: already exists
    Copying blob 000eee12ec04 skipped: already exists
    Copying blob 5cc53381c195 skipped: already exists
    Copying blob 48bb7bcb5fbf skipped: already exists
    Copying blob ef8a890bb1c2 skipped: already exists
    Copying blob 32ada9c6fb0d skipped: already exists
    Copying config dcf9ec9265 done
    Writing manifest to image destination
    Storing signatures
    dcf9ec9265e0d943152be903f573d9bea66d648f9cc65f6e6f26eb978d16e6c4
    # 查看本地镜像
    > podman images
    REPOSITORY                 TAG      IMAGE ID       CREATED        SIZE
    docker.io/library/redis    latest   dcf9ec9265e0   4 weeks ago    102 MB
    # 运行容器
    > podman run -d -p 6379:6379 --name redis redis redis-server --appendonly yes
    5485ba8457faaee33a1bf85c099c797443f6d36c7f97e5dd56a8de4047de864b
    # 查看运行的容器
    > podman ps
    CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                   NAMES
    5485ba8457fa  docker.io/library/redis:latest  docker-entrypoint...  38 seconds ago  Up 37 seconds ago  0.0.0.0:6379->6379/tcp  redis
    # 进入容器
    > podman exec -it redis /bin/bash
    # 停止容器
    > podman stop redis
    # 启动容器
    > podman start redis
    # 删除容器及删除镜像
    > podman rm redis
    > podman rmi redis
    
    ## docker使用习惯的,可配置别名
    > echo "alias docker=podman" >> .bashrc
    > source .bashrc
    > docker ps -a
    
    # 更多可参考官方文档及docker使用,常用命令87%与docker相似 
    > podman -help
    

    # 拉取镜像

    >podman pull redis

    Copying blob 76e034b0f296 skipped: already exists

    Copying blob 000eee12ec04 skipped: already exists

    Copying blob 5cc53381c195 skipped: already exists

    Copying blob 48bb7bcb5fbf skipped: already exists

    Copying blob ef8a890bb1c2 skipped: already exists

    Copying blob 32ada9c6fb0d skipped: already exists

    Copying config dcf9ec9265 done

    Writing manifest to image destination

    Storing signatures

    dcf9ec9265e0d943152be903f573d9bea66d648f9cc65f6e6f26eb978d16e6c4

    # 查看本地镜像

    > podman images

    REPOSITORY TAG IMAGE ID CREATED SIZE

    docker.io/library/redis latest dcf9ec9265e0 4 weeks ago 102 MB

    # 运行容器

    > podman run -d -p 6379:6379 --name redis redis redis-server --appendonly yes

    5485ba8457faaee33a1bf85c099c797443f6d36c7f97e5dd56a8de4047de864b

    # 查看运行的容器

    > podman ps

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    5485ba8457fa docker.io/library/redis:latest docker-entrypoint... 38 seconds ago Up 37 seconds ago 0.0.0.0:6379->6379/tcp redis

    # 进入容器

    > podman exec -it redis /bin/bash

    # 停止容器

    > podman stop redis

    # 启动容器

    > podman start redis

    # 删除容器及删除镜像

    > podman rm redis

    > podman rmi redis

    ## docker使用习惯的,可配置别名

    > echo "alias docker=podman" >> .bashrc

    > source .bashrc

    > docker ps -a

    # 更多可参考官方文档及docker使用,常用命令87%与docker相似

    > podman -help

    相关工具

    1.Buildah

    Buildah专注于构建OCI镜像。 Buildah的命令复制了Dockerfile中的所有命令。可以使用Dockerfiles构建镜像,并且不需要任何root权限。 Buildah的最终目标是提供更低级别的coreutils界面来构建图像。Buildah也支持非Dockerfiles构建镜像,可以允许将其他脚本语言集成到构建过程中。 Buildah遵循一个简单的fork-exec模型,不以守护进程运行,但它基于golang中的综合API,可以存储到其他工具中。虽然Podman也可以用户构建Docker镜像,单构建速度较慢。

    2.Skopeo

    Skopeo是一个工具,允许我们通过push,pull和复制镜像来处理Docker和OC镜像。

    Buildah构建容器,Podman运行容器,Skopeo传输容器镜像。

  • 相关阅读:
    NSIS制作安装程序
    poj_1011木棒
    hdoj_1312Red and Black
    搜索题目推荐及解题报告
    应届生就职前要读的几本书
    poj_1564Sum It Up
    priority_queue用法
    hdoj_2952Counting Sheep
    poj_1154LETTERS
    poj_2362
  • 原文地址:https://www.cnblogs.com/liujiacai/p/13629902.html
Copyright © 2020-2023  润新知