【问题标题】:How to install python on a docker container如何在 docker 容器上安装 python
【发布时间】:2020-12-21 15:18:31
【问题描述】:

我创建了一个 docker-compose yml 文件来在 docker 容器中运行 cron-job。

将在 docker 容器内运行的 cron-job 必须运行 python 脚本并通过 redis- 连接到 mysqlredis -哨兵。

Cron-job 需要 python 和需要的 python-dependencies(mysql 和 redis sentinel) 安装在 docker 容器中才能成功运行 python 脚本。

这是我的 docker-compose yml 文件

version: '3'
services:
  cron-job:
    image: alpine:3.10
    command: crond -f -d 8
    volumes:
      - /Users/anshul/cron:/etc/crontabs/root:z
    restart: unless-stopped
networks:
  default:
    external:
      name: cnet

我需要在此处进行哪些更改才能在 docker 容器上安装 python 和所需的依赖项,这将在运行此 compose 文件后出现。

【问题讨论】:

  • 直接使用 python 图像而不是 alpine 可能会更好。高山对您有要求吗?
  • 不,我不需要 alpine,但是如果我使用 python 映像,那么 mysql 和 redis 依赖项呢。
  • 如果你还想在docker中运行它们,mysql和redis必须是单独的服务
  • 它们都应该在同一个 docker-compose 文件中以共享同一个网络。那么你可能在你的 requirements.txt 中拥有所有需要的依赖项(如@mikhail-pashkov 的回答中所述)
  • 好的,然后按照 aswer 中的说明安装您的要求。

标签: python mysql docker docker-compose redis-sentinel


【解决方案1】:

可以直接使用python镜像(如果需要alpine,有基于它的版本)https://hub.docker.com/_/python 我认为解决您的请求的最佳方法是构建您自己的 docker 映像:

创建 docker 文件

Dockerfile

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

在本例中,您将需求存储在 requirements.txt 文件中。

您可以使用pip freeze > requirements.txt 命令构建需求文件(如果您使用虚拟环境,则很有用)

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir {mysql package name} {redis package name}

然后你可以将它推送到你的 docker hub 注册表中,或者直接从你的 docker-compose 构建和使用它

构建您的映像并与 docker compose 一起使用

第一种方式

您可以构建并将其推送到 docker hub(在这里您可以找到更多信息:https://docs.docker.com/get-started/part3/

那么你的 docker compose 会是这样的:

docker-compose.yaml

version: '3'
services:
  cron-job:
    image: dockerhub-login/your-image-name:tag
    ...
第二种方式

您可以在 docker-compose 中使用 Dockerfile:

docker-compose.yaml

version: '3'
services:
  cron-job:
    build: path/to/Dockerfile
    ...

如果Dockerfiledocker-compose.yaml在同一目录下,则可以使用build: .

【讨论】:

  • 但是这里你仍然需要在单独的服务中运行mysql和redis,比如上面提到的@fpietka
  • 我需要安装的依赖项应该在单独的行中,在 requirements.txt 文件中。
  • 现在我已经通过 RUN pip install --no-cache-dir {mysql package name} {redis package name}
猜你喜欢
  • 2023-01-18
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2017-11-11
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多