こんにちは! JQです。
前回は『OSS編~Dockerを試してみる②~』と題して、コンテナ型の仮想化ツールであるDockerを利用してApacheのイメージを作成して試してみました。
今回は『OSS編~Dockerを試してみる③~』と題して、docker-pyを利用してPythonからDockerを操作して試してみたいと思います。
インストール
1.docker-pyのインストール
pipを利用してインストールしてみます。
1 |
$ sudo pip install docker-py |
操作
2.Pythonでの操作
Python インタプリタで試してみます。
先ずはdocker-pyのインポートを行います。
1 2 |
$ sudo python >>> import docker |
次にDocker daemonとやり取りするClientを設定します。
1 2 3 |
>>> c = docker.Client(base_url='unix://var/run/docker.sock', ... version='1.9', ... timeout=10) |
各種情報を確認してみます。
1 2 |
>>> c.version() {u'KernelVersion': u'3.10.35-43.137.amzn1.x86_64', u'Arch': u'amd64', u'Version': u'0.9.0', u'GitCommit': u'2b3fdf2/0.9.0', u'Os': u'linux', u'GoVersion': u'go1.2'} |
1 2 |
>>> c.info() {u'KernelVersion': u'3.10.35-43.137.amzn1.x86_64', u'NFd': 10, u'MemoryLimit': 1, u'InitSha1': u'f7884c1a78bc6bb3578b3c59ba66e0715eec062d', u'SwapLimit': 1, u'Driver': u'devicemapper', u'IndexServerAddress': u'https://index.docker.io/v1/', u'NGoroutines': 12, u'Images': 0, u'InitPath': u'/usr/libexec/docker/dockerinit', u'Containers': 0, u'ExecutionDriver': u'native-0.1', u'Debug': 0, u'NEventsListener': 0, u'DriverStatus': [[u'Pool Name', u'docker-202:1-134843-pool'], [u'Data file', u'/var/lib/docker/devicemapper/devicemapper/data'], [u'Metadata file', u'/var/lib/docker/devicemapper/devicemapper/metadata'], [u'Data Space Used', u'291.5 Mb'], [u'Data Space Total', u'102400.0 Mb'], [u'Metadata Space Used', u'0.7 Mb'], [u'Metadata Space Total', u'2048.0 Mb']], u'IPv4Forwarding': 1} |
イメージを確認してみます。
1 2 |
>>> c.images() [{u'Created': 1398233535, u'VirtualSize': 373006368, u'ParentId': u'cacd7fab2b50c02f051beb685fc8e26cb55f08038c76c813204b9b0cc4f60e14', u'RepoTags': [u'devcentos/apache:latest'], u'Id': u'3bfed54aa9c1f3480be18eaf7f1fa80c940b7b8a6785324eec15fddbdbf7869e', u'Size': 0}, {u'Created': 1398233190, u'VirtualSize': 373006368, u'ParentId': u'12c5f044d883951df94044935ec64280d8c19d1ab0b64cd04ab1fe8010929b36', u'RepoTags': [u'<none>:<none>'], u'Id': u'e10082e3a7a4098ded3ff3b674b4716b9d0cf5b3f20dc24280a8c4c03fb6405a', u'Size': 0}, {u'Created': 1398233015, u'VirtualSize': 373006368, u'ParentId': u'9137a6e1f891aac797b4317717947617488167dce26e71aca9cfef5df96a00b6', u'RepoTags': [u'<none>:<none>'], u'Id': u'64abf57c8eff8751b35832834d696b84ec6381f09e9ea4cc0cbf6c800354dfd3', u'Size': 0}, {u'Created': 1397672650, u'VirtualSize': 297644647, u'ParentId': u'7064731afe90d78da2c117d64a1221c826234cd7145fd330ae7e207ff5606980', u'RepoTags': [u'centos:centos6', u'centos:latest'], u'Id': u'0b443ba0395813ef287c27f5ff953121a69ab23c467ffbefcefaec3f255e0693', u'Size': 297644647}, {u'Created': 1364804458, u'VirtualSize': 300557462, u'ParentId': u'', u'RepoTags': [u'centos:6.4'], u'Id': u'539c0211cd76cdeaedbecf9f023ef774612e331137ce7ebe4ae1b61088e7edbe', u'Size': 300557462}] |
コンテナを確認してみます。
1 2 |
>>> c.containers() [] |
以下のDockerfileをBuildしたイメージのコンテナを起動してみます。
1 |
FROM centos |
1 2 |
RUN yum -y install httpd CMD /usr/sbin/apachectl -D FOREGROUND |
1 2 3 4 |
>>> containerid = c.create_container(image='devcentos/apache',ports=[80]) >>> c.start(containerid['Id'],port_bindings={80:8080}) >>> c.containers() [{u'Status': u'Up 52 seconds', u'Created': 1398235264, u'Image': u'devcentos/apache:latest', u'Ports': [{u'IP': u'0.0.0.0', u'Type': u'tcp', u'PublicPort': 8080, u'PrivatePort': 80}], u'Command': u'/bin/sh -c /usr/sbin/apachectl -D FOREGROUND', u'Names': [u'/insane_bohr'], u'Id': u'd7150972ee69587ba89ba0de8baea768a96c7bfafe80c0a88d60c1012f08e556'}] |
実際に確認してみます。
1 2 3 4 5 6 |
$ wget localhost:8080 --2014-04-23 06:43:27-- http://localhost:8080/ Resolving localhost (localhost)... 127.0.0.1 Connecting to localhost (localhost)|127.0.0.1|:8080... connected. HTTP request sent, awaiting response... 403 Forbidden 2014-04-23 06:43:27 ERROR 403: Forbidden. |
いかがでしたでしょうか?
次回は『OSS編~Dockerを試してみる④~』と題して、AnsibleからDockerを操作して試してみたいと思います。
お楽しみに!!!