LoginSignup
4
2

More than 3 years have passed since last update.

Dockerコンテナ上でAnsibleを実行してみた

Posted at

はじめに

現場で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

実行

  1. コンテナ起動
  2. ansibleサーバーにログインして、playbookを実行
  3. ターゲットコンテナに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

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2