如何在docker容器上安装python

如何在docker容器上安装python,python,mysql,docker,docker-compose,redis-sentinel,Python,Mysql,Docker,Docker Compose,Redis Sentinel,我创建了一个docker compose yml文件,用于在docker容器中运行cron作业 将在docker容器中运行的cron作业必须运行python脚本,并通过redis sentinel连接到mysql和redis Cron作业需要python,并且需要在docker容器中安装python依赖项esmysql和redis sentinel才能成功运行python脚本 这是我的docker编写的yml文件 version: '3' services: cron-job: im

我创建了一个docker compose yml文件,用于在docker容器中运行cron作业

将在docker容器中运行的cron作业必须运行python脚本,并通过redis sentinel连接到mysql和redis

Cron作业需要python,并且需要在docker容器中安装python依赖项esmysql和redis sentinel才能成功运行python脚本

这是我的docker编写的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映像,因为有基于它的版本 我认为解决您的请求的最佳方法是建立您自己的docker形象:

创建docker文件 Dockerfile

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

如果使用虚拟环境,可以使用pip freeze>Requirements.txt命令生成需求文件

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

构建您的图像并与docker compose一起使用 第一路 您可以构建并将其推送到docker hub,您可以在此处找到更多信息:

那么您的docker编写将如下所示:

docker-compose.yaml

第二条路 您可以在docker compose中使用Dockerfile:

docker-compose.yaml


如果Dockerfile和docker-compose.yaml位于同一目录中,则可以使用build:。

直接使用python映像而不是alpine可能会更好。您需要alpine吗?不,我不需要alpine,但是如果我使用python映像,mysql和redis依赖关系如何。如果您还想在docker中运行它们,mysql和redis将必须是单独的服务,它们都应该在同一docker compose文件中以共享同一网络。然后,您可能拥有@mikhail pashkovOk的答案中所述的requirements.txt中所需的所有依赖项,然后只需按照aswer中所述安装您的需求即可。但在这里,您仍然需要在单独的服务中运行mysql和redis,像上面提到的@fpietka一样,我需要安装的依赖项应该在requirement.txt文件中的单独行中。现在我已经通过运行pip install-no cache dir{mysql package name}{redis package name}完成了安装
FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir {mysql package name} {redis package name}
version: '3'
services:
  cron-job:
    image: dockerhub-login/your-image-name:tag
    ...
version: '3'
services:
  cron-job:
    build: path/to/Dockerfile
    ...