LoginSignup
8
9

More than 5 years have passed since last update.

ansible(docker_service)でdocker-composeを実行してvagrantのdocker-ceにコンテナを作成する

Last updated at Posted at 2017-09-28

前回はvagrant上のdockerにansible-containerを使ってdockerコンテナを作成しましたが、今回はvagrant上のdockerにdocker-composeを使ってdockerコンテナを立ち上げます。
ansible-containerはdocker apiを必要とするのに対して、docker_serviceはsshで起動できるので、こちらの方がportなどの管理が楽です。
docker-composeはansibleのdocker_serviceを使って起動します。
ポイントはdockerをインストールしたサーバにdocker-composeをインストールすることと、docker-compose.ymlファイルをdockerがインストールしているサーバに転送することです。

環境

  • vagrant
  • ansible 2.4(2.3は要注意)

ソースコード

├── docker-compose-install.yml
├── docker-install.yml
├── docker-service.yml
├── hosts
├── site.yml
├── Vagrantfile
└── transfer
    ├── docker-compose.yml
    └── db
        ├── Dockerfile
        └── conf
            └── custom.cnf
Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos72"
  config.vm.network "private_network", ip: "192.168.33.10"
end
hosts
[vagrants]
192.168.33.10 ansible_ssh_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key
site.yml
- import_playbook: docker-install.yml
- import_playbook: docker-compose-install.yml
- import_playbook: docker-service.yml
docker-install.yml
- hosts: vagrants
  user: vagrant
  become: yes
  tasks:
    - name: install yum-utils
      yum: name=yum-utils state=present

    - name: add docker repo
      shell: "yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"
      args:
        chdir: "/etc/yum.repos.d"
        creates: docker-ce.repo

    - name: install docker-ce
      yum: name=docker-ce state=present

    - name: Docker グループにユーザー追加
      user: name=vagrant groups=docker append=yes
      tags: dockerhost
      become: True

    - name: restart docker
      systemd:
        name: docker.service
        state: restarted
        daemon_reload: yes
        enabled: yes

ポイントはdocker-pyをインストールしないことです。
もうひとつのポイントは、ansible2.3とdocker-compose 1.16は相性問題があるのも要注意です。
詳しくはansibleでdocker_serviceを使った時に Error: cannot import name splitdrive が出た時の対応にまとめました。

docker-compose-install.yml
- name: "install docker-compose"
  hosts: vagrants
  user: vagrant
  become: yes
  tasks:
    - name: Installing packages
      action: "{{ ansible_pkg_mgr }} pkg={{ item }} state=present"
      with_items:
        - python-setuptools

    - name: Installing dependencies
      easy_install:
        name: pip

    # - name: "install docker-py"
    #   pip:
    #     name: "docker-py"
    #     version: 1.7.1
    #     state: present

    - name: Installing docker compose
      pip:
        name: docker-compose
        # ansible 2.3 と docker-compose 1.16 は 相性問題がある
        #version: 1.15.0
        state: present

ここのポイントはファイルをdockerがインストールされているvagrantに転送していることです。
project_src は転送先の絶対パスにしました。

docker-service.yml
- name: "docker service execute"
  hosts: vagrants
  user: vagrant
  become: yes
  vars:
    ansible_python_interpreter: python2
  tasks:
    - name: copy docker-compose file
      copy: src=./transfer dest=/home/vagrant

    - name: "Up db server"
      docker_service:
        project_src: "/home/vagrant/transfer"
        state: present

よくあるdocker-compose.ymlファイルです。

docker-compose.yml
version: '2'
services:
  db:
    build: ./db
    image: sample/db:1.0.0
    container_name: sample-db
    privileged: true
    environment:
      MYSQL_ROOT_PASSWORD: "password"
    volumes:
      - ./data/mysql:/var/lib/mysql
Dockerfile
FROM mysql:5.7.17

COPY ./conf/custom.cnf /etc/mysql/mysql.conf.d/custom.cnf
custom.cnf
[mysqld]
transaction-isolation = READ-COMMITTED

character-set-server = utf8mb4
collation-server = utf8mb4_bin
skip-character-set-client-handshake

実行

$ vagrant up
$ ansible-playbook -i hosts site.yml

確認

MySQL Workbenchでtcp over SSHで接続して確認します。

スクリーンショット 2017-09-27 23.03.28.png

これでdocker上のMySQLに接続確認ができました。

ansible-containerはより、こっちの方が楽ですね。

github サンプル

8
9
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
8
9