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

はじめに

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

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

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

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

動作環境

作成方法

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人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*