在没有Web服务器的情况下在Docker中运行Python脚本?

时间:2019-03-04 12:45:35

标签: python docker

我以前一直在与Docker合作,使用服务来运行由Django创建的网站。

现在,我想知道我应该如何创建一个Docker,以在没有Web服务器和与网站相关的任何服务的情况下仅运行Python脚本。

我曾经工作过的普通码头工人的例子是:

version: '2'
services:
  nginx:
    image: nginx:latest
    container_name: nz01
    ports:
      - "8001:8000"
    volumes:
      - ./src:/src
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - web
  web:
    build: .
    container_name: dz01
    depends_on:
      - db
    volumes:
      - ./src:/src
    expose:
      - "8000"
  db:
    image: postgres:latest
    container_name: pz01
    ports:
        - "5433:5432"
    volumes:
      - postgres_database:/var/lib/postgresql/data:Z
volumes:
    postgres_database:
        external: true

docker-compose.yml文件应该如何?

3 个答案:

答案 0 :(得分:5)

只需从Dockerfile中删除与脚本无关的所有内容,并以简单的内容开始,例如

FROM python:3

ADD my_script.py /

CMD [ "python", "./my_script.py" ]

您不需要Docker compose即可将单个python脚本容器化。

该示例取自以下有关容器化Python应用程序的简单教程:https://runnable.com/docker/python/dockerize-your-python-application

从映像启动容器时,您可以轻松覆盖Dockerfile中指定的命令(通过CMD)。只需将所需的命令附加到您的docker run命令中即可,例如:

docker run IMAGE /path/to/script.py

答案 1 :(得分:1)

您可以轻松地以交互方式运行Python,而无需构建容器:

docker run -it python

如果您想访问在容器中编写的某些代码,只需将其更改为:

docker run -it -v /path/to/code:/app: python

对于这个简单的应用程序,不需要创建Dockerfile。

答案 2 :(得分:0)

大多数Linux发行版都预装有Python。在这里使用Docker会增加大量的复杂性,我强烈建议不要运行简单的脚本来反对Docker。您可以使用virtual environment来将特定Python包的依赖项与系统其余部分隔离。

(关于主要希望与主机系统进行交互的脚本正确获取文件系统权限和用户ID的问题非常一致。另外请记住,运行docker意味着与根等效的权限。如果您不希望Docker的文件系统和用户名称空间隔离,恕我直言,在没有意义的地方不使用Docker会更容易。