LoginSignup
2
2

More than 5 years have passed since last update.

ansible-containerでvagrant上のdocker-ceにコンテナを作成する

Last updated at Posted at 2017-09-27

前回はdocker for macにansible-containerを使ってdockerコンテナを作成しましたが、今回はvagrant上のdockerにdockerコンテナを立ち上げます。
ポイントはdocker apiを使っているので、ホストからvagrantのdockerにアクセスできるようにするところです。

環境

  • vagrant
  • ansible-container 0.9.2(0.9.1はうまくいかないので注意)

ansible-containerのインストール

$ pip install ansible-container[docker]

ソースコード

作成するのは以下のファイルです。

  • Vagrantfile
  • hosts
  • docker.yml
  • container.yml
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

ホスト側からdocker apiにアクセスできるようにするため、
ansibleのreplaceコマンドでdocker.serviceを編集しています。

How do I expose the docker API over TCP?

    replace: dest=/lib/systemd/system/docker.service regexp='^ExecStart.*$' replace='ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock' backup=yes

設定をしていないと以下のようなエラーが出ました。

192:ansible-container-remote us$ ansible-container build
ERROR   The connection to Docker was refused. Check your Docker environment configuration.  
docker.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: replace ExecStart
      replace: dest=/lib/systemd/system/docker.service regexp='^ExecStart.*$' replace='ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock' backup=yes

    - name: restart docker
      systemd:
        name: docker.service
        state: restarted
        daemon_reload: yes
        enabled: yes
container.yml
version: "2"
settings:
  conductor_base: centos:7

services:
  db:
    from: "mysql:latest"
    ports:
      - "13306:3306"
    environment:
      MYSQL_MAJOR: 5.7
      MYSQL_VERSION: 5.7.17
      MYSQL_DATABASE: sample
      MYSQL_USER: sample
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
registries: {}

実行

2つ目のポイントです。
環境変数 DOCKER_HOST にdockerのipを設定しています。

$ vagrant up
$ export DOCKER_HOST="tcp://192.168.33.10:2375"
$ ansible-playbook -i hosts docker.yml
$ ansible-container build
$ ansible-container run

確認

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

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

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

確認コマンド

$ curl -vvv http://192.168.33.10:2375/version
$ vagrant ssh
[vagrant@10 ~]$ docker exec -it ansiblecontainerremote_db_1 bash
[vagrant@10 ~]$ docker network ls
[vagrant@10 ~]$ docker network inspect ansiblecontainerremote_default
[vagrant@10 ~]$ docker logs ansiblecontainerremote_db_1

github サンプル

2
2
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
2
2