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 例項中建立的任何筆記本、資料或檔案都將持久化到主機卷中,並且在容器停止後不會丟失。

廣告