こんにちは! 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 centos1RUN 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 MB2. 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いかがでしたでしょうか?
次回もお楽しみに!!!