LoginSignup
0
0

More than 3 years have passed since last update.

Ansible学習用Dockerコンテナの作成

Posted at

概要

Ansibleの実行環境にVagrant+Virtualboxを使っている例が多いと感じたものの,
せっかくなのでDockerで環境を作ってみました.

環境

  • Mac OS X 10.15
  • Docker version 19.03.5

作成手順

まずは普通にインストールする場合のコマンドを並べ,最後にDockerfileに落とし込んだ上でビルドします.

元イメージの決定

今回はCentOS7で作ってみます.
他OSでも問題ないですが,以下の手順は適宜読み替えて下さい.

ansibleのインストール

CentOS7でansibleをインストールするにはepelリポジトリを追加する必要があるため,以下コマンドで追加した上でインストール.

yum install -y epel-release
yum install -y ansible

sshのインストール

CentOS7のイメージにはsshサーバ/クライアントが含まれていないため,これらをインストール.
ちなみにサーバはopenssh-serverですが,クライアントはopenssh-clients(末尾にsが必要)なので注意(自分はここでハマり,コンテナ起動後にsshコマンドが打てず泣きました).
sshpassはパスワード認証の際に必要.

yum install -y openssh-server
yum install -y openssh-clients
yum install -y sshpass

その他のコマンドのインストール

無くても良いものの,あると便利なコマンドをインストール.
自分はIPアドレスの確認にipコマンドを使いたいので,追加でインストールしました.
他に欲しいコマンドがあれば追記していきます.

yum install -y iproute

軽量化

yum関係の不要なキャッシュを削除することで,イメージを軽量化します.

rm -rf /var/cache/yum/*
yum clean all

sshの設定

rootログインの許可,rootパスワードの設定等を行います.
あくまで検証用なので,セキュリティ的な観点は無視しています.

sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    echo 'root:password' | chpasswd && \
    ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key

sshdの起動

sshの設定が終わったので,sshdを起動します.

systemctl start sshd.service

Dockerfileに落とし込む

上記までの内容をDockerfileに書くと,以下のようになります.

FROM centos:7

RUN yum update -y && \
    yum install -y epel-release && \
    yum install -y \
      ansible \
      openssh-server \
      openssh-clients \
      sshpass \
      iproute && \
    rm -rf /var/cache/yum/* && \
    yum clean all && \
    sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    echo 'root:password' | chpasswd && \
    ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key

CMD ["usr/sbin/sshd", "-D"]

イメージのビルド

以下のコマンドで上記のDockerfileからイメージをビルドします.

docker build -t <イメージ名> .

完成

ビルド完了後,docker runでコンテナを作成し,ansibleがインストールされていることを確認.

$ docker run -itd --name test --rm --privileged <イメージ名> /sbin/init
$ docker exec -it test /bin/bash
$ ansible --version
ansible 2.9.6
///省略

sshサーバ,クライアント両方を入れているので,コンテナを2つ起動することで一方からもう一方をansibleで操作することができます.

0
0
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
0
0