Docker-如何确保提交将持久保存文件?

时间:2019-08-20 12:28:37

标签: docker

我一直进行pull, run, <UPLOAD FILE>, commit, tag, push循环,只是因为拉动被推入的容器时文件不见而感到沮丧。我的目标是在图像中包含一个ipynb文件,该文件可以作为用户的README /教程。

在阅读其他文章时,我发现commit是/不是添加文件的方法。是什么导致commit保留/忽略文件?我应该在提交之前使用docker cp添加文件吗?

2 个答案:

答案 0 :(得分:1)

如果您需要将笔记本文件发布到Docker映像中,请使用Dockerfile,类似这样-

FROM jupyter/datascience-notebook
COPY mynotebook.ipynb /home/jovyan/work

然后,按照您的意愿放置笔记本后,只需运行docker builddocker push。为了给您更多帮助,您遇到问题的原因是jupyter图像将笔记本存储在一个卷中。卷中的数据不是映像的一部分,它们位于主机的文件系统上。这意味着commit不会在工作文件夹中保存任何内容。

确实,ipynb是数据文件,而不是应用程序。正确的方法可能是将ipynb文件上传到某个位置的文件存储,并告诉您的用户下载它,因为他们可以使用一个docker映像来运行许多数据文件。如果您确实希望使用所描述的工作流来生成预构建的图像,则可以将文件放置在不在卷中的其他位置,以便在提交中捕获该文件。

答案 1 :(得分:0)

对于那些正在寻找以docker build开头的地方的人,以下是我用docker build -t your-image-name:your-new-t触发的Dockerfile中的行

Dockerfile

FROM jupyter/datascience-notebook:latest
MAINTAINER name <email>


# ====== PRE SUDO ======
ENV JUPYTER_ENABLE_LAB=yes

# If you run pip as sudo it continually prints errors.
# Tidyverse is already installed, and installing gorpyter installs the correct versions of other Python dependencies.
RUN pip install gorpyter
# commenting out our public repo
ENV R_HOME=/opt/conda/lib/R

# https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html
# Looks like /usr/local/man is symlinking all R/W toward /usr/local/share/man instead
COPY python_sdk.ipynb /usr/local/share/man
COPY r_sdk.ipynb /usr/local/share/man
ENV NOTEBOOK_DIR=/usr/local/share/man
WORKDIR /usr/local/share/man


# ====== SUDO ======
USER root

# Spark requires Java 8.
RUN sudo apt-get update && sudo apt-get install openjdk-8-jdk -y
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

# If you COPY files into the same VOLUME that you mount in docker-compose.yml, then those files will disappear at runtime.
# `user_notebooks/` is the folder that gets mapped as a VOLUME to the user's local folder during runtime.
RUN mkdir /usr/local/share/man/user_notebooks