OSS編~Dockerを試してみる④~

こんにちは! JQです。

前回は『 OSS編~Dockerを試してみる③~ 』と題して、docker-pyを利用してPythonからDockerを操作して試してみました。

今回は『OSS編~Dockerを試してみる④~』と題して、AnsibleからDockerを操作して試してみたいと思います。

Ansible設定

1.Ansibleの設定

先ずはローカルに対してAnsibleを実行出来るように設定を行っておきます。

詳細はこちらの記事をご参照ください。

イメージの作成

1. docker_imageモジュールの利用

Ansibleのdocker_imageを利用してDockerのイメージを作成します。

ApacheをインストールするDockerfileを作成します。

1$ vim Dockerfile2FROM centos
1RUN yum -y install httpd2CMD /usr/sbin/apachectl -D FOREGROUND

次に作成したDockerfileを作成するymlファイルを作成します。

「path」にはDockerfileがあるディレクトリを指定します。

1$ vim docker.yml2- name: Docker3  hosts: test4  remote_user: ec2-user5  sudo: yes6  tasks:7  - name: check or build image8    docker_image: path="/home/ec2-user/" name="devcentos/apache" state=present

実行してみます。

1$ ansible-playbook docker.yml                                               23PLAY [Docker] *****************************************************************45GATHERING FACTS ***************************************************************6ok: [ec2-user@localhost]78TASK: [check or build image] **************************************************9changed: [ec2-user@localhost]1011PLAY RECAP ********************************************************************12ec2-user@localhost         : ok=2    changed=1    unreachable=0    failed=0

確認してみます。

1$ sudo docker images2REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE3devcentos/apache    latest              65d1bef282cd        4 minutes ago       373 MB4<none>              <none>              e10082e3a7a4        2 hours ago         373 MB5<none>              <none>              64abf57c8eff        2 hours ago         373 MB6centos              centos6             0b443ba03958        6 days ago          297.6 MB7centos              latest              0b443ba03958        6 days ago          297.6 MB8centos              6.4                 539c0211cd76        12 months ago       300.6 MB

2. docker (manage)モジュールの利用

次にdocker(manage)モジュールを利用してコンテナを起動してみます。

次の様にtasksを変更します。

1$ vim docker.yml2- name: Docker3  hosts: test4  remote_user: ec2-user5  sudo: yes6  tasks:7  - name: run devcentos/apache8    docker: image=devcentos/apache ports=8080:809  - name: Display IP address and port mappings for containers10    debug: msg={{inventory_hostname}}:{{item['HostConfig']['PortBindings']['80/tcp'][0]['HostPort']}}11    with_items: docker_containers

実行してみます。

1$ ansible-playbook docker.yml23PLAY [Docker] *****************************************************************45GATHERING FACTS ***************************************************************6ok: [ec2-user@localhost]78TASK: [run devcentos/apache] **************************************************9changed: [ec2-user@localhost]1011TASK: [Display IP address and port mappings for containers] *******************1213ok: [ec2-user@localhost] => (item={u'HostsPath': u'/var/lib/docker/containers/ad0b7d44630fb53a77b46bb5e829d42d622c9f9761c5fb30bb0d02ff335581d2/hosts', u'Created': u'2014-04-23T09:27:44.89622808Z', u'Image': u'65d1bef282cdaa5e2ec59f44d0cdece7e0098b848df4014a8cabbe972c7c5ad1', u'Args': [u'-c', u'/usr/sbin/apachectl -D FOREGROUND'], u'Driver': u'devicemapper', u'HostConfig': {u'ContainerIDFile': u'', u'Links': None, u'LxcConf': None, u'PortBindings': {u'80/tcp': [{u'HostIp': u'0.0.0.0', u'HostPort': u'8080'}]}, u'Binds': None, u'PublishAllPorts': False, u'Privileged': False}, u'Id': u'ad0b7d44630fb53a77b46bb5e829d42d622c9f9761c5fb30bb0d02ff335581d2', u'State': {u'Ghost': False, u'Pid': 30186, u'Running': True, u'FinishedAt': u'0001-01-01T00:00:00Z', u'StartedAt': u'2014-04-23T09:27:45.647950876Z', u'ExitCode': 0}, u'ExecDriver': u'native-0.1', u'ResolvConfPath': u'/etc/resolv.conf', u'Volumes': {}, u'Path': u'/bin/sh', u'HostnamePath': u'/var/lib/docker/containers/ad0b7d44630fb53a77b46bb5e829d42d622c9f9761c5fb30bb0d02ff335581d2/hostname', u'Config': {u'Env': [u'HOME=/', u'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'], u'Hostname': u'ad0b7d44630f', u'Entrypoint': None, u'Dns': None, u'Memory': 0, u'OnBuild': None, u'OpenStdin': False, u'User': u'', u'CpuShares': 0, u'AttachStdout': False, u'NetworkDisabled': False, u'WorkingDir': u'', u'Cmd': [u'/bin/sh', u'-c', u'/usr/sbin/apachectl -D FOREGROUND'], u'StdinOnce': False, u'PortSpecs': None, u'AttachStdin': False, u'Volumes': None, u'MemorySwap': 0, u'VolumesFrom': u'', u'Tty': False, u'AttachStderr': False, u'Domainname': u'', u'Image': u'devcentos/apache', u'ExposedPorts': None}, u'VolumesRW': {}, u'NetworkSettings': {u'Bridge': u'docker0', u'PortMapping': None, u'Gateway': u'172.17.42.1', u'IPPrefixLen': 16, u'IPAddress': u'172.17.0.2', u'Ports': {u'80/tcp': [{u'HostIp': u'0.0.0.0', u'HostPort': u'8080'}]}}, u'Name': u'/angry_brattain'}) => {14    "item": {15        "Args": [16            "-c",17            "/usr/sbin/apachectl -D FOREGROUND"18        ],19        "Config": {20            "AttachStderr": false,21            "AttachStdin": false,22            "AttachStdout": false,23            "Cmd": [24                "/bin/sh",25                "-c",26                "/usr/sbin/apachectl -D FOREGROUND"27            ],28            "CpuShares": 0,29            "Dns": null,30            "Domainname": "",31            "Entrypoint": null,32            "Env": [33                "HOME=/",34                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"35            ],36            "ExposedPorts": null,37            "Hostname": "ad0b7d44630f",38            "Image": "devcentos/apache",39            "Memory": 0,40            "MemorySwap": 0,41            "NetworkDisabled": false,42            "OnBuild": null,43            "OpenStdin": false,44            "PortSpecs": null,45            "StdinOnce": false,46            "Tty": false,47            "User": "",48            "Volumes": null,49            "VolumesFrom": "",50            "WorkingDir": ""51        },52        "Created": "2014-04-23T09:27:44.89622808Z",53        "Driver": "devicemapper",54        "ExecDriver": "native-0.1",55        "HostConfig": {56            "Binds": null,57            "ContainerIDFile": "",58            "Links": null,59            "LxcConf": null,60            "PortBindings": {61                "80/tcp": [62                    {63                        "HostIp": "0.0.0.0",64                        "HostPort": "8080"65                    }66                ]67            },68            "Privileged": false,69            "PublishAllPorts": false70        },7172        "HostnamePath": "/var/lib/docker/containers/ad0b7d44630fb53a77b46bb5e829d42d622c9f9761c5fb30bb0d02ff335581d2/hostname",73        "HostsPath": "/var/lib/docker/containers/ad0b7d44630fb53a77b46bb5e829d42d622c9f9761c5fb30bb0d02ff335581d2/hosts",74        "Id": "ad0b7d44630fb53a77b46bb5e829d42d622c9f9761c5fb30bb0d02ff335581d2",75        "Image": "65d1bef282cdaa5e2ec59f44d0cdece7e0098b848df4014a8cabbe972c7c5ad1",76        "Name": "/angry_brattain",77        "NetworkSettings": {78            "Bridge": "docker0",79            "Gateway": "172.17.42.1",80            "IPAddress": "172.17.0.2",81            "IPPrefixLen": 16,82            "PortMapping": null,83            "Ports": {84                "80/tcp": [85                    {86                        "HostIp": "0.0.0.0",87                        "HostPort": "8080"88                    }89                ]90            }91        },92        "Path": "/bin/sh",93        "ResolvConfPath": "/etc/resolv.conf",94        "State": {95            "ExitCode": 0,96            "FinishedAt": "0001-01-01T00:00:00Z",97            "Ghost": false,98            "Pid": 30186,99            "Running": true,100            "StartedAt": "2014-04-23T09:27:45.647950876Z"101        },102        "Volumes": {},103        "VolumesRW": {}104    },105    "msg": "ec2-user@localhost:8080"106}107108PLAY RECAP ********************************************************************109ec2-user@localhost         : ok=3    changed=1    unreachable=0    failed=0

確認してみます。

1$ sudo docker ps23CONTAINER ID        IMAGE                     COMMAND                CREATED              STATUS              PORTS                  NAMES4ad0b7d44630f        devcentos/apache:latest   /bin/sh -c /usr/sbin   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   angry_brattain

いかがでしたでしょうか?

次回もお楽しみに!!!

この記事を書いた人

aws-recipe-user