LoginSignup
20
17

More than 5 years have passed since last update.

docker 環境を ansible で構築する(centos7を対象)

Last updated at Posted at 2016-02-19

概要

centos7 上に docker 環境を構築する playbook (ansible の設定ファイル)を作成しました。
docker0 インタフェースのIPアドレス帯の指定や、docker の root ディレクトリの変更といった、実運用で気にしたい項目の設定を含んでいます。

インストールするツール

  • docker-engine
  • docker-compose
  • command completion

設定しているもの

  • docker コンテナのIPアドレス帯
  • docker の root ディレクトリ
  • private registry server の自己証明書(docker hub しか使わない、または private registry server に正当な証明書を導入している場合は不要)

準備

ansible のインストール

ansible は yum でインストールできますが、バージョンが 1.9.4 になります。(2016/02 時点)
このバージョンは SNI に対応していないため、docker-compose などを WEB から取得する際にエラーになります。

ansible v2、および python 2.7.9 以上が必要です。
インストール方法はこちらを参考にしてください。

ディレクトリ構成

playbook.yml   ※playbook
hosts          ※hosts 一覧(localhost のみ指定)
docker.repo    ※docker repository の設定ファイル
option.conf    ※docker の起動オプション指定ファイル

ファイル詳細

playbook.yml

- hosts: all
  connection: local
  environment:
    https_proxy: "{{ lookup('env', 'https_proxy') }}"
  tasks:
    - name: Yum update packages
      yum:
        name: "*"
        state: latest
    - name: Set docker repo
      copy:
        src: docker.repo
        dest: /etc/yum.repos.d/docker.repo
        owner: root
        group: root
        mode: 0755
    - name: Install docker
      yum:
        name: docker-engine
        state: present
    - name: docker setting mkdir
      file: 
        path: /etc/systemd/system/docker.service.d
        state: directory
        owner: root
        group: root
        mode: 0755
    - name: docker setting option file
      copy:
        src: option.conf
        dest: /etc/systemd/system/docker.service.d/option.conf
    - name: set ansible_python_interpreter
      set_fact: ansible_python_interpreter="/opt/python/bin/python"
    - name: Get docker-compose
      get_url:
        url: "https://github.com/docker/compose/releases/download/1.5.1/docker-compose-{{ansible_system}}-{{ansible_machine}}"
        dest: /usr/local/bin/docker-compose
      register: get_compose
    - name: chmod docker-compose
      file:
        path: /usr/local/bin/docker-compose
        mode: "a+x"
      when: get_compose.changed
    - name: Get docker-compose ver
      shell: docker-compose --version | awk 'NR==1{print $NF}'
      register: docker_compose_ver
      changed_when: false
    - name: Install command completion
      get_url:
        url: "https://raw.githubusercontent.com/docker/compose/{{docker_compose_ver.stdout}}/contrib/completion/bash/docker-compose"
        dest: /etc/bash_completion.d/docker-compose
    # private docker registry の証明書設定: ディレクトリ作成
    - name: Set self-signed certificate mkdir
      file:
        path: /etc/docker/certs.d/your_private_registry_host:your_private_registry_port/
        state: directory
        owner: root
        group: root
        mode: 0755
    # private docker registry の証明書設定: 証明書を配置 ※ここでは wget で取得可能としている
    - name: Set self-signed certificate get crt
      get_url:
        url: your_self_cert_url
        dest: /etc/docker/certs.d/your_private_registry_host:your_private_registry_port/ca.crt
      notify: restart docker
    - name: Start docker daemon
      service:
        name: docker
        state: started
        enabled: yes
  handlers:
    - name: restart docker
      service:
        name: docker
        state: restarted
  • your_private_registry_host:your_private_registry_port は、private registry server のパスに変更してください。
  • your_self_cert_url は、自己証明書のパスに変更してください。

hosts

localhost

本記事ではローカルホストに docker をインストールします。

docker.repo

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

docker 公式サイトから持ってきただけです。

option.conf

[Service]
Environment="http_proxy=http://<プロキシサーバのIP>:<ポート>/"
Environment="https_proxy=http://<プロキシサーバのIP>:<ポート>/"
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -g /data/docker --bip="172.100.42.1/16"
  • docker の root ディレクトリを /data/docker に指定しています。root ディレクトリ以下にはイメージファイルなどが蓄積されるため、容量が大きくなります。※デフォルトは /var/lib/docker
  • docker コンテナの IP アドレス帯を指定しています。指定しておかないと、社内ネットワークのIPアドレス帯と競合したりします。競合すると、ホストマシンと対象ネットワークの通信ができなくなります。

playbook を実行

root で実行します。

$ ansible-playbook -i hosts playbook.yml

実行後、docker ps と打って応答があれば成功です。

root 以外のユーザで docker を使用したい場合、当該ユーザを docker グループに入れてください。

お試し環境を構築する Vagrantfile

上記を実行するための、centos7 ansible2.0 環境を構築する Vagrantfile をこちらに公開しています。

感想

ansible は始めて使いましたが、敷居はとても低いですね。localhost 一台でも使えますし、簡単な構成ならすぐに作れちゃいます。

20
17
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
20
17