您的位置:首頁>正文

使用 Ansible Container 構建和測試應用程式

容器是一個日益流行的開發環境。 作為一名開發人員, 你可以選擇多種工具來管理你的容器。 本文將向你介紹 Ansible Container, 並展示如何在類似生產環境中運行和測試你的應用程式。

-- Clement Verna

本文導航

-入門 …… 03%

-設置 Ansible Container …… 14%

-設置專案 …… 23%

-定義容器 …… 31%

-Ansible 角色 …… 54%

-Apache HTTP 配置 …… 65%

-Flask “hello world” …… 77%

-構建並運行 …… 85%

-結論 …… 90%

編譯自: https://fedoramagazine.org/build-test-applications-ansible-container/

作者: Clement Verna

譯者: geekpi

容器是一個日益流行的開發環境。 作為一名開發人員, 你可以選擇多種工具來管理你的容器。 本文將向你介紹 Ansible Container, 並展示如何在類似生產環境中運行和測試你的應用程式。

入門

這個例子使用了一個簡單的 Flask Hello World 程式。 這個程式就像在生產環境中一樣由 Apache HTTP 伺服器提供服務。 首先, 安裝必要的 docker 包:

sudo dnf install docker

Ansible Container 需要通過本地通訊端與 Docker 服務進行通信。 以下命令將更改通訊端所有者, 並將你添加到可訪問此通訊端的 docker 用戶組:

sudo groupadd docker && sudo gpasswd -a $USER docker

MYGRP=$(id -g) ; newgrp docker ; newgrp $MYGRP

運行 id 命令以確保 docker 組在你的組成員中列出。 最後, 使用 sudo [1]啟用並啟動 docker 服務:

sudo systemctl enable docker.service

sudo systemctl start docker.service

設置 Ansible Container

Ansible Container 使你能夠構建容器鏡像並使用 Ansible playbook 進行編排。

該程式在一個 YAML 檔中描述, 而不是使用 Dockerfile, 列出組成容器鏡像的 Ansible 角色。

不幸的是, Ansible Container 在 Fedora 中沒有 RPM 包可用。 要安裝它, 請使用 python3 虛擬環境模組。

mkdir ansible-container-flask-example

cd ansible-container-flask-example

python3 -m venv .venv

source .venv/bin/activate

pip install ansible-container[docker]

這些命令將安裝 Ansible Container 及 Docker 引擎。 Ansible Container 提供三種引擎:Docker、Kubernetes 和 Openshift。

設置項目

現在已經安裝了 Ansible Container, 接著設置這個項目。 Ansible Container 提供了一個簡單的命令來創建啟動所需的所有檔:

ansible-container init

來看看這個命令在目前的目錄中創建的檔:

ansible.cfg

ansible-requirements.txt

container.yml

meta.yml

requirements.yml

該專案僅使用 container.yml 來描述程式服務。 有關其他檔的更多資訊, 請查看 Ansible Container 的入門[2]文檔。

定義容器

如下更新 container.yml:

version: "2"

settings:

conductor:

# The Conductor container does the heavy lifting, and provides a portable

# Python runtime for building your target containers. It should be derived

# from the same distribution as you're building your target containers with.

base: fedora:26

# roles_path: # Specify a local path containing Ansible roles

# volumes: # Provide a list of volumes to mount

# environment: # List or mapping of environment variables

# Set the name of the project. Defaults to basename of the project directory.

# For built services, concatenated with service name to form the built image name.

project_name: flask-helloworld

services:

# Add your containers here, specifying the base image you want to build from.

# To use this example, uncomment it and delete the curly braces after services key.

# You may need to run `docker pull ubuntu:trusty` for this to work.

web:

from: "fedora:26"

roles:

- base

ports:

- "5000:80"

command: ["/usr/bin/dumb-init", "httpd", "-DFOREGROUND"]

volumes:

- $PWD/flask-helloworld:/flaskapp:Z

conductor 部分更新了基本設置以使用 Fedora 26 容器基礎鏡像。

services 部分添加了 web 服務。 這個服務使用 Fedora 26, 後面有一個名為 base 的角色。 它還設置容器和主機之間的埠映射。 Apache HTTP 伺服器為容器的埠 80 上的 Flask 程式提供服務, 該容器重定向到主機的埠 5000。

然後這個檔定義了一個卷, 它將 Flask 程式原始程式碼掛載到容器中的 /flaskapp 中。

最後, 容器啟動時運行 command 配置。 這個例子中使用 dumb-init[3], 一個簡單的進程管理器並初始化系統啟動 Apache HTTP 伺服器。

Ansible 角色

現在已經設置完了容器, 創建一個 Ansible 角色來安裝並配置 Flask 程式所需的依賴關係。 首先, 創建 base 角色。

mkdir -p roles/base/tasks

touch roles/base/tasks/main.yml

現在編輯 main.yml , 它看起來像這樣:

---

- name: Install dependencies

dnf: pkg={{item}} state=present

with_items:

- python3-flask

- dumb-init

- httpd

- python3-mod_wsgi

- name: copy the apache configuration

copy:

src: flask-helloworld.conf

dest: /etc/httpd/conf.d/flask-helloworld.conf

owner: apache

group: root

mode: 655

這個 Ansible 角色是簡單的。 首先它安裝依賴關係。 然後, 複製 Apache HTTP 伺服器配置。 如果你對 Ansible 角色不熟悉, 請查看角色文檔[4]。

Apache HTTP 配置

接下來, 通過創建 flask-helloworld.conf 來配置 Apache HTTP 伺服器:

$ mkdir -p roles/base/files

$ touch roles/base/files/flask-helloworld.conf

最後將以下內容添加到檔中:

ServerName example.com

WSGIDaemonProcess hello_world user=apache group=root

WSGIScriptAlias / /flaskapp/flask-helloworld.wsgi

WSGIProcessGroup hello_world

WSGIApplicationGroup %{GLOBAL}

Require all granted

這個檔的重要部分是 WSGIScriptAlias。 該指令將腳本 flask-helloworld.wsgi 映射到 /。 有關 Apache HTTP 伺服器和 mod_wsgi 的更多詳細資訊, 請閱讀 Flask 文檔[5]。

Flask “hello world”

最後, 創建一個簡單的 Flask 程式和 flask-helloworld.wsgi 腳本。

mkdir flask-helloworld

touch flask-helloworld/app.py

touch flask-helloworld/flask-helloworld.wsgi

將以下內容添加到 app.py:

from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

return "Hello World!"

然後編輯 flask-helloworld.wsgi , 添加這個:

import sys

sys.path.insert(0, '/flaskapp/')

from app import app as application

構建並運行

現在是時候使用 ansible-container build 和 ansible-container run 命令來構建和運行容器。

ansible-container build

這個命令需要一些時間來完成, 所以要耐心等待。

ansible-container run

你現在可以通過以下 URL 訪問你的 flask 程式: http://localhost:5000/

結論

你現在已經看到如何使用 Ansible Container 來管理、構建和配置在容器中運行的程式。 本例的所有設定檔和原始程式碼在 Pagure.io[6] 上。 你可以使用此例作為基礎來開始在專案中使用 Ansible Container。

via: https://fedoramagazine.org/build-test-applications-ansible-container/

作者:Clement Verna[7] 譯者:geekpi 校對:wxy

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

點擊“瞭解更多”可訪問文內連結
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示