CentOS – Podman

測試環境為 CentOS 8 x86_64 虛擬機.

參考文章 – https://cloudcone.com/docs/article/how-to-install-podman-on-centos-8/

從原先的 Docker (請參考 – http://benjr.tw/95998 )管理 Container 變成了 podman (Pod Manager tool) 概念是一樣的.

Podman 為無背景程序(Daemonless)的容器引擎, Container 可以使用 root 或 非root 的使用者來執行,相較於 docker 是個 Daemon ,且需要操作的使用者要有 root 相同權限才能執行.

安裝 podman ,可以用 yum 也可以用 dnf (Dandified Yum 新的套件管理程式)

[root@localhost ~]# yum update
[root@localhost ~]# yum install podman

安裝好就可以透過 podman 來搜尋 container image,下面來搜尋 ubuntu 的 container image.

[root@localhost ~]# podman search ubuntu
INDEX      NAME                                                               DESCRIPTION                                      STARS   OFFICIAL  AUTOMATED
docker.io  docker.io/library/ubuntu                                           Ubuntu is a Debian-based Linux operating sys...  12287   [OK]      
docker.io  docker.io/library/ubuntu-debootstrap                               debootstrap --variant=minbase --components=m...  44      [OK]      
docker.io  docker.io/library/ubuntu-upstart                                   Upstart is an event-based replacement for th...  110     [OK]      
docker.io  docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5     ubuntu-16-nginx-php-phpmyadmin-mysql-5           50                [OK]
....

安裝 Ubuntu container image .

[root@localhost ~]# podman pull docker.io/library/ubuntu 

先來了解一下 podman 的基本三觀念. 容器 (Container) , 映像檔 (Image) , 倉庫 (Image Registry) .

  • 容器 (Container)
    在原作業系統中透過資源共享的方式,建立出一個獨立空間 (虛擬環境,有自己的 file system, process 與 block I/O ,network 空間) 給另外一個作業系統來使用,聽起來很像是虛擬機器 Virtual Machine 但方式不一樣,名稱也不太一樣,這樣的方式叫做 Container.
  • 映像檔 (Image)
    Container 是一個容器,我們需要將作業環境放到這一個容器,最快的方式就是透過網路下載別人已經做好的作業環境 (唯讀映像檔) 來使用,當然也是可以自己建立.因為這是一個唯讀的映像檔,所以容器啟動的時候還會提供資料可以寫入的一層地方.
  • 倉庫 (Image Registry)
    倉庫是用來存放映像檔的地方.

剛剛從 docker.io 的倉庫 (Image Registry) 下載了 ubuntu 映像檔 (Image),後面我會會用該 Image 來產生 容器 (Container),先來檢視安裝了哪一些 container 的 Image.

[root@localhost ~]# podman images
REPOSITORY                                                      TAG     IMAGE ID      CREATED       SIZE
docker.io/library/ubuntu                                        latest  7e0aa2d69a15  4 weeks ago   75.1 MB

產生 Container 可以透過以下方式.

  • run – Run a command in a new container
    使用下載下來的 Ubuntu container 的 Image 並執行後面指令 cat /etc/os-release 來檢視該 Ubuntu 版本.

    [root@localhost ~]# podman run -it docker.io/library/ubuntu cat /etc/os-release
    NAME="Ubuntu"
    VERSION="20.04.2 LTS (Focal Fossa)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 20.04.2 LTS"
    VERSION_ID="20.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=focal
    UBUNTU_CODENAME=focal
    

    參數說明:

    • -t : 將 Container 的輸出轉向到 虛擬終端(pseudo-tty),也就是我們在系統上終端機看到的.
    • -i : 透過系統的鍵盤將資料輸入到 Container 裡面.
    • -d=true|false : Detached mode: 將 container 執行在背景. 預設為 false.
      [root@localhost ~]# podman run -it -d=true docker.io/library/ubuntu bash
      d5c66f84cb4f3df7ad5c21436056d0ac95cd6a63e17c2c1a445504ab7ccedc96
      [root@localhost ~]# podman ps -a
      CONTAINER ID  IMAGE                             COMMAND               CREATED        STATUS                    PORTS                            NAMES
      d5c66f84cb4f  docker.io/library/ubuntu          bash                  4 seconds ago  Up 4 seconds ago                                           reverent_feistel
      

      可以透過 podman attach 連到 Container.

      [root@localhost ~]# podman attach reverent_feistel
      root@d5c66f84cb4f:/# exit
      exit
      

    透過指令來檢視目前 container 的狀態是 Exited (0) 已經停止了. Container的 狀態 status 有 created , exited , paused , running , unknown .

    [root@localhost ~]# podman ps -a
    CONTAINER ID  IMAGE                     COMMAND               CREATED        STATUS                    PORTS   NAMES
    1158c397d39b  docker.io/library/ubuntu  cat /etc/os-relea...  8 seconds ago  Exited (0) 8 seconds ago          adoring_carson
    

    剛剛的 Container 會執行 /cat /etc/os-release 就結束了, 可以透過 start 再次執行,可以指定 CONTAINER ID(1158c397d39b) 或是 NAMES (adoring_carson).

    [root@localhost ~]# podman start -ia adoring_carson
    NAME="Ubuntu"
    VERSION="20.04.2 LTS (Focal Fossa)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 20.04.2 LTS"
    VERSION_ID="20.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=focal
    UBUNTU_CODENAME=focal
    

    參數說明:

    • -a , –attach : Attach container’s STDOUT and STDERR.

    除了 start 外還有以下控制 container 參數.

    • start – Start one or more stopped containers
    • stop – Stop one or more running containers
    • stats – Display a live stream of container(s) resource usage statistics
    • attach – Attach to a running container
  • create – Create a new container
    一樣使用下載下來的 Ubuntu container 的 Image.

    [root@localhost ~]# podman create -it docker.io/library/ubuntu bash
    57a1971e6bad95920a93642e6dc2fe9d31c044578b9045f5d49d211111f9f9d9
    

    檢視 container 的狀態是 Created 建立但沒有執行過.

    [root@localhost ~]# podman ps -a
    CONTAINER ID  IMAGE                     COMMAND               CREATED         STATUS                     PORTS   NAMES
    1158c397d39b  docker.io/library/ubuntu  cat /etc/os-relea...  23 minutes ago  Exited (0) 23 minutes ago          adoring_carson
    57a1971e6bad  docker.io/library/ubuntu  bash                  3 seconds ago   Created                            vigorous_lederberg
    

    透過 start 去執行它,,可以指定 CONTAINER ID(57a1971e6bad) 或是 NAMES (vigorous_lederberg)..

    [root@localhost ~]# podman start -ia vigorous_lederberg
    root@57a1971e6bad:/# 
    

    這時候可以開另外一個 Terminal 視窗來觀察這個 Container .

    [root@localhost ~]# podman ps -a
    CONTAINER ID  IMAGE                     COMMAND               CREATED         STATUS                     PORTS   NAMES
    1158c397d39b  docker.io/library/ubuntu  cat /etc/os-relea...  27 minutes ago  Exited (0) 27 minutes ago          adoring_carson
    57a1971e6bad  docker.io/library/ubuntu  bash                  3 minutes ago   Up 3 minutes ago                   vigorous_lederberg
    
    [root@localhost ~]# podman stats vigorous_lederberg
    ID            NAME                CPU %   MEM USAGE / LIMIT  MEM %   NET IO          BLOCK IO  PIDS
    57a1971e6bad  vigorous_lederberg  --      843.8kB / 3.89GB   0.02%   908B / 3.812kB  -- / --   1
    ^C
    

    回到剛剛的 vigorous_lederberg container 的 bash.

    root@57a1971e6bad:/# ls   
    bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@57a1971e6bad:/# exit
    exit
    [root@localhost ~]# 
    
    [root@localhost ~]# podman ps -a
    CONTAINER ID  IMAGE                     COMMAND               CREATED         STATUS                     PORTS   NAMES
    1158c397d39b  docker.io/library/ubuntu  cat /etc/os-relea...  28 minutes ago  Exited (0) 28 minutes ago          adoring_carson
    57a1971e6bad  docker.io/library/ubuntu  bash                  5 minutes ago   Exited (0) 8 seconds ago           vigorous_lederberg
    

當該 Container 不用時,可以移除它(可以指定 ONTAINER ID 或是 NAMES).

[root@localhost ~]# podman ps -a
CONTAINER ID  IMAGE                     COMMAND               CREATED         STATUS                     PORTS   NAMES
1158c397d39b  docker.io/library/ubuntu  cat /etc/os-relea...  28 minutes ago  Exited (0) 28 minutes ago          adoring_carson
57a1971e6bad  docker.io/library/ubuntu  bash                  5 minutes ago   Exited (0) 8 seconds ago           vigorous_lederberg
[root@localhost ~]# podman rm 1158c397d39b
1158c397d39b793b9293f116c19aa9a373a807be4a34de80497567be30b3e7f8
[root@localhost ~]# podman ps -a
CONTAINER ID  IMAGE                     COMMAND  CREATED        STATUS                    PORTS   NAMES
57a1971e6bad  docker.io/library/ubuntu  bash     7 minutes ago  Exited (0) 2 minutes ago          vigorous_lederberg
[root@localhost ~]# podman rm vigorous_lederberg
57a1971e6bad95920a93642e6dc2fe9d31c044578b9045f5d49d211111f9f9d9
[root@localhost ~]# podman ps -a
CONTAINER ID  IMAGE   COMMAND  CREATED  STATUS  PORTS   NAMES

當該 Image 不用時,可以移除它(可以指定 REPOSITORY 或是 IMAGE ID).

[root@localhost ~]# podman images
REPOSITORY                                                      TAG     IMAGE ID      CREATED       SIZE
docker.io/library/ubuntu                                        latest  7e0aa2d69a15  4 weeks ago   75.1 MB
[root@localhost ~]# podman rmi docker.io/library/ubuntu
Untagged: docker.io/library/ubuntu:latest
Deleted: 7e0aa2d69a153215c790488ed1fcec162015e973e49962d438e18249d16fa9bd
[root@localhost ~]# podman images
REPOSITORY  TAG     IMAGE ID  CREATED  SIZE
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料