【问题标题】:How to make multiple runtimes available inside docker? Like how Java and python altogether inside docker with required dependencies like asyncpg如何在 docker 中提供多个运行时?就像 Java 和 python 完全在 docker 中一样,并且需要像 asyncpg 这样的依赖项
【发布时间】:2021-04-20 10:56:21
【问题描述】:

我在一个 Java spring boot 应用程序中工作,作为 docker 容器运行。

这个应用程序的主要目的是执行 python 脚本。 所以在 docker 容器内,我必须提供可用的 python 环境。我用这段代码添加了 python 运行时。 但似乎这是非常基本的 python 版本,我无法提供其他重要的库。

比如,我想添加“asyncpg”库,以便我可以使用连接池。

但它不允许我添加 asyncpg 库。

下面是docker文件。

注意:我已经评论了“#FROM python:3.6-alpine”,如果我打开它,则 java 运行时将不可用,即“FROM openjdk:8u191-jre-alpine3.8”

------- Docker 文件 --------------

*FROM openjdk:8u191-jre-alpine3.8
#FROM python:3.6-alpine
## Install bash
RUN apk add --no-cache curl tar bash
ENV APP_HOME /opt/app
# Create directory structure
RUN mkdir -p ${APP_HOME}/logs
RUN mkdir -p ${APP_HOME}/config
RUN mkdir -p ${APP_HOME}/libs
RUN mkdir -p ${APP_HOME}/scripts
# Add supporting script
ADD start.sh ${APP_HOME}/start.sh
RUN chmod +x ${APP_HOME}/start.sh
ADD wait-for-it.sh ${APP_HOME}/wait-for-it.sh
RUN chmod +x ${APP_HOME}/wait-for-it.sh
ADD load-ext-packages.sh ${APP_HOME}/load-ext-packages.sh
RUN chmod +x ${APP_HOME}/load-ext-packages.sh
## Add Spring Boot runnable jar
ADD *.jar ${APP_HOME}/
WORKDIR ${APP_HOME}
VOLUME [ "${APP_HOME}/logs" ]
VOLUME [ "${APP_HOME}/config" ]
VOLUME [ "${APP_HOME}/libs" ]
VOLUME [ "${APP_HOME}/scripts" ]
    
# Install Python
RUN apk add build-base 
RUN apk add --update gcc
RUN apk --update add gcc build-base freetype-dev libpng-dev openblas-dev
RUN apk add --no-cache python3 python3-dev libevent-dev && \
    python3 -m ensurepip && \
    rm -r /usr/lib/python*/ensurepip && \
    pip3 install --upgrade pip setuptools && \
    pip3 install wheel && \
    pip3 install --no-cache-dir asyncpg && \
    if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
    if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
    rm -r /root/.cache
CMD ["./start.sh"]*

【问题讨论】:

    标签: java python linux docker asyncpg


    【解决方案1】:

    我有一个解决方案 .. 在 docker 文件的第一行,我将首先清除“FROM alpine:3.7”,然后在 docker 文件中,我将相应地继续添加所需的运行时和依赖库.这样我们可以添加多个运行时。

    在工作的 docker compose 下方,我注释掉了 openjdk 和 python 运行时的行,并添加了 FROM alpine:3.7: 还有一些将 asyncpg 库添加到 python 运行时的技巧。这样我现在可以添加任何依赖项。 我现在可以处理 asyncpg。

    -------- Docker 文件----------------

    *#FROM openjdk:8u191-jre-alpine3.8
    #FROM python:3.6-alpine
    FROM alpine:3.7
    ## Install bash
    RUN apk add --no-cache curl tar bash
    ENV APP_HOME /opt/app
    # Create directory structure
    RUN mkdir -p ${APP_HOME}/logs
    RUN mkdir -p ${APP_HOME}/config
    RUN mkdir -p ${APP_HOME}/libs
    RUN mkdir -p ${APP_HOME}/scripts
    # Add supporting script
    ADD start.sh ${APP_HOME}/start.sh
    RUN chmod +x ${APP_HOME}/start.sh
    ADD wait-for-it.sh ${APP_HOME}/wait-for-it.sh
    RUN chmod +x ${APP_HOME}/wait-for-it.sh
    ADD load-ext-packages.sh ${APP_HOME}/load-ext-packages.sh
    RUN chmod +x ${APP_HOME}/load-ext-packages.sh
    ## Add Spring Boot runnable jar
    ADD *.jar ${APP_HOME}/
    WORKDIR ${APP_HOME}
    VOLUME [ "${APP_HOME}/logs" ]
    VOLUME [ "${APP_HOME}/config" ]
    VOLUME [ "${APP_HOME}/libs" ]
    VOLUME [ "${APP_HOME}/scripts" ]
        
    RUN apk add build-base --no-cache python3 python3-dev && \
        python3 -m ensurepip && \
        rm -r /usr/lib/python*/ensurepip && \
        pip3 install --upgrade pip setuptools && \
        pip3 install --no-cache-dir asyncpg && \
        if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
        if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
        rm -r /root/.cache
    RUN apk update \
    && apk upgrade \
    && apk add --no-cache bash \
    && apk add --no-cache --virtual=build-dependencies unzip \
    && apk add --no-cache curl \
    && apk add --no-cache openjdk8-jre
    CMD ["./start.sh"]*
    

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 2013-10-11
      • 1970-01-01
      相关资源
      最近更新 更多