Docker 应用
应用提供了对自定义 Docker 容器的支持,通过编写 Dockerfile 您可以自定义运行环境,将有更大的发挥空间。
创建 Docker 应用
在创建新应用时选择 Docker 作为 SDK。
编写 Dockerfile 部署自己的 JupyterLab !
要点: 将您的 Dockerfile 放置于仓库根目录下,并将您的程序运行在 7860 端口即可。例如:
FROM ubuntu:latest # 国产算力需使用特定镜像,例如 天垓 100:`FROM registry.gitee-ai.local/base/iluvatar-corex:3.2.0-sd3-bi100`
RUN apt-get update && \
apt-get install -y python3.9 \
python3-pip \
git \
git-lfs \
wget
RUN pip3 install --default-timeout=100 --no-cache-dir JPype1 ipywidgets jupyterlab pandas jupyterlab-language-pack-zh-CN jupyter-server-proxy numpy seaborn scipy matplotlib pyNetLogo SALib -i https://mirrors.cloud.tencent.com/pypi/simple
RUN useradd -ms /bin/bash jupyter
USER jupyter
WORKDIR home/jupyter
EXPOSE 7860
ENTRYPOINT ["jupyter", "lab","--allow-root","--ip=0.0.0.0","--port=7860","--no-browser","--NotebookApp.token=" , "--NotebookApp.password=", "--NotebookApp.allow_remote_access=True", "--NotebookApp.allow_origin=*", "--ServerApp.disable_check_xsrf=True"]
USER root
RUN chown -R jupyter:jupyter /home
提交 Dockerfile 到仓库后,重启应用即可:
环境变量、密钥管理
您可以在应用设置中管理应用的环境变量。阅读更多
权限
容器以用户 ID 为 1000 的用户身份运行。为了规避权限相关的问题,您应当在进行文件复制(COPY)或下载之前,先创建一个用户并设定其工作目录(WORKDIR)。
# 创建一个名为 "user" 的新用户,并指定用户 ID 为 1000
RUN useradd -m -u 1000 user
# 切换当前用户为 "user"
USER user
# 设置环境变量 HOME 为用户的主目录,并更新 PATH 环境变量
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
# 设置工作目录为用户的应用目录
WORKDIR $HOME/app
# 在切换为 `USER user` 后尝试运行 pip 命令,以避免 Python 操作时的权限问题
RUN pip install --no-cache-dir --upgrade pip
# 将当前目录下的内容复制到容器的 $HOME/app 目录下,并确保新复制的文件拥有者为用户
COPY --chown=user . $HOME/app
# 下载检查点文件
RUN mkdir content
ADD --chown=user https://<SOME_ASSET_URL> content/<SOME_ASSET_NAME>
注意
使用 --chown=user 选项与 ADD 和 COPY 命令结合,以确保新文件的拥有者为您创建的用户。
如果仍遇到权限问题,您可能需要在 Dockerfile 中使用 chmod 或 chown 命令来赋予正确的权限。例如,若您想使用 /data 目录,可以如下操作:
RUN mkdir -p /data
RUN chmod 777 /data
应尽量避免不必要的权限 更改操作。
注意
更新文件的元信息会导致在新的层中创建一个副本,因此,递归执行 chown 可能会由于所有受影响文件的复制而使镜像体积大增。
比起通过运行 chown 来解决权限问题:
COPY checkpoint .
RUN chown -R user checkpoint
您应当按照以下方法做:
COPY --chown=user checkpoint .
(ADD 命令也同理适用)