Podman - 下一代Linux容器工具

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

     開始以前,快速瞭解項目名稱及徽標。 像展現的那樣,podman可使用容器,但也適用於在同一主機上一塊兒部署的容器,容器組。 (若是瞭解Kubernetes,就會熟悉podman的工做原理。)重要的是,一組海豹被稱爲豆莢,由於上面有使人敬畏的豆莢標誌。 不會在這裏討論pods,的確它是該工具的一個很棒的功能。python

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

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

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

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

$ sudo podman version
podman version 0.9.3.1

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

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

$ 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

 用命令建立容器映像:centos

$ 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)做爲遠程圖像名稱的一部分。ruby

根據映像的基本操做系統,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。
相關文章
相關標籤/搜索