1

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

4

2 回答 2

1

如果你想在容器中运行脚本,你应该创建一个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
于 2016-10-13T19:20:03.323 回答
1

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

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查看此文档以获取等效命令。

于 2016-10-12T18:25:16.883 回答