CentOS7.1でDockerをaufsで設定するAnsible Playbook

# CentOS7.1でDockerをaufsで設定するAnsible Playbook

## 背景

以前書いたこちらの記事でdockerを試してみたところ

- [CentOS7.1でDockerをoverlayfsで設定するAnsible Playbook](http://qiita.com/sadapon2008/items/278766a1a1d428faedb0)

やはりこちらの記事の現象に悩まされて使いづらさMAXです。

- [CoreOSのoverlayfsでyumエラー](http://qiita.com/skame/items/f1c755d66256b750b3e8)

CentOS7.2ぐらいになったら修正されそうな気がしますが、とりあえず評価のためにこちらの記事を参考にoverlayfsではなくてaufsで設定するAnsible Playbookを作ってみました。

- [CentOS7 の docker で aufs を使う](http://qiita.com/sonots/items/e8301de5d232c0e9532c)

なお、あくまで評価目的ですので本番環境ではオススメしません。

## 設定内容

- CentOS 7.1のインストール直後に設定することを想定
- SELinuxは無効化
- firewalldは無効化
- ntpdで時刻同期の設定
- ★NEW★aufs対応のkernelを追加インストール
- Dockerのstorage driverをaufsに設定

## Ansible Playbook

Playbookは2つに分けています。

※冪等性は微妙です。。。
※本来ならcopyモジュールを使うべきところで強引にshellモジュール+echoとかで書いてます
※1つ目のPlaybook実行後、サーバを再起動してください

```yaml:playbook1.yml
---
- hosts: all
  remote_user: root
  tasks:
  - name: yum update
    command: yum -y update
  - name: disable selinux 1
    selinux: >
      state=disabled
  - name: disable selinux 2
    shell: if [ "`/usr/sbin/getenforce`" != "Disabled" ]; then /usr/sbin/setenforce 0; fi
  - name: disable firewalld
    service: >
      name=firewalld
      state=stopped
      enabled=no
  - name: install ntp
    yum: >
      name=ntp
      state=present
  - name: modify /etc/ntp.conf 1
    lineinfile: >
      dest=/etc/ntp.conf
      state=absent
      regexp="^server"
  - name: modify /etc/ntp.conf 2
    lineinfile: >
      dest=/etc/ntp.conf
      state=present
      regexp="^pool ntp.nict.jp iburst$"
      line="pool ntp.nict.jp iburst"
  - name: enable ntp
    service: >
      name=ntpd
      enabled=yes
  - name: start ntpd
    service: >
      name=ntpd
      state=started
  - name: put /etc/yum.repos.d/rhel-aufs-kernel.repo
    shell: echo -e "[rhel-aufs-kernel]\nname=RHEL AUFS Kernel\nbaseurl=https://yum.spaceduck.org/rhel-aufs-kernel/\$releasever/\$basearch/\ngpgcheck=0" >/etc/yum.repos.d/rhel-aufs-kernel.repo
  - name: remove kernel-headers
    yum: >
      name=kernel-headers
      state=absent
  - name: install kernel-ml-aufs kernel-ml-aufs-devel kernel-ml-aufs-headers
    yum: >
      name={{ item }}
      state=present
    with_items:
      - kernel-ml-aufs
      - kernel-ml-aufs-devel
      - kernel-ml-aufs-headers
  - name: install gcc glibc-devel glibc-headers
    yum: >
      name={{ item }}
      state=present
    with_items:
      - gcc
      - glibc-devel
      - glibc-headers
  - name: grub set default
    lineinfile: >
      dest=/etc/default/grub
      regexp=^GRUB_DEFAULT=
      line=GRUB_DEFAULT=0
  - name: grub2-mkconfig
    shell: grub2-mkconfig -o /boot/grub2/grub.cfg
```

gcc glibc-devel glibc-headersをインストールしてるのは、私の環境がVirtualBoxのGuestAdditionsを使っているためで、必須ではありません。

ここまで設定したらいったんサーバを再起動してaufs対応のkernelに切り替えます。

次に、こちらのPlaybookを実行します。


```yaml:playbook2.yml
---
- hosts: all
  remote_user: root
  tasks:
  - name: put /etc/yum.repos.d/docker.repo
    shell: echo -e "[dockerrepo]\nname=Docker Repository\nbaseurl=https://yum.dockerproject.org/repo/main/centos/7\nenabled=1\ngpgcheck=1\ngpgkey=https://yum.dockerproject.org/gpg" >/etc/yum.repos.d/docker.repo
  - name: install docker-engine
    yum: >
      name=docker-engine
      state=present
  - name: mkdir /etc/systemd/system/docker.service.d
    file: >
      path=/etc/systemd/system/docker.service.d
      state=directory
      mode=0755
  - name: put /etc/systemd/system/docker.service.d/storage.conf
    shell: echo -e "[Service]\nExecStart=\nExecStart=/usr/bin/docker daemon -H fd:// --storage-driver=aufs" >/etc/systemd/system/docker.service.d/storage.conf
  - name: systemctl daemon-reload
    shell: systemctl daemon-reload
  - name: enable docker
    service: >
      name=docker
      enabled=yes
  - name: start docker
    service: >
      name=docker
      state=started
```