Docker - Jupyter 设置



Jupyter Notebook是一个开源的Web应用程序,它允许在一个地方创建包含实时代码、方程式、可视化和叙述性文本的文档。

由于其简单且交互式的编码方式,Jupyter Notebook在数据科学、机器学习和科学计算方面也非常有用。但是,管理Jupyter环境及其依赖项是一个挑战;这在协作或部署项目时通常是一个问题。

Docker 通过容器化 Jupyter Notebook 来提供帮助;这样,环境就可以重复使用,依赖项管理更容易,并且笔记本电脑变得可移植。在 Docker 中运行 Jupyter 意味着您可以完整地打包环境,从而更轻松地分发、复制和扩展您的 Jupyter 设置。

Docker化Jupyter Notebook的先决条件

在开始Jupyter的Docker化过程之前,请确保您具备以下先决条件:

  • 已安装Docker - 您需要在您的机器上安装Docker。如果尚未安装Docker,您可以从Docker官方网站下载。
  • 基本的Docker知识 - 了解至少Docker的基本概念,例如镜像、容器和基本的Docker命令,将非常有帮助。
  • 已安装Jupyter Notebook - 这将有助于理解在Docker中运行它的比较。
  • 代码编辑器 - 任何代码编辑器。例如,VSCode、Atom或您选择的任何其他编辑器,您将使用它来创建和编辑配置文件。
  • 访问CLI - 命令行或终端的基本用法;您将运行命令来安装Docker并管理您的Jupyter容器。

这些先决条件满足了顺利完成本章关于Docker化Jupyter的要求。

设置Jupyter项目

让我们设置一个基本的Jupyter项目。我们可以创建一个包含所有必要文件的项目目录,包括配置文件和脚本。

创建项目目录

使用以下命令创建项目目录:

$ mkdir dockerized-jupyter
$ cd dockerized-jupyter

初始化项目

初始化一个版本控制系统,如Git,以帮助您跟踪对项目的更改。您也可以初始化Docker:

$ git init
$ docker init

创建Jupyter Notebook文件

创建一个示例Jupyter Notebook文件,您将使用它来测试您的设置。

$ touch sample_notebook.ipynb
Create a Jupyter Notebook File

项目结构和依赖项

现在我们有了项目目录,包括Jupyter设置所需的概要结构和依赖项,保持此项目结构将有所帮助,尤其是在项目规模越来越大的情况下。

项目结构

您的项目目录应该如下所示:

dockerized-jupyter/

│

├── Dockerfile               # Dockerfile to build the Jupyter image

├── requirements.txt         # Python dependencies

├── sample_notebook.ipynb    # Sample Jupyter notebook

└── README.md                # Optional: Documentation for the project

依赖项

此项目的核心依赖项基本上是一个Jupyter Notebook,加上您可能希望在笔记本中使用的其他Python库。为了处理此类依赖项,您将使用一个“requirements.txt”文件,其中列出了必须安装到Docker容器中的所有Python包。

创建requirements.txt文件

这应该列出Jupyter以及您希望在使用笔记本时包含的任何其他Python包。

requirements.txt的示例内容:

jupyter
numpy
pandas
matplotlib

Dockerfile配置

您的Dockerfile将拥有此requirements.txt,以便在创建Docker镜像时安装必要的包。我们将在下一节中看到Dockerfile的详细信息。

定义了项目的结构并设置了依赖项后,您现在可以继续在本地运行Jupyter并设置Dockerfile以容器化您的环境。

在本地运行Jupyter

让我们在Docker化之前在本地运行Jupyter应用程序,以查看其是否正常运行。您将更好地理解设置,并能够确保您的Jupyter环境在最终容器化之前按预期工作。

步骤1:在本地设置Jupyter

如果您的本地机器上没有安装Jupyter Notebook,您可以使用pip轻松安装它。进入您的项目目录,然后执行以下操作:

pip3 install jupyter
Setting up Jupyter Locally

这将安装Jupyter Notebook及其依赖项。

步骤2:执行Jupyter Notebook

安装完成后,您可以通过运行以下命令启动Jupyter Notebook服务器:

$ jupyter notebook
Execute Jupyter Notebook

这将启动Jupyter服务器,然后在您的默认Web浏览器中打开Jupyter Notebook界面。默认情况下,它将列出您当前目录中的所有文件,包括上面创建的sample_notebook.ipynb

步骤3:打开并编辑笔记本

在Jupyter界面中单击它打开sample_notebook.ipynb文件;您可以向此笔记本添加一些简单的Python代码或笔记来测试您的设置。一个示例Python脚本,它导入一些常用的库,包括numpy和pandas,并执行基本的计算:

import numpy as np

import pandas as pd

# Example: Create a simple DataFrame

data = {'Column1': [1, 2, 3, 4], 'Column2': [10, 20, 30, 40]}

df = pd.DataFrame(data)

print(df)

运行代码单元格以确保一切正常运行。

Open and Edit the Notebook

步骤4:验证环境

确保:

  • Jupyter Notebook服务器启动没有任何错误。
  • 您可以毫无问题地打开和编辑笔记本。
  • 必要的Python包(例如,numpy、pandas、matplotlib)正常工作。

创建Dockerfile

以下是用于容器化Jupyter的Dockerfile:

# Use the official Python image from Docker Hub
FROM python:3.9-slim

# Set the working directory
WORKDIR /app

# Copy requirements.txt into the working directory
COPY requirements.txt .

# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Expose the default Jupyter port
EXPOSE 8888

# Start Jupyter Notebook
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

步骤说明

  • 基础镜像 - 使用python:3.9-slim创建一个轻量级的Python环境。
  • 工作目录 - 将/app设置为容器内的工作目录。
  • 复制依赖项 - 将requirements.txt复制到容器。
  • 安装依赖项 - 安装Jupyter和requirements.txt中列出的其他Python包。
  • 暴露端口 - 打开8888端口以访问Jupyter Notebook。
  • 命令 - 使用允许从任何IP访问、在端口8888上运行以及允许root访问的设置运行Jupyter Notebook。

构建Jupyter镜像

让我们为我们的Jupyter设置构建Docker镜像。此镜像将打包运行Jupyter Notebook所需的一切,从而可以轻松部署和共享。

构建镜像的步骤

1. 打开终端 - 转到Dockerfile所在的项目目录。

2. 构建Docker镜像 - 运行以下命令来构建您的Docker镜像。将jupyter-image替换为您想要的镜像名称。

$ docker build -t jupyter-image .

-t jupyter-image - 使用名称jupyter-image标记镜像。

.: 指定当前目录作为构建上下文。

Building the Jupyter Image

3. 验证镜像 - 构建后,验证您的镜像是否列在Docker镜像中:

$ docker images

在列表中查找jupyter-image以确认它已成功构建。

Verify the Jupyter Image

运行Jupyter Docker容器

有了Docker镜像,下一步就是将其作为容器运行。这将在Docker容器内启动Jupyter Notebook,并使其可以从主机访问。

要在终端中启动包含Jupyter的容器,请运行以下命令。要从浏览器访问Jupyter,它将容器的8888端口映射到主机的8888端口。

$ docker run -p 8888:8888 jupyter-image
Running the Jupyter Docker Container

容器启动并运行后,您应该在终端中看到一个以http://127.0.0.1:8888/tree?token=some_token开头的URL。您可以在Web浏览器中打开此URL以打开Jupyter Notebook。

结论

在本章中,我们解释了如何通过设置项目、定义其结构和依赖项、在本地运行Jupyter以及编写容器化环境的Dockerfile来Docker化Jupyter。

我们创建了一个Docker镜像并将其作为容器运行,其中Jupyter Notebook更容易访问,并且在不同的设置中保持一致。这不仅可以简化依赖项的处理,还可以使您的Jupyter环境可移植和可重现。

进一步的步骤可能包括使用特定的Jupyter扩展定制您的Docker设置,使用Docker Compose在多容器设置中运行Jupyter,或将您的Docker化Jupyter环境部署到云平台以实现可扩展的数据科学工作流程。

关于Docker化Jupyter Notebook的常见问题

关于Docker化Jupyter Notebook,有一些非常常见的问题(FAQ),本节尝试简要回答它们。

1. 如何连接到Docker化的Jupyter Notebook?

要连接到 Docker 化的 Jupyter Notebook,您可以通过 Web 浏览器使用 Docker 主机的 IP 地址以及公开端口作为连接信息来访问 Jupyter Notebook 的界面。根据您的环境,您可能需要配置端口转发或网络设置。

2. 如何在 Docker 化的 Jupyter Notebook 中安装额外的 Python 包?

要在 Docker 容器中安装其他 Python 包,可以使用 pip 命令。您可以将包安装命令放在 Dockerfile 中,也可以在容器内交互式地调用它们。只需确保您创建的包与基础镜像使用的 Python 版本兼容。

3. 如何在 Docker 容器中持久化 Jupyter Notebook 数据?

要持久化 Jupyter Notebook 的数据,您需要使用卷,以便主机上的目录映射到容器内的目录。这样,您在运行的 Jupyter Notebook 实例中创建的任何笔记本、数据或文件都将持久化到主机卷中,并且在容器停止后不会丢失。

广告