#はじめに
現場でAnsibleを使う機会ができたので、勉強のためにDockerコンテナ上でAnsibleを動かしてみました。
#対象
Ansibleを実際に動かしてみたい人
#Ansibleとは?
Ansibleとは、システム構成、ソフトウェアの展開等、様々な設定作業を自動するツールである。
PlaybookというYAML形式のテキストファイルにタスクを記述し、それをAnsibleで実行させることで多様な処理を実現する。
メリットとして、下記2点が挙げられる。
- 設定ファイルがyamlでの記述になっておりシンプル
- 冪等性(何度同じ操作しても、同じ状態にする)を担保
試したこと
- Ansibleコンテナと、環境を適用したいターゲットコンテナを立ち上げる
- Ansibleコンテナからplaybookを実行して、ターゲットコンテナにgitをインストールする
#ファイルの構成
.
├── ansible
│ └── install_git.yml
├── docker
│ ├── ansible
│ │ └── Dockerfile
│ └── target
│ └── Dockerfile
└── docker-compose.yml
#ファイルの説明
###docker/ansible/Dockerfile
Ansibleとsshの設定
FROM centos:8
RUN yum update -y \
&& yum install -y epel-release \
&& yum install -y ansible \
&& yum -y install openssh-clients \
&& echo "target" >> /etc/ansible/hosts
###docker/target/Dockerfile
Ansibleサーバーからsshできるように、sshの設定、sshdを起動
FROM centos:8
RUN yum -y update \
&& yum -y install openssh-server \
&& sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config \
&& sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config \
&& ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa \
&& ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa \
&& sed -ri 's/^#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config \
&& echo "root:" | chpasswd
# sshdを起動
CMD ["/usr/sbin/sshd", "-D"]
###docker-compose.yml
Ansibleコンテナと、ターゲットコンテナを起動させる
version: "3"
services:
ansible:
tty: true
working_dir:
/opt/ansible
build:
context: .
dockerfile: ./docker/ansible/Dockerfile
volumes:
- ./ansible:/opt/ansible
target:
tty: true
build:
context: .
dockerfile: ./docker/target/Dockerfile
###ansible/install_git.yml
Playbookファイル、gitをインストールさせている
- hosts: target
tasks:
- name: install git
yum: name=git state=latest
#実行
- コンテナ起動
- ansibleサーバーにログインして、playbookを実行
- ターゲットコンテナにgitがインストールされているか確認
1. コンテナ起動
# コンテナ起動
~ % docker-compose up -d
Starting ansible_ansible_1 ... done
Starting ansible_target_1 ... done
##2. ansibleサーバーにログインして、playbookを実行
# コンテナを表示
~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28f39d3e82f0 ansible_ansible "/bin/bash" About an hour ago Up 13 seconds ansible_ansible_1
362d7471778f ansible_target "/usr/sbin/sshd -D" About an hour ago Up 13 seconds ansible_target_1
# Ansbleコンテナにログイン
~ % docker exec -it ansible_ansible_1 bash
# playbook実行
[root@28f39d3e82f0 ansible]# ansible-playbook install_git.yml
PLAY [target] ********************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************************
The authenticity of host 'target (172.22.0.2)' can't be established.
ECDSA key fingerprint is SHA256:YJSVW2y2ryrRuU0rn3I8onXAPMwS/k03uj+MNd5JqP0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
ok: [target]
TASK [install git] ***************************************************************************************************************************************************************************************
changed: [target]
PLAY RECAP ***********************************************************************************************************************************************************************************************
target : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3. ターゲットコンテナにgitがインストールされているか確認
# ターゲットコンテナにログイン
~ % docker exec -it ansible_target_1 bash
# gitがインストールされているか確認
[root@362d7471778f /]# git --version
git version 2.27.0
参考