概要
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で操作することができます.