Python 到 运行 docker 的脚本
Python script to run docker
python 脚本的流程:
- 我想从 python 脚本中 运行 docker 图片。
- 在 运行 生成 docker 图像后,我需要执行一个 shell 脚本,在 docker 容器中创建一个 tar 文件。
- 我需要将 tar 文件从 docker 容器复制到主机。
- 然后 python 脚本应该继续一些要在主机上执行的东西。
使用 docker-py 模块,我能够执行以下操作:
pip install docker-py
docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 05:22:43 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 05:22:43 2016
OS/Arch: linux/amd64
>>> import docker
>>> c = docker.Client(base_url='unix://var/run/docker.sock',version='1.12',timeout=10)
>>> c.images()
[{u'Created': 1476217543, u'Labels': {}, u'VirtualSize': 5712315133, u'ParentId': u'sha256:1ba2be8d70b6ede3b68b1af50759e674345236dd952225fcbfbcc1781f370252', u'RepoTags': [u'ubuntu14.04_64:latest'], u'RepoDigests': None, u'Id': u'sha256:1c8ced0fb34d776adafaed938d41a69e3bab87466beaa8752d49bde0d81230c5', u'Size': 5712315133}]
>>> ctr = c.create_container('ubuntu14.04_64:latest')
>>> c.start(ctr)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d685766385e7 ubuntu14.04_64:latest "bash" 16 hours ago Up 16 hours focused_fermi
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu14.04_64 latest 1c8ced0fb34d 21 hours ago 5.712 GB
我在主机上看到 docker 图像和容器 运行ning,但是现在如果我想 运行 shell 脚本在 docker 容器中,如何我可以这样做吗?之后我还需要将 tar 从容器复制到主机。有人可以建议怎么做吗?
这可能是您想要的命令序列(借用this answer):
docker create --name tmp -it ubuntu14.04_64:latest
docker start tmp
docker exec tmp tar czvf tmp.tgz etc/os-release
docker stop tmp
docker cp tmp:tmp.tgz tmp.tgz
docker rm tmp
在 this documentation 中查找与 docker-py 等效的命令。
如果您想 运行 容器中的脚本,您应该创建一个包含该脚本的 Dockerfile
。示例可能如下所示:
FROM ubuntu14.04_64:latest
COPY ./script.sh /code/script.sh
CMD /code/script.sh -o /target/output.tar.gz
那么您的 python 脚本将如下所示:
#!/usr/bin/env python
import docker
c = docker.from_env()
c.build('.', image_name)
ctr = c.create_container(image_name, volumes='./target:/target')
c.start(ctr)
# the tarball is now at ./target/output.tar.gz, copy it where you want it
python 脚本的流程:
- 我想从 python 脚本中 运行 docker 图片。
- 在 运行 生成 docker 图像后,我需要执行一个 shell 脚本,在 docker 容器中创建一个 tar 文件。
- 我需要将 tar 文件从 docker 容器复制到主机。
- 然后 python 脚本应该继续一些要在主机上执行的东西。
使用 docker-py 模块,我能够执行以下操作:
pip install docker-py
docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 05:22:43 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 05:22:43 2016
OS/Arch: linux/amd64
>>> import docker
>>> c = docker.Client(base_url='unix://var/run/docker.sock',version='1.12',timeout=10)
>>> c.images()
[{u'Created': 1476217543, u'Labels': {}, u'VirtualSize': 5712315133, u'ParentId': u'sha256:1ba2be8d70b6ede3b68b1af50759e674345236dd952225fcbfbcc1781f370252', u'RepoTags': [u'ubuntu14.04_64:latest'], u'RepoDigests': None, u'Id': u'sha256:1c8ced0fb34d776adafaed938d41a69e3bab87466beaa8752d49bde0d81230c5', u'Size': 5712315133}]
>>> ctr = c.create_container('ubuntu14.04_64:latest')
>>> c.start(ctr)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d685766385e7 ubuntu14.04_64:latest "bash" 16 hours ago Up 16 hours focused_fermi
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu14.04_64 latest 1c8ced0fb34d 21 hours ago 5.712 GB
我在主机上看到 docker 图像和容器 运行ning,但是现在如果我想 运行 shell 脚本在 docker 容器中,如何我可以这样做吗?之后我还需要将 tar 从容器复制到主机。有人可以建议怎么做吗?
这可能是您想要的命令序列(借用this answer):
docker create --name tmp -it ubuntu14.04_64:latest
docker start tmp
docker exec tmp tar czvf tmp.tgz etc/os-release
docker stop tmp
docker cp tmp:tmp.tgz tmp.tgz
docker rm tmp
在 this documentation 中查找与 docker-py 等效的命令。
如果您想 运行 容器中的脚本,您应该创建一个包含该脚本的 Dockerfile
。示例可能如下所示:
FROM ubuntu14.04_64:latest
COPY ./script.sh /code/script.sh
CMD /code/script.sh -o /target/output.tar.gz
那么您的 python 脚本将如下所示:
#!/usr/bin/env python
import docker
c = docker.from_env()
c.build('.', image_name)
ctr = c.create_container(image_name, volumes='./target:/target')
c.start(ctr)
# the tarball is now at ./target/output.tar.gz, copy it where you want it