podman初試行-dockerと比較


podman初試行-dockerと比較
1、dockerとは何ですか.
Dockerはオープンソースのアプリケーションコンテナエンジンで、Linuxコンテナのパッケージに属しています.Dockerは簡単で使いやすいコンテナ使用インタフェースを提供し、開発者がアプリケーションをパッケージ化し、移植可能なコンテナに依存してパッケージ化し、流行のLinuxマシンに公開することができます.容器は完全に砂箱メカニズムを使用しており、互いに何のインターフェースもありません.
2 Podmanとは何ですか.
Podmanはオープンソースのコンテナランタイムプロジェクトで、ほとんどのLinuxプラットフォームで使用できます.PodmanはDockerと非常に似た機能を提供しています.前述したように、システム上でデーモンプロセスを実行する必要はありません.root権限なしで実行することもできます.Podmanは、OCI(Open Container Initiative)仕様に準拠するコンテナおよびコンテナミラーを管理および実行できます.Podmanは、Dockerミラーを管理するためにDockerと互換性のあるコマンドラインフロントエンドを提供します.
  • Podman公式サイトアドレス:https://podman.io/
  • Podmanプロジェクトアドレス:https://github.com/containers/libpod

  • 3,Podmanとdockerの違いは?
  • dockerは、私たちのシステム上でデーモンプロセス(docker daemon)を実行する必要がありますが、podmanは
  • を必要としません.
  • コンテナを起動する方法は異なります.docker cliコマンドは、APIを介してDocker Engine( )とインタラクティブにcontainerを作成したいと伝え、docker EngineOCI container runtime(runc)を呼び出してcontainerを起動します.これはcontainerのprocess(プロセス)がDocker CLIchild process( )ではなく、Docker Enginechild processであることを意味する.Podmanは、containerを作成するためにOCI containner runtime(runc)に直接対話するので、container processpodmanchild processに直接作用する.
  • dockeにはdocker daemonがあるので、dockerが起動したコンテナは--restartポリシーをサポートしていますが、podmanはサポートしていません.k 8 sでこの問題がなければ、podの再起動ポリシーを設定することができます.システムではシステムdサービスを記述して自己起動
  • を完了することができます.
  • dockerはrootユーザーを使用してコンテナを作成する必要がありますが、podmanは
  • を必要としません.
    4,podmanのインストール
    4.1,Arch Linux & Manjaro Linux
    sudo pacman -S podman

    4.2,Fedora,Centos
    sudo yum -y install podman

    4.3,Gentoo
    sudo emerge app-emulation/libpod

    4.4,MacOS
    brew cask install podman

    5,Podman CLI紹介
    Podman CLIの87%の命令はDOcker CLIと同じで、公式にはこのような例alias docker=podmanが与えられているので、DOcker CLIをよく使う人はpodmanを使うのがとても速いと言われています.
    コンテナの実行
    podman run -dt -p 80:80 --name nginx -v /data:/data -e NGINX_VERSION=1.16 nginx:1.16.0

    現在のすべてのコンテナを一覧表示
    # podman  ps -a
    CONTAINER ID  IMAGE                                       COMMAND               CREATED            STATUS             PORTS               NAMES
    19f105d5dc1e  docker.io/library/nginx:1.16.0              nginx -g daemon o...  2 minutes ago      Up 2 minutes ago   0.0.0.0:80->80/tcp  nginx

    ミラー情報の表示
    # podman inspect nginx  | grep -i "ipaddress"
                "SecondaryIPAddresses": null,
                "IPAddress": "10.88.0.110",

    コンテナ実行ログの表示
    podman logs   nginx

    実行中のコンテナリソースの使用状況の表示
    # podman  top nginx
    USER    PID   PPID   %CPU    ELAPSED           TTY     TIME   COMMAND
    root    1     0      0.000   5m26.420969043s   pts/0   0s     nginx: master process nginx -g daemon off;
    nginx   6     1      0.000   5m26.421085502s   pts/0   0s     nginx: worker process
    
    # podman  stats nginx
    ID             NAME    CPU %   MEM USAGE / LIMIT   MEM %   NET IO           BLOCK IO   PIDS
    19f105d5dc1e   nginx   --      2.036MB / 1.893GB   0.11%   978B / 10.55kB   -- / --    2

    コンテナの移動
    Podmanは、コンテナを1つのマシンから別のマシンに移行することをサポートします.まず、ソースマシンでコンテナにチェックポイントを設定し、コンテナを指定した位置にパッケージします.
    $ sudo podman container checkpoint  -e /tmp/checkpoint.tar.gz
    $ scp /tmp/checkpoint.tar.gz :/tmp

    次に,ターゲットマシンでソースマシンから転送されたパッケージファイルを用いてコンテナを復元する.
    $ sudo podman container restore -i /tmp/checkpoint.tar.gz

    podmanのプログラムはどのように自己起動を設定します
    Podmanはデーモン管理サービスを使用しないため、デーモンによってコンテナを自動的に再起動する機能は実現できません.では、電源を入れて自動的に容器を再起動するには、どうすればいいのでしょうか.実は方法は簡単で、今では多くのシステムがシステムdをデーモンプロセス管理ツールとして採用しています.ここではSystemdを使用してPodmanの起動再起動コンテナを実現することができます.ここでは、さっき起動したnginxを例に挙げます.Systemdサービスプロファイルを作成します.
    $ vim /etc/systemd/system/nginx_podman.service
    
    [Unit]
    Description=Podman Nginx Service
    After=network.target
    After=network-online.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/podman start -a nginx
    ExecStop=/usr/bin/podman stop -t 10 nginx
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    次に、このSystemdサービスを有効にします.
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable nginx_podman.service
    $ sudo systemctl start nginx_podman.service

    その後、システムが再起動するたびにSystemdはこのサービスに対応する容器を自動的に起動し、容器が死亡した後もこの容器を起動します.私たちは次の例でsleep 30のdockerパッケージをテストすることができます.この容器は一度に30 sしか維持できません.
    $ vim Dockerfile
    FROM busybox:latest
    CMD ["sh","-c","sleep 30"]

    そして上記のように起動自起動を設定します
    Podmanで起動したコンテナがPodmanのサブプロセスであることを示します.
    さっきnginxのpodmanを起動しました今彼のプロセスを見てみましょう
    # ps -ef | grep [n]ginx
    root     19368 19359  0 11:38 pts/0    00:00:00 nginx: master process nginx -g daemon off;
    101      19381 19368  0 11:38 pts/0    00:00:00 nginx: worker process

    その後、このnginxの親プロセスがあれであることを確認します.
    # ps -ef | grep 19359
    root     19359     1  0 11:38 ?        00:00:00 /usr/libexec/podman/conmon 。。。。

    だから私の上の言い方を検証しました