【问题标题】:create a dockerfile to run python and groovy app创建一个 dockerfile 来运行 python 和 groovy 应用程序
【发布时间】:2023-03-14 23:25:01
【问题描述】:

我正在开展一个项目,该项目同时使用 python 和 groovy 从网站上抓取数据并对该数据进行一些工程。

我想创建一个 dockerfile,它应该有一个 python(3.6.5) 作为基础镜像,并且应该安装 java8 和 groovy 来运行我的代码。

我现在拥有的 dockerfile 适用于所有 python 代码(图像:FROM python:3.6.5),但对于 groovy 脚本失败,我找不到可用于在 dockerfile 中安装 groovy 的解决方案。

有没有人有 dockerfile 解决这部分问题?

##########docker文件下面#############

FROM python:3.6.5

RUN sh -c "ls /usr/local/lib"


RUN sh -c "cat /etc/*-release"

# Contents of requirements.txt each on a separate line for incremental builds
RUN pip install SQLAlchemy==1.2.7
RUN pip install pandas==0.23.0
RUN pip uninstall bson
RUN pip install pymongo
RUN pip install openpyxl==2.5.3
RUN pip install joblib
RUN pip install impyla


RUN sh -c "mkdir -p /src/dateng"

ADD . /src/dateng

RUN sh -c "ls /src/dateng"

WORKDIR /src/dateng/

ENTRYPOINT ["python", "/src/dateng/_aws/trigger.py"]

【问题讨论】:

  • 您需要分享您当前的 Dockerfile,以便我们为您提供帮助。
  • dockerfile 已添加,请检查
  • 是否绝对需要在同一个容器中同时拥有 python 和 java 代码?一个非常复杂的容器设计可能比两个通过简单 REST API 通信的基本容器更难使用。或者,当任何一种语言都可能能够处理您正在做的工作的两个部分时,您是否有某些原因必须使用 groovy/python?
  • 它可能是 python 和 groovy 的 2 个不同的容器,但它需要一些复杂的同步。因此,我正在避免这种情况。我同意你的观点,两种语言都能够处理这两个部分的工作,但我只是参与在 dockerization 之后将此代码移动到 aws,因为这是由其他人编码的。

标签: java python docker groovy java-8


【解决方案1】:

您不需要使用sh -c command,只需使用RUN command,并且我们不应在每个命令中使用 RUN 指令,而是应将它们仅分组到一个 RUN 中,因为每个 RUN 都是一个单独的层在 docker 镜像中,从而增加它的最终大小。

可能的解决方案

灵感来自 this Dockerfile 我用于 Python 演示:

FROM python:3.6.5

ARG CONTAINER_USER="python"
ARG CONTAINER_UID="1000"

# Will not prompt for questions
ENV DEBIAN_FRONTEND=noninteractive \
    CONTAINER_USER=python \
    CONTAINER_UID=1000

RUN apt update && \
    apt -y upgrade && \
    apt -y install \
      ca-certificates \
      locales \
      tzdata \
      inotify-tools \
      python3-pip \
      groovy && \

    locale-gen en_GB.UTF-8 && \
    dpkg-reconfigure locales && \

    #https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers
    printf "fs.inotify.max_user_watches=524288\n" >> /etc/sysctl.conf && \

    useradd -m -u ${CONTAINER_UID} -s /bin/bash ${CONTAINER_USER}

ENV LANG=en_GB.UTF-8 \
    LANGUAGE=en_GB:en \
    LC_ALL=en_GB.UTF-8

USER ${CONTAINER_USER}

RUN pip3 install \
      fSQLAlchemy==1.2.7 \
      pandas==0.23.0 \
      pymongo \
      openpyxl==2.5.3 \
      joblib \
      impyla && \
    pip3 uninstall bson


# pip install will put the executables under ~/.local/bin
ENV PATH=/home/"${CONTAINER_USER}"/.local/bin:$PATH

WORKDIR /home/${CONTAINER_USER}/workspace

ADD . /home/${CONTAINER_USER}/dataeng

EXPOSE 5000

ENTRYPOINT ["python", "/home/python/dateng/_aws/trigger.py"]

注意:我在公司防火墙后面,因此我无法像现在这样测试构建此映像,因为我需要向其中添加您不需要的东西。如果有什么不适合你的,请告诉我,我会在家解决。

【讨论】:

  • 此答案仅在删除此行“USER ${CONTAINER_USER}”后才起作用,因为在更改用户后,安装包 sqlalchemy、pandas 等时出现了一些权限问题。我已将此答案标记为公认。谢谢
  • 您删除的行对于不以 root 身份运行您的应用程序是必要的,因为这是一种不好的做法和安全风险。稍后当我在家时,我将尝试调试它……在工作中,我在公司防火墙后面。你电脑的操作系统是什么?
  • 这个 python:3.6.5 将 debian 作为基础镜像,所以我在 docker 中运行它。我的电脑操作系统是 Windows 10
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2011-04-05
  • 1970-01-01
  • 2017-12-21
  • 2020-09-03
  • 1970-01-01
  • 2011-03-20
相关资源
最近更新 更多