运行docker的Python脚本

Python脚本的stream程:

  • 我想从Python脚本运行docker图像。
  • 运行docker映像后,我需要执行一个shell脚本,它在docker容器中创build一个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图像和容器在主机上运行,​​但现在如果我想在docker容器内运行shell脚本,我该怎么做? 之后,我需要从容器中复制tar到主机。 有人可以build议如何做到这一点?

如果你想在一个容器中运行一个脚本,你应该创build一个包含该脚本的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 

这可能是你想要的命令序列(借用这个答案 ):

 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 

通过这个文档查看与docker-py等效的命令。