Docker文件,用于使用Pandas运行Python

Docker文件,用于使用Pandas运行Python,docker,Docker,我已经创建了以下Dockerfile FROM python COPY . /home CMD pip install pandas CMD mkdir /home/report CMD mkdir /home/data CMD python /home/hello.py 其中hello.py是简单的Python脚本 name = input('What is your Name? ') print('Nice to meet you', name) from pandas import r

我已经创建了以下Dockerfile

FROM python
COPY . /home
CMD pip install pandas
CMD mkdir /home/report
CMD mkdir /home/data
CMD python /home/hello.py
其中
hello.py
是简单的Python脚本

name = input('What is your Name? ')
print('Nice to meet you', name)

from pandas import read_csv
mydf = read_csv('mycsv.csv')
print(mydf.head())
然后,我使用
Docker build-t myexample.
构建Docker映像,并使用
Docker run-it myexample bash运行它,以便通过shell与它交互。建筑运行正常,运行时我显示了shell提示符,但是:

  • /home
    下未创建任何目录
    报告
    数据
  • 最后一个命令
    python/home/hello.py
    不会单独执行。我必须自己键入才能运行脚本
  • 键入
    python/home/hello.py
    后,问候和提示输入我的名字的前两行将正确执行,但随后出现一个错误,表示pandas未知
  • 直到我手动安装pandas,整个脚本才能正确运行
因此,总之,似乎没有考虑到
CMD
语句。我做错了什么?

当图像使用
运行
执行命令时。然后,仅使用CMD一次来声明将在生成后启动容器的命令(因此只有CMD):

Dockerfile:

FROM python
RUN pip install pandas
RUN mkdir /home/report
RUN mkdir /home/data

COPY . /home
WORKDIR /home
CMD python /home/hello.py
mycsv.csv:

a,b,c
1,2,3
4,5,6
使用:
docker构建构建-t测试

运行:

注:

  • 作为一般规则,最好将2条RUN语句折叠为一条语句,以便创建一个层
  • 我建议您使用比/home更好的目录
  • 使用卷存储数据和日志
只有最后一个CMD有效,您应该用一个run替换所有其他CMD为什么建议使用除
/home
之外的其他目录?你能举个例子吗?
▶ docker run -it pandas-test
What is your Name? Tfovid
Nice to meet you Tfovid
   a  b  c
0  1  2  3
1  4  5  6
FROM python
RUN pip install --no-cache-dir pandas && \
    mkdir /home/report /home/data && \
    chmod +x /home/hello.py
COPY . /home
VOLUME /home/report /home/data
WORKDIR /home
ENTRYPOINT /home/hello.py