在Dockerfile中从源代码安装python包

在Dockerfile中从源代码安装python包,python,docker,docker-compose,dockerfile,Python,Docker,Docker Compose,Dockerfile,我目前正在使用docker compose来使用芹菜的一个实例,芹菜是python队列管理器。然而,当我扩展代码时,我希望能够使用谷歌的工具或软件包。但是,如果您使用的是python-3.6:alpine(如本文所述),则必须从源代码安装或安装工具。我曾尝试使用非阿尔卑斯版本的python,但后来我遇到了芹菜的问题,所以我认为从源代码安装是前进的方向 我对使用Docker比较陌生,所以我很难做到这一点。只需添加运行git clone-b masterhttps://github.com/goog

我目前正在使用docker compose来使用芹菜的一个实例,芹菜是python队列管理器。然而,当我扩展代码时,我希望能够使用谷歌的工具或软件包。但是,如果您使用的是python-3.6:alpine(如本文所述),则必须从源代码安装或安装工具。我曾尝试使用非阿尔卑斯版本的python,但后来我遇到了芹菜的问题,所以我认为从源代码安装是前进的方向

我对使用Docker比较陌生,所以我很难做到这一点。只需添加
运行git clone-b masterhttps://github.com/google/or-tools
这里提到的其余命令:到Dockerfile不起作用。它说git不是命令,但如果我尝试使用
运行sudo apt install git
安装它,它会告诉我sudo不是命令

我是否需要在dockerfile中添加其他部分,例如:

FROM: ubuntu
RUN git clone -b master https://github.com/google/or-tools
如果是这样,那么正确的方法是什么,并确保它链接到Dockerfile的其他部分,以便我可以在python代码中使用或使用工具

DOCKERFILE:

FROM python:3.6-alpine
ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0
ENV C_FORCE_ROOT true
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD celery -A celeryExample worker --concurrency=1 --loglevel=info 
DOCKER-COMPOSE:

version: '3'

services:
  redis:
    image: redis
    ports:
      - 6379:6379

  celery: 
    build: 
        context: .
        dockerfile: Dockerfile.celery
    depends_on:
      - redis
    volumes: 
        - .:/usr/src/app    

要求:

celery
redis
requests

您非常接近它,可以在同一执行过程中从其他图像中获取依赖项。
请尝试以下Dockerfile:

FROM ubuntu
RUN apt-get update && apt-get install -y git
RUN git clone -b master https://github.com/google/or-tools
FROM python:3.6-alpine
ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0
ENV C_FORCE_ROOT true
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD celery -A celeryExample worker --concurrency=1 --loglevel=info
它说git不是命令,但如果我尝试使用runsudoapt install git安装它,它会告诉我sudo不是命令

名为
python:3.6-alpine
的基本图像公开了用户“root”,这意味着不需要sudo(您已经是root)。在Docker中,您几乎从不使用sudo或使用密码登录用户,因为这很麻烦,Docker还有其他处理用户的方法,例如
USER
语法:

FROM python:3.6-alpine
USER root
# All commands will be run as user root
...
USER foo
# All commands will be run as user foo
...
python:3.6-alpine
没有
apt
,而是使用
apk
。请在此处阅读有关阿尔卑斯山图像的更多信息:

在不使用sudo的情况下使用
运行apk add git

FROM python:3.6-alpine
RUN apk add git
...
这样做的正确方法是什么,并确保它链接到Dockerfile的另一部分,以便我可以在python代码中使用或使用工具

我不知道正确的方法是什么,但我会尝试在Dockerfile中使用您正在使用的基本映像构建所需的依赖项