概要
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 一台でも使えますし、簡単な構成ならすぐに作れちゃいます。