容器是一個日益流行的開發環境。 作為一名開發人員, 你可以選擇多種工具來管理你的容器。 本文將向你介紹 Ansible Container, 並展示如何在類似生產環境中運行和測試你的應用程式。
-入門 …… 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 dockerAnsible Container 需要通過本地通訊端與 Docker 服務進行通信。 以下命令將更改通訊端所有者, 並將你添加到可訪問此通訊端的 docker 用戶組:
sudo groupadd docker && sudo gpasswd -a $USER dockerMYGRP=$(id -g) ; newgrp docker ; newgrp $MYGRP
運行 id 命令以確保 docker 組在你的組成員中列出。 最後, 使用 sudo [1]啟用並啟動 docker 服務:
sudo systemctl enable docker.servicesudo systemctl start docker.service
設置 Ansible ContainerAnsible Container 使你能夠構建容器鏡像並使用 Ansible playbook 進行編排。
不幸的是, Ansible Container 在 Fedora 中沒有 RPM 包可用。 要安裝它, 請使用 python3 虛擬環境模組。
mkdir ansible-container-flask-examplecd 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。
最後, 容器啟動時運行 command 配置。 這個例子中使用 dumb-init[3], 一個簡單的進程管理器並初始化系統啟動 Apache HTTP 伺服器。
Ansible 角色現在已經設置完了容器, 創建一個 Ansible 角色來安裝並配置 Flask 程式所需的依賴關係。 首先, 創建 base 角色。
mkdir -p roles/base/taskstouch 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-helloworldtouch flask-helloworld/app.py
touch flask-helloworld/flask-helloworld.wsgi
將以下內容添加到 app.py:
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
然後編輯 flask-helloworld.wsgi , 添加這個:
import syssys.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中國 榮譽推出
點擊“瞭解更多”可訪問文內連結