Podman - 下一代Linux容器工具


     podman是一個用於處理容器的開源Linux工具。 包括注冊表中的容器,例如docker.io和quay.io. 在本文中,將展示如何使用podman構建容器映像並從中創建容器。 接下來,我展示如何將圖像上傳到注冊表,最后,展示如何使用docker在非Linux系統上使用podman創建的完全兼容的圖像創建容器。

     開始之前,快速了解項目名稱及徽標。 像展示的那樣,podman可以使用容器,但也適用於在同一主機上一起部署的容器,容器組。 (如果了解Kubernetes,就會熟悉podman的工作原理。)重要的是,一組海豹被稱為豆莢,因為上面有令人敬畏的豆莢標志。 不會在這里討論pods,的確它是該工具的一個很棒的功能。

足夠的背景,讓我們繼續前進。這里使用的是 reshot linux
第一步是安裝podman。 像往常一樣,明智的第一步是運行更新,以獲得良好的系統:
$ sudo dnf -y update

 在系統是最新時,繼續安裝podman:

$ sudo dnf -y install podman
使用yum或apt-get來安裝和管理軟件。
准備podman,可使用別名docker = podman。 這意味着Linux系統將始終調用podman,即使習慣性地輸入docker也是如此。 出於研究目的,運行docker和podman來表明它們是兼容的,為了區分,最好不要使用別名。 

 安裝后,從sudo podman版本開始查看正在使用的版本。 這里使用的是0.9.3.1版本:

$ sudo podman version
podman version 0.9.3.1

     這里以root身份運行podman,該命令永遠不需要root訪問權限。 很快就會談到root訪問權限。

接下來,運行podman  info 以獲取有關環境的一些信息: 

$ sudo podman info
. . .
  registries:
  - docker.io
  - registry.fedoraproject.org
  - quay.io
  - registry.access.redhat.com
  - registry.centos.org
. . .
唯一細節是podman在系統上使用了五個注冊表。 正在嘗試加載容器映像,它首先在本地計算機上查找,然后按照列出的順序檢查其他注冊表。
     使用下面的Dockerfile,並使用podman來構建一個圖像。 該文件將Colossal Cave Adventure游戲的源代碼復制到容器映像(WORKDIR和COPY命令)中,出於安全原因(RUN命令的前六行)安裝一些內核更新,以構建 代碼(接下來的五行RUN),最后構建代碼(RUN的最后一行):
FROM registry.centos.org/che-stacks/centos-stack-base
WORKDIR /usr/src/open-adventure
COPY ./open-adventure /usr/src/open-adventure
RUN sudo yum -y update && \
    sudo yum -y install kernel-headers && \
    sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org && \
    sudo rpm -Uvh http://elrepo.org/linux/kernel/el7/x86_64/RPMS/elrepo-release-7.0-3.el7.elrepo.noarch.rpm && \
    sudo yum --enablerepo=elrepo-kernel -y install kernel-ml && \
    sudo yum --enablerepo=elrepo-kernel -y swap kernel-headers -- kernel-ml-headers && \
    sudo yum -y install centos-release-scl && \
    sudo yum -y install gcc && \
    sudo yum -y install make && \
    sudo yum -y install libedit-devel && \
    sudo yum -y install python-yaml && \
    sudo make
CMD tail -f /dev/null

 用命令創建容器映像:

$ sudo podman build -t open-adventure:podman .
STEP 1: FROM registry.centos.org/che-stacks/centos-stack-base
Getting image source signatures
Copying blob sha256:f9ce27a295e879233c8fbbf9ab67944a10e1ce80da69a46f87c583082a1ff3bb
. . .
STEP 8: CMD tail -f /dev/null 
--> 9e5d996316fac25084c5fa4d62ff4cbebad39dd8913ca4aff46c53653589ec7
STEP 9: COMMIT open-adventure:podman
(一如既往,不要忘記構建命令末尾的點。)pull基本映像需要幾分鍾,尤其是第一次構建容器映像時。 這是鐵的數據,但根據我的經驗,使用podman構建映像似乎沒有比docker更快或更慢。

正如您所料,運行podman映像會顯示剛構建的映像:

$ sudo podman images
REPOSITORY                                         TAG                 IMAGE ID            CREATED              SIZE
localhost/open-adventure                           podman              a2b9a17504ac        About a minute ago   1.1GB
registry.centos.org/che-stacks/centos-stack-base   latest 
請注意,localhost /已添加到圖像的名稱。 這告訴podman圖像位於本地計算機上的圖像緩存中。

接下來,我將從圖像中創建一個容器。 podman run --rm -it [我剛剛創建的圖像的名稱] / bin / bash。 這在容器啟動時運行bash shell。

$ podman run --rm -it open-adventure:podman /bin/bash
ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519
[user@d767729eca88 open-adventure]$
將localhost /添加到圖像名稱的開頭,可以工作,指出一點。 
在容器內部進行bash提示,這個容器里有Colossal Cave Adventure,正如podman構建圖像時編譯的那樣。 可以運行./advent並玩游戲。 進入建築物內,吃點東西,喝點東西,然后退出游戲。 諸如此類的事情。
這里的要點是我創建了一個圖像,可以與任何想要玩游戲的人分享。 當然,也可以構建包含有用軟件的圖像。
談到分享,我會把圖像放在quay.io的公共回購中。 首先,我將使用podman登錄:
 sudo podman login quay.io -u dougtidwell -p [password]

注意,把圖像推送到quay.io時,必須指定quay.io repo和用戶名(dougtidwell)作為遠程圖像名稱的一部分。

根據映像的基本操作系統,quay.io可能會掃描安全漏洞。 我使用未安裝任何內核更新的修改過的Dockerfile構建了標記為不安全的圖像。 該圖像有一些漏洞,quay.io給了我幫助我解決問題的建議。 我留下舊圖像來說明問題。 (關鍵是安全掃描非常酷。)
根據映像的基本操作系統,quay.io可能會掃描安全漏洞。 使用未安裝任何內核更新的修改過的Dockerfile構建了標記為不安全的圖像。 該圖像有一些漏洞,quay.io給出幫助解決問題的建議。 (關鍵是安全掃描非常酷。)
最后,為了結束演示,讓我們回到我的Mac並使用docker從quay.io中提取圖像。 請記住,podman只是Linux,所以我們必須使用docker。 我在一分鍾前就在Linux上使用了相同的選項,我可以像在Linux上一樣運行該圖像並使用它:
$ docker run --rm -it open-adventure:podman /bin/bash
ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519 
image完全兼容。 事實上,podman使用的一些庫也是docker的一部分。
在我們開始之前,請快速了解容器架構。 docker在Linux上作為守護進程運行。 這會產生一定的開銷,並且還需要任何想要構建容器映像的人具有root訪問權限。 這可能會產生安全風險,尤其是當用戶知道docker run命令的--privileged選項時。
守護進程也扼殺了容器社區的創新。 如果要更改容器的工作方式,則需要更改docker守護程序並將這些更改推送到上游。 沒有守護進程,容器基礎結構更加模塊化,更容易進行更改。 podman的無守護進程架構更加靈活和安全。

 PodmanContainer Tools

這是對podman的快速概述。 正如您所料,它是完全開源的,請查看podman.io以獲取文檔,演示文稿,當然還有源代碼。 我們建議您在Linux系統上安裝該工具並使用它。 您可以從我的quay.io帳戶中提取我剛建立的容器圖像,並使用它來播放Colossal Cave Adventure。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM