使用 ansible-bender 構建容器鏡像 | Linux 中國

2021-01-20 Linux中國

了解如何使用 Ansible 在容器中執行命令。 

容器和 Ansible 可以很好地融合在一起:從管理和編排到供應和構建。在本文中,我們將重點介紹構建部分。

如果你熟悉 Ansible,就會知道你可以編寫一系列任務,ansible-playbook 命令將為你執行這些任務。你知道嗎,如果你編寫 Dockerfile 並運行 podman build,你還可以在容器環境中執行此類命令,並獲得相同的結果。

這是一個例子:

- name: Serve our file using httpd - name: Copy our file to httpd’s webroot

你可以在 Web 伺服器本地或容器中執行這個劇本,並且只要你記得先創建 our-file.txt,它就可以工作。

但是這裡缺少了一些東西。你需要啟動(並配置)httpd 以便提供文件。這是容器構建和基礎架構供應之間的區別:構建鏡像時,你只需準備內容;而運行容器是另一項任務。另一方面,你可以將元數據附加到容器鏡像,它會默認運行命令。

這有個工具可以幫助。試試看 ansible-bender 怎麼樣?

$ ansible-bender build the-playbook.yaml fedora:30 our-httpd

該腳本使用 ansible-bender 對 Fedora 30 容器鏡像執行該劇本,並將生成的容器鏡像命名為 our-httpd。

但是,當你運行該容器時,它不會啟動 httpd,因為它不知道如何操作。你可以通過向該劇本添加一些元數據來解決此問題:

- name: Serve our file using httpd - name: Listen on all network interfaces. path: /etc/httpd/conf/httpd.conf - name: Copy our file to httpd’s webroot

現在你可以構建鏡像(從這裡開始,請以 root 用戶身份運行所有命令。目前,Buildah 和 Podman 不會為無 root 容器創建專用網絡):

# ansible-bender build the-playbook.yamlPLAY [Serve our file using httpd] ****************************************************TASK [Gathering Facts] *************************************************************** ok: [our-httpd-20191004-131941266141-cont]TASK [Install httpd] *****************************************************************loaded from cache: 'f053578ed2d47581307e9ba3f64f4b4da945579a082c6f99bd797635e62befd0'skipping: [our-httpd-20191004-131941266141-cont]TASK [Listen on all network interfaces.] *********************************************changed: [our-httpd-20191004-131941266141-cont]TASK [Copy our file to httpd’s webroot] **********************************************changed: [our-httpd-20191004-131941266141-cont]PLAY RECAP ***************************************************************************our-httpd-20191004-131941266141-cont : ok=3 changed=2 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0Getting image source signaturesCopying blob sha256:4650c04b851c62897e9c02c6041a0e3127f8253fafa3a09642552a8e77c044c8Copying blob sha256:87b740bba596291af8e9d6d91e30a01d5eba9dd815b55895b8705a2acc3a825eCopying blob sha256:82c21252bd87532e93e77498e3767ac2617aa9e578e32e4de09e87156b9189a0Copying config sha256:44c6dc6dda1afe28892400c825de1c987c4641fd44fa5919a44cf0a94f58949fWriting manifest to image destination44c6dc6dda1afe28892400c825de1c987c4641fd44fa5919a44cf0a94f58949fImage 'our-httpd' was built successfully \o/

鏡像構建完畢,可以運行容器了:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.2.106. Set the 'ServerName' directive globally to suppress this message

是否提供文件了?首先,找出你容器的 IP:

# podman inspect -f '{{ .NetworkSettings.IPAddress }}' 7418570ba5a0

你現在可以檢查了:

$ curl http://10.88.2.106/our-file.txt

你文件內容是什麼?

這只是使用 Ansible 構建容器鏡像的介紹。如果你想了解有關 ansible-bender 可以做什麼的更多信息,請查看它的 GitHub 頁面。構建快樂!

via: https://opensource.com/article/19/10/building-container-images-ansible

作者:Tomas Tomecek 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


相關焦點

  • 不用Docker也能構建容器的4種方法
    在本文,我將介紹幾種不用 Docker 就可以構建容器的方法。我將以 OpenFaaS 作為參考案例,它的工作負載使用了 OCI 格式的容器鏡像。OpenFaaS 是 Kubernetes 的一個 CaaS 平臺,可以運行微服務和添加 FaaS 及事件驅動工具。
  • 快速製作Redis Docker鏡像
    快速製作Redis Docker鏡像 現在容器化已經是趨勢,製作鏡像也是我們的基礎工作。  簡介現在容器化已經是趨勢,製作鏡像也是我們的基礎工作。
  • 不只有docker:可選擇的容器化工具還有很多……
    buildah bud來構建鏡像,其中bud代表使用Dockerfile進行構建,但是還可以使用更多的腳本化方法,通過Buildahs的from、run和copy,這與Dockerfile中的命令等效。
  • IoT中的Linux選擇
    這些調整可以簡單到添加一個編譯標誌來使用不同版本的原始碼,或者以某種方式修改原始碼。 用戶將收集他們想要構建的內容的菜單,然後開始構建。 在幾分鐘或幾小時後,根據具體情況,將有一個結果鏡像,可以使用在電腦中使用這一。 Gentoo、安卓和 Yocto 就是這種類型的例子。
  • 雲計算核心技術Docker教程:Docker多階段構建
    多階段構建是一項新功能,需要守護程序和客戶端上使用Docker 17.05或更高版本。多級構建對於在優化Dockerfile的同時使其易於閱讀和維護的任何人都非常有用。
  • Alibaba Cloud Linux等保2.0三級版鏡像作業系統詳解
    Alibaba Cloud Linux是阿里雲推出的Linux發行版,Alibaba Cloud Linux 2等保2.0三級版鏡像是根據《GB/T22239-2019信息安全技術網絡安全等級保護基本要求》進行等保加固的鏡像,Linux百科網(linuxbaike.com)來詳細說下
  • Kali Linux 2019.3 發布,OnePlus 7 成為 NetHunter 推薦設備
    更新亮點如下所示:CloudFlare現在 Kali 可以使用 CloudFlare 的 CDN 鏡像 Kali 存儲庫,並分發內容。Kali 目前同時以標準方式和社區鏡像運行 CloudFlare 服務,如果運行 apt update 時出現 kali.dow​​nload 域,則表示正在使用 CloudFlare 的服務。
  • 容器技術的發展與基本原理
    2017年,Docker公司把這部分高層容器運行時的功能集中到containerd項目裡,捐贈給雲原生計算基金會。containerd 已經成為多個項目共同使用的高層容器運行時,提供了容器鏡像的下載和解壓等鏡像管理功能,在運行容器時,containerd先把鏡像解壓成OCI的文件系統包,然後調用runC運行容器。
  • Linux雲計算教程全套視頻合集:關於Alpine Linux
    Alpine Linux圍繞musl libc和busybox構建。這使得它比傳統的GNU / Linux發行版更小,更節省資源。一個容器需要不超過8 MB的空間,而對磁碟的最小安裝需要大約130 MB的存儲空間。您不僅可以獲得完整的Linux環境,還可以從存儲庫中選擇大量的軟體包。
  • 青藤雲安全「蜂巢之聲」: 讓容器「不裸奔」的一站式安全方案
    圖2:監控容器流量保護容器管理技術堆棧在容器部署問題,通常會使用兩個關鍵基礎設施,即私有容器鏡像倉庫和容器編排工具Kubernetes。容器鏡像倉庫是用於搜索、存儲和分發容器的,簡化了容器的共享工作,並幫助團隊充分利用彼此的工作成果,提高了工作效率。為了確保每個容器都符合開發和安全基準,需要對容器鏡像實時進行漏洞掃描。
  • 菜鳥如何玩轉linux?
    上回說到電腦技術愛好者必知的作業系統,提到了linux作業系統,但是對於小白來說linux作業系統像是無字天書,根本不知道哪裡可以下載到,更別說怎麼使用了,今天就來講講我們的linux系統在哪裡可以下載到,怎麼去玩linux。
  • 「容器雲」Docker和Alpine的包固定問題
    作為Alpine Linux的超級粉絲,我在很多構建的Docker鏡像中都使用了它。生成的鏡像非常小,非常小,非常適合Dockers環境。最近我想為一個過時的項目建立Docker圖像。但是Alpine的包管理器apk失敗了,原因讓我吃驚。
  • 使用Java 構建微服務 - OSCHINA - 中文開源技術交流社區
    In-container微服務打包成一個完整的Java EE容器,該服務在Docker鏡像中實現。基於微服務的架構給架構師和開發者帶來了新的挑戰,然而,隨著語言的升級和工具數量的增加,開發者和架構師完全有能力應對這樣的挑戰。Java也不例外,本文探討了在Java生態系統內構建微服務的不同方法。
  • Linux 內核報TCP SACK漏洞 CVE-2019-11477/78/79,需儘快處理
    通過SACK,B可以使用TCP選項欄位通知A已成功接收了的所有段(1,2,4,6,8-13),A只需重傳段3,5和7就可以。這樣一來可以大大節省了網絡帶寬,提高了性能。SACK奔潰: CVE-2019-11477套接字緩衝區(SKB):套接字緩衝區(Socket Buffer,SKB)是Linux TCP/IP實現中使用的核心的數據結構。
  • 青藤雲安全:容器簡史——從1979到現在
    隨著雲計算的發展,容器的使用越來越廣泛,尤其是近兩年,越來越多企業機構都開始採用容器作為新的IT基礎設施。回顧一下歷史,其實容器在上世紀的70年代末就已經出現了雛形。Jails,Zones,VPS,VM和容器都是為了隔離和資源控制,但每種技術是通過不同的方式實現它,每種方式都有其局限性和優勢。