java - 创建一个 dockerfile 来运行 python 和 groovy 应用程序
问题描述
我正在做一个项目,该项目同时使用 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"]
解决方案
您不需要使用sh -c command
,只是RUN command
我们不应该对每个命令使用 RUN 指令,而是应该将它们组合在一个RUN
中,因为每个RUN
都是 docker 映像中的一个单独的层,从而增加了它的最终大小。
可能的解决方案
在我用于 Python 演示的这个 Dockerfile中受到启发:
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"]
注意:我在公司防火墙后面,因此我无法像现在一样测试构建此映像,因为我需要向其中添加您不需要的东西。如果有什么不适合你的,请告诉我,我会在家里解决。
推荐阅读
- python - 我应该如何使用 pip 安装软件包?
- c# - 如何在 ASP.NET 中将值从视图传递到存储库?
- java - 在 HTTP 安全配置 authorizeRequests() 上获取声纳严重缺陷
- node.js - Angular PreRendering / Ng Universal 部署
- r - 具有两个变量但仅显示一个构面标签的构面网格
- ocaml - 禁用 ocaml opam 中的可选依赖项安装
- python - 当我只需要它循环一次时,程序循环了两次
- xcode - 现在在 Xcode 中禁用了允许并排查看两个文件的按钮
- css - 我对小屏幕的媒体查询没有按照应有的方式堆叠
- java - spring rest 模板和 javax.ws.rs 客户端有什么区别?