从Dockerfile中的源代码安装python软件包

时间:2019-08-25 10:36:21

标签: python docker docker-compose dockerfile

我目前正在使用docker-compose来使用python队列管理器Celery的实例。但是,在扩展代码时,我希望能够使用Google的OR工具包。但是,如果您使用的是python-3.6:alpine,则必须从源代码安装OR-tools(如此处讨论:pip install ortools: No matching distribution - Alpine)。我曾尝试使用非高山版本的python,但随后遇到Celery问题,因此我认为从源代码安装是前进的方向。

我相对不熟悉Docker,因此很难做到这一点。仅将RUN git clone -b master https://github.com/google/or-tools和此处提到的其余命令:https://developers.google.com/optimization/install/python/source_linux添加到Dockerfile中是行不通的。它说git不是命令,但是如果我尝试使用RUN sudo apt install git来安装它,则会告诉我sudo不是命令。

我需要在我的dockerfile中添加另一部分吗?

FROM: ubuntu
RUN git clone -b master https://github.com/google/or-tools

如果是,执行此操作的正确方法是什么,并确保将其链接到我的Dockerfile的另一部分,以便可以在python代码中使用OR工具?

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

2 个答案:

答案 0 :(得分:0)

您非常接近它,可以在同一执行中从其他映像中获取依赖项。
尝试以下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

答案 1 :(得分:0)

  

它说git不是命令,但是如果我尝试使用RUN sudo apt 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。在此处阅读有关高山图片的更多信息:https://hub.docker.com/_/alpine

使用RUN apk add git而不使用sudo:

FROM python:3.6-alpine
RUN apk add git
...
  

执行此操作的正确方法是什么,并确保将其链接到我的Dockerfile的另一部分,以便我可以在python代码中使用OR工具?

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