Ansible + DockerDesktop で使い捨て検証環境
背景
WSLというか、VMっていうかもう検証とか全部コンテナでいいよね人間です。
でもdockerfile + docker-composeってそれだけで意外に学習コストあるよなーと。
そもそもdockerコマンドのオプションすら覚えるの面倒なので、
ansibleにやってもらえれば楽だよなーと思った次第です。
環境
DockerDesktop + WSL2
(ansibleさえ動けばディストリビューションはなんでもいいんじゃないでしょうか。)
自分はcent8です。
むしろWSL2のセットアップが大変な気がしますが、良記事いっぱいありそうなので割愛します。
手元のversionとか
ansible [core 2.12.6]
Docker version 20.10.17, build 100c701
install
そもそもDocker Desktopを入れた時点でディストリビューション側からdockerは叩けるようになった気がします。
docker --versionとか打って叩ければOK。
ansibleのインストールは公式どおりでOK
ansible --versionとか打って叩ければOK。
python用のモジュールが無いとansibleから叩けなかったと思いますのでそれを入れます。
(ほかにもなんかモジュール必要だった気がしますが忘れました。)
pipX install docker
これであとはPlaybookを書くだけです。
Playbook
サンプル構成
オプション的なのは基本的に抜いてます。
ansible_docker_demo # 実行ディレクトリ
├── demo.yml # コンテナに対して実行するPlaybook
├── inventry # 対象リスト
├── make_container.yml # コンテナ作成用のPlaybook
└── roles # 実処理
└── apache
└── tasks
└── main.yml
別につなげて書いてもいいと思いますが、
わかりにくいので自分は分けて書いて、
実行時に単純にセミコロンでつないじゃってます。
コンテナ作成
- name: Make Container
gather_facts: no
hosts: localhost
connection: local
vars:
- container_name_and_hostname: server01
tasks:
- name: create container
docker_container:
name: '{{ container_name_and_hostname }}'
hostname: '{{ container_name_and_hostname }}'
image: almalinux:latest # 特にalmaにしてる意味はないです。
detach: yes
privileged: yes
published_ports:
- "80:80"
command: /sbin/init
auto_remove: yes
イメージはローカルにあればそれを、なければ持ってくるという一般的な動きなので、
外からだとそれなりに時間がかかります。
コンテナに対して実行するplaybook
サンプルとしてhttpdをインストールする感じにしてみました。
- hosts: servers
gather_facts: no
connection: docker
roles:
- apache
roles配下
- name: install apache
yum:
name:
- httpd
state: present
- name: start httpd
service: name=httpd state=started
# 実行結果(WARNINGは消しちゃってます。)
コンテナを作成
# ansible-playbook make_container.yml;
PLAY [Make Container] **************************************************************************************************
TASK [create container] ************************************************************************************************
changed: [localhost]
PLAY RECAP *************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
一応DockerDesktopからも確認できます。
作成したコンテナにapacheをインストール(例として)
# ansible-playbook -i inventry demo.yml
PLAY [servers] *********************************************************************************************************
TASK [apache : install apache] *****************************************************************************************
changed: [server01]
TASK [apache : start httpd] ********************************************************************************************
changed: [server01]
PLAY RECAP *************************************************************************************************************
server01 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
一応、動いてるよねと。
server01# systemctl status httpd | grep active
Active: active (running) since Fri 2022-07-08 02:14:26 UTC; 1min 24s ago
server01# curl -s http://localhost | grep "AlmaLinux website"
<p>For information on AlmaLinux, please visit the <a href="http://www.almalinux.org/">AlmaLinux website</a>.</p>
終わりに
セットアップ自体は年単位で前に実施した内容なので漏れがあったら
後で手順は指しておきます。
完全に備忘というか記憶の中からでまとめてみましたが、
自分にはこの環境で今のところ十分というかめちゃめちゃ応用聞くし
いつの間にかansibleも使えるようになる、と思ってます。
興味ある人はぜひ。もっと簡単なセットアップ方法とか、
使い道あれば教えてください。
Discussion