測試環境為 CentOS 8 x86_64 虛擬機.
參考文章 – https://cloudcone.com/docs/article/how-to-install-podman-on-centos-8/
從原先的 Docker (請參考 – https://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