【问题标题】:Docker create volumes in Dockerfile and compile app on itDocker 在 Dockerfile 中创建卷并在其上编译应用程序
【发布时间】:2020-02-23 10:55:59
【问题描述】:

在我的 docker django 项目中,我需要用于读/写目的,以便在我的 Dockerile 中创建一个卷并在其上安装/运行应用程序。

我找到了这篇文章:DockerFile on StackOverflow,但我真的不太了解它。

这是我的 Dockerfile:

FROM python:3.6-alpine
EXPOSE 8000
RUN apk update
RUN apk add --no-cache make linux-headers libffi-dev jpeg-dev zlib-dev
RUN apk add postgresql-dev gcc python3-dev musl-dev
RUN mkdir /Code

VOLUME /var/lib/cathstudio/data
WORKDIR /Code

COPY ./requirements.txt .

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1

COPY . /Code/

ENTRYPOINT python /Code/core/manage.py runserver 0.0.0.0:8000

在我的原始文件中,我添加了 VOLUME /var/lib/cathstudio/data 指令,但在那之后,我如何让我的其余代码使用该卷用于 WORKDIR、安装 requirements.txt、复制代码并运行应用程序?

我没有在构建后使用 -v 指令在 RUN 语句中指定它,我将直接在 dockerfile 中集成卷创建和管理。

提前非常感谢

【问题讨论】:

  • 您显示的 Dockerfile 看起来是正确的,并且是使用 Docker 的正常方式。为什么你认为你想要卷中的代码?

标签: python docker dockerfile docker-volume


【解决方案1】:

对于任何期望 pip 的内容,您可以指定一次 workdir:

WORKDIR /var/lib/cathstudio/data

对于 pip,请使用 -t 或 --target:

pip install -t /var/lib/cathstudio/data

-t,--目标

Install packages into <dir>. By default this will not replace existing files/folders in <dir>. Use --upgrade to replace existing

新版本的包

【讨论】:

  • 因此 RUN pip install -t /var/lib/cathstudio/data -r requirements.txt 正确吗?谢谢
  • 别忘了将你的 PYTHONPATH 设置为 /var/lib/cathstudio/data,这样你的代码就知道在哪里寻找已安装的模块
  • 在 DockerFIle 中?我会为很多人分发我的应用程序,我会自动化 mutch 认为可能的
  • 是的,在 docker 文件中添加 ENV 和 ARG 就像这样ENV PYTHONPATH /var/lib/cathstudio/data
  • 但我还必须使用新路径 /var/lib/cathstudio/data 修改 ENTRYPOINT COPY 或其他命令?
猜你喜欢
  • 2020-02-24
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
相关资源
最近更新 更多