Ansible検証環境用にDockerを利用した話

はじめに

こんにちは。
今回はAnsible検証用にDockerコンテナを利用したお話しになります。

普段ansibleの機能やplaybookの動作確認をする際の環境としてVMを使用していたのですが、なるべく初期状態に近い状態のマシンで試したいとき、検証後使う予定がないときにVMを準備するのはもったいないなと思っていました。これを解消するためにDockerコンテナを利用しました。

やったことはシンプルで以下の2つになります。

  1. 基本パッケージをインストールし、公開鍵を登録したコンテナイメージを作成する
  2. playbookからコンテナを起動する

動作環境

CentOS 7.5
Docker 18.06.1-ce
ansible 2.7.10
python 3.6.6
docker-py 1.10.6

作成方法

Dockerfileを準備

CentOS7をベースにcore,baseパッケージをインストールし、ssh用公開鍵の登録をしたイメージを作成します。

“` FROM centos:centos7 RUN yum clean all && \     yum -y groupinstall core && \     yum -y groupinstall base WORKDIR /root RUN mkdir /root/.ssh COPY id_rsa.pub /root/.ssh/authorized_keys RUN chmod 0600 /root/.ssh/authorized_keys EXPOSE 22 CMD /usr/sbin/sshd -D “`

 

コンテナイメージを作成

Dockerfileからコンテナイメージを作成します。登録する公開鍵はあらかじめ作成し、同じディレクトリに配置しておきます。

“` # cd “Dockerfileがあるディレクトリ” # ls -l -rw-r–r– 1 root root XXX  XX XX XXXX Dockerfile -rw-r–r– 1 root root XXX  XX XX XXXX id_rsa.pub # docker build . -t “イメージ名”:”タグ” # docker images REPOSITORY     TAG                 IMAGE ID            CREATED             SIZE “イメージ名”    XX                  XXXXXXXXXXXX        XXXXX               XXXMB “`

 

コンテナ起動用playbook作成

with_items で設定したコンテナを特権モードで作成します。作成後、コンテナ情報を出力します。

“` – name: Create container   hosts: localhost   tasks:   – name: Create container     docker_container:       name: “{{ item.name }}” hostname: “{{ item.host }}”       image: “イメージ名”:”タグ”       detach: yes       privileged: yes       ports:         – “{{ item.port }}”       command: /sbin/init     with_items:       – { name: “コンテナ名”, host: “ホスト名”, port: “ローカルポート:22” }       – { name: “コンテナ名”, host: “ホスト名”, port: “ローカルポート:22” }     register: create_docker_container_result   – name: print create_docker_container_result     debug:       msg: “{{ create_docker_container_result }}” “`

 

playbookからコンテナ起動

コンテナ起動用のplaybookを実行するとコンテナが作成されます。

“` # ansible-playbook “コンテナ起動用playbook” # docker ps CONTAINER ID   IMAGE      COMMAND      CREATED STATUS  PORTS                   NAMES XXXXXXXXXXXX   XXXXXXXX   “/sbin/init” XXX     XXX     0.0.0.0:”ポート”->22/tcp   “コンテナ名” “`

 

 

作成したコンテナに対してグループとユーザを作成する

インベントリファイルに作成したコンテナのIPアドレスを設定し、playbookを実行します。

“` – name: create user   hosts: all   vars:     – password: “ユーザパスワード”   tasks:     – name: create group       group:         name: “グループ名”         state: present     – name: create user       user:         name: “ユーザ名”         password: “{{ password | password_hash(‘sha512’) }}”         groups: “グループ名”,wheel         shell: /bin/bash       become: yes “`

 

まとめ

これで少し検証したい場合に使える環境が準備できました。以前と比べて大分手軽に環境を準備できるようになりましたので、今後はこれを活用してAnsibleに対しての理解を深めていこうと思います。
複数コンテナを使用してWeb,DB,APサーバを作成するplaybookの作成や、ベストプラクティスに沿ったplaybookの作成などをやっていきたいと思っています。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です