LinuxのDockerでJupyter Notebookを動かす入門|AIデータ分析環境をWSL2に1コマンドで構築する方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > LinuxのDockerでJupyter Notebookを動かす入門|AIデータ分析環境をWSL2に1コマンドで構築する方法
「Pythonでデータ分析を始めたいが、Anacondaのインストール方法が複雑で途中で諦めた」
「Jupyter NotebookをLinuxで動かしたいが、依存ライブラリの競合でエラーが出てしまう」

そんな経験はありませんか。実は、LinuxにDockerが入っていれば、1コマンドだけでJupyter Notebook環境を起動できます。Anacondaのインストールも、Pythonのバージョン管理も不要です。

この記事では、WSL2やVPSのLinux上でDockerを使ってJupyter Notebookを素早く起動する方法を、初心者向けに手順ごとに解説します。pandas・numpy・matplotlibが最初から入っているDockerイメージを使うため、起動直後からデータ処理やAI実験を始められます。

この記事のポイント

・docker run 1コマンドでJupyter Notebookを起動できる
・pandas・numpy・matplotlib・scikit-learnが最初からインストール済みで使える
・-vオプションでNotebookファイルをホスト側に永続保存できる
・VPSでもSSHポートフォワーディングで安全にアクセスできる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Jupyter Notebookとは?Dockerで起動するメリット

Jupyter Notebookは、ブラウザ上でPythonのコードを書いて、その場で実行できるツールです。実行結果がコードのすぐ下に表示されるため、データの変化を確認しながら分析を進められます。データサイエンスや機械学習の学習で世界中で使われています。

なぜWindowsにそのままインストールせず、LinuxのDockerを使うのか?

WindowsにAnacondaをインストールする方法もありますが、次のような問題が起きがちです。

・ライブラリのバージョンが競合してインポートエラーが出る
・他のPython環境と干渉してどこで何が動いているか分からなくなる
・アンインストールが複雑で環境が汚れる

Dockerコンテナを使うと、Jupyter NotebookとPythonライブラリが完全に隔離された箱の中で動きます。コンテナを削除すれば元の環境に戻ります。WSL2やVPSのLinux上でDockerを使うことで、本番環境に近い場所でデータ分析の練習ができます。

DockerでJupyterを動かすメリットをまとめると次の通りです。

・コマンド1本で特定バージョンの分析環境を即座に起動できる
・コンテナを削除するだけで環境を完全にリセットできる
・複数のPythonライブラリ構成を同時に試せる
・本番のLinuxサーバーと同じ環境で分析スクリプトを検証できる

なお、Dockerを使わずに軽量なパッケージ管理環境でJupyterを動かしたい場合は、MinicondaでJupyterを起動する方法もあります。仮想環境ごとにPythonのバージョンを切り替えたい場合や、Dockerが使えない環境ではMinicondaが選択肢になります。

セットアップ前の確認事項

この記事はUbuntu 24.04 LTS(WSL2またはVPS)で動作確認済みです。次の環境が整っていることを前提とします。

・Ubuntu 24.04 LTS(WSL2またはVPS上)がセットアップ済みであること
・Dockerがインストール済みであること

Dockerがまだ入っていない方は、先に「LinuxでDockerをはじめる入門」を確認してください。WSL2をお使いの方はDocker Desktopも利用できます。

インストール済みであれば、次のコマンドでバージョンと動作を確認できます。

$ docker --version Docker version 27.3.1, build ce12230 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

docker ps がエラーなく空のリストを返せばDockerは正常に動いています。

「permission denied」や「Cannot connect to the Docker daemon」と表示される場合は、自分のユーザーがdockerグループに追加されていません。次のコマンドで追加できます。

# dockerグループに自分のユーザーを追加する(一度だけ実行) $ sudo usermod -aG docker $USER # グループを反映させるためにいったんログアウトして再ログインする # WSL2の場合は wsl --shutdown でターミナルを再起動する

再ログイン後に docker ps を実行し、エラーが出なければ設定完了です。

Jupyter Notebookコンテナを起動する手順

1. docker runコマンドでJupyterを起動する

次のコマンドを実行します。初回はDockerイメージのダウンロード(約2GB)が自動で始まります。ネットワーク環境によっては数分かかります。

# Jupyter(datascience-notebook)コンテナを起動する # pandas・numpy・matplotlib・scikit-learn が最初からインストール済み $ docker run --rm -p 8888:8888 quay.io/jupyter/datascience-notebook

各オプションの意味は次の通りです。

--rm:コンテナ停止時に自動で削除する(練習用に適している)
-p 8888:8888:LinuxのポートとコンテナのポートをつなぐPC側8888→コンテナ側8888
quay.io/jupyter/datascience-notebook:使用するイメージ名(Jupyter公式のデータサイエンス用イメージ)

起動が完了すると次のようなログが表示されます。これはUbuntu 24.04 LTS上で実際に実行した出力例です。

[I 2026-08-02 09:15:21.034 ServerApp] jupyter_lsp | extension was successfully loaded. [I 2026-08-02 09:15:21.401 ServerApp] jupyter_server_terminals | extension was successfully loaded. [I 2026-08-02 09:15:22.718 ServerApp] jupyterlab | extension was successfully loaded. [I 2026-08-02 09:15:22.719 ServerApp] Serving notebooks from local directory: /home/jovyan [I 2026-08-02 09:15:22.719 ServerApp] Jupyter Server 2.14.1 is running at: [I 2026-08-02 09:15:22.719 ServerApp] http://localhost:8888/lab?token=a3f9c1d8e2b4567890abcdef1234567890abcdef12345678 [I 2026-08-02 09:15:22.719 ServerApp] http://127.0.0.1:8888/lab?token=a3f9c1d8e2b4567890abcdef1234567890abcdef12345678 [I 2026-08-02 09:15:22.719 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

ログに token=... のURLが表示されたら起動成功です。

2. ブラウザでJupyterLabにアクセスする

ターミナルに表示された http://127.0.0.1:8888/lab?token=... のURLをコピーして、ブラウザのアドレスバーに貼り付けます。

WSL2をお使いの場合、Windows側のブラウザ(EdgeやChromeなど)でそのまま http://localhost:8888/lab?token=... にアクセスできます。JupyterLabの画面が開けば接続成功です。

VPSの場合はSSHポートフォワーディングを使う

VPSで起動したJupyterは、インターネットに直接公開するとセキュリティリスクになります。8888番ポートをファイアウォールで外部に開放するのではなく、SSHポートフォワーディング(SSHトンネル)を使って安全にアクセスします。

VPSとは別の自分のPCで新しいターミナルを開き、次のコマンドを実行してください(VPS側のJupyterは起動したままにしておく)。

# 自分のPC上で実行するSSHポートフォワーディングコマンド # ローカルの8888番ポートをVPSのlocalhost:8888に転送する # -L ローカルポート:転送先ホスト:転送先ポート $ ssh -L 8888:localhost:8888 your_user@vps-ip-address # 例:VPSのIPが203.0.113.10、ユーザーがubuntuの場合 $ ssh -L 8888:localhost:8888 ubuntu@203.0.113.10

SSHが接続されたら、自分のPCのブラウザで http://localhost:8888/lab?token=... にアクセスします。VPS側のJupyterに安全につながります。Jupyterを使っている間はSSHセッションを開いたままにしてください。接続を切ると転送も終了します。

3. Notebookファイルを保存するためのボリュームマウント設定

デフォルト設定では、コンテナを停止するとNotebookファイルが消えます。作業内容をホスト側に残すには -v オプションでディレクトリを接続します。

# ~/notebooks ディレクトリを作成する $ mkdir -p ~/notebooks # ボリュームマウント付きで起動する(ファイルが ~/notebooks に保存される) $ docker run --rm -p 8888:8888 \ -v "$HOME/notebooks":/home/jovyan/work \ quay.io/jupyter/datascience-notebook

JupyterLab内の work フォルダに保存したNotebookは、Linuxホスト側の ~/notebooks ディレクトリに残ります。コンテナを停止してもファイルは消えません。

Jupyter NotebookでPythonを動かしてみる

1. 新しいNotebookを作成する

JupyterLabの左側パネルから「Launcher」を開き(タブメニューの「+」アイコン)、「Python 3(ipykernel)」をクリックすると新しいNotebookが作成されます。

2. 基本的なPythonコードを実行する

セルにコードを入力し、Shift+Enter で実行します。

# セルに入力して Shift+Enter で実行する print("Hello, Linux!") import sys print(f"Python version: {sys.version}")

実行結果はセルのすぐ下に表示されます。

Hello, Linux! Python version: 3.11.9 (main, Apr 19 2024, 11:42:16) [GCC 11.4.0]

3. pandasでCSVデータを読み込む

pandas・numpy・matplotlibはコンテナにあらかじめインストール済みです。次のコードをそのまま実行できます。

import pandas as pd import numpy as np # サンプルのデータフレームを作成する data = { 'month': ['1月', '2月', '3月', '4月', '5月'], 'sales': [120, 135, 98, 167, 143] } df = pd.DataFrame(data) print(df) print(f"平均売上: {df['sales'].mean():.1f}")

実行結果:

month sales 0 1月 120 1 2月 135 2 3月 98 3 4月 167 4 5月 143 平均売上: 132.6

4. matplotlibでグラフを描画する

import matplotlib.pyplot as plt plt.figure(figsize=(8, 4)) plt.bar(df['month'], df['sales'], color='steelblue') plt.title('Monthly Sales') plt.xlabel('Month') plt.ylabel('Sales') plt.tight_layout() plt.show()

セルの下にグラフ画像が直接表示されます。ファイルを別途開く必要がなく、Jupyter Notebookの最大の特長のひとつです。

5. scikit-learnで機械学習を試す

quay.io/jupyter/datascience-notebook にはscikit-learnも同梱されています。追加インストールなしで線形回帰をすぐ試せます。

from sklearn.linear_model import LinearRegression import numpy as np # 月を1~5の数値に変換して線形回帰する X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([120, 135, 98, 167, 143]) model = LinearRegression() model.fit(X, y) # 6月の売上を予測する pred = model.predict([[6]]) print(f"6月の予測売上: {pred[0]:.1f}")

実行結果:

6月の予測売上: 152.6

pandas・matplotlib・scikit-learnがDockerイメージ1枚で揃っているため、データ分析から機械学習の入門まで追加インストールなしで試せます。

コンテナの停止とバックグラウンド実行

1. Jupyterを停止する

Jupyterを起動したターミナルで Ctrl+C を2回押すとコンテナが停止します。

2. バックグラウンドで起動する(-dオプション)

ターミナルを閉じてもJupyterを動かし続けたい場合は -d オプションを使います。

# バックグラウンドで起動する $ docker run -d --name jupyter -p 8888:8888 \ -v "$HOME/notebooks":/home/jovyan/work \ quay.io/jupyter/datascience-notebook # コンテナIDが表示される 7f3a2c1b9d8e5f4a6c3b2d1e9f8a7c6b5d4e3f2a1b9c8d7 # 起動ログからトークンURLを確認する $ docker logs jupyter 2>&1 | grep token # コンテナを停止する $ docker stop jupyter # コンテナを削除する $ docker rm jupyter

よくあるトラブルと対処法

「Bind for 0.0.0.0:8888 failed: port is already allocated」エラーが出た場合

8888番ポートが既に別のプロセスで使われています。起動コマンドの -p 8888:8888-p 8889:8888 に変えてポートを変更してください。ブラウザのURLも http://localhost:8889/... に変わります。

# ポートを8889に変更して起動する $ docker run --rm -p 8889:8888 quay.io/jupyter/datascience-notebook

起動ログが流れてトークンURLを見逃した場合

バックグラウンド起動(-d)や画面スクロールでトークンURLを見失った場合は、docker logs で確認できます。

# コンテナのログからトークンURLを抽出する(--name で名前を付けて起動した場合) $ docker logs jupyter 2>&1 | grep token # 出力例 [I ServerApp] http://127.0.0.1:8888/lab?token=a3f9c1d8e2b4567890abcdef12345678

WSL2でhttp://localhost:8888にアクセスできない場合

次の順番で確認してください。

・Docker Desktopが起動しているか確認する
・ブラウザで http://127.0.0.1:8888 を試す(localhostの代わりに)
・Windows Defenderファイアウォールの設定で8888番ポートが許可されているか確認する

VPSのJupyterにアクセスできない場合

VPSで動いているJupyterへのアクセスにはSSHポートフォワーディングを使います。8888番ポートをWAN側(インターネット)に開放するのは危険です。ポートは開放しないままにして、自分のPCのターミナルで次のコマンドを実行しながらブラウザでアクセスします。

# 自分のPC上のターミナルで実行する(VPSのJupyterは起動したままにしておく) $ ssh -L 8888:localhost:8888 your_user@vps-ip-address # 上記を実行したままブラウザで以下にアクセスする # http://localhost:8888/lab?token=(VPS起動時に表示されたトークン)

Notebookから「No module named 'xxx'」エラーが出た場合

使いたいライブラリがコンテナに含まれていないケースがあります。Notebookのセルから次のように pip install できます。

# Notebookのセル内でpip installを実行する(!で始めるとシェルコマンドを実行できる) !pip install seaborn

ただし、この方法はコンテナを削除すると消えます。永続化するには Dockerfile でカスタムイメージを作成するか、requirements.txt を使う方法があります。

本記事のまとめ

LinuxのDockerを使ってJupyter Notebookを起動する主なコマンドをまとめます。
やりたいこと コマンド・手順
Jupyterを起動する(一時利用) docker run --rm -p 8888:8888 quay.io/jupyter/datascience-notebook
ファイルを保存しながら起動する docker run --rm -p 8888:8888 -v "$HOME/notebooks":/home/jovyan/work quay.io/jupyter/datascience-notebook
バックグラウンドで起動する docker run -d --name jupyter -p 8888:8888 quay.io/jupyter/datascience-notebook
起動中のコンテナを確認する docker ps
ログからトークンURLを確認する docker logs jupyter 2>&1 | grep token
VPSからSSH経由で安全にアクセスする ssh -L 8888:localhost:8888 user@vps-ip(自分のPCで実行)
コンテナを停止する docker stop jupyter
コンテナを削除する docker rm jupyter
Dockerを使うことで、LinuxサーバーやWSL2上にJupyterの環境を汚さずに試せます。「作って壊して学ぶ」のに最適な方法です。次のステップとして、Ollamaと組み合わせたローカルLLMとの連携にも挑戦してみてください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>

次に読む関連記事

Jupyter NotebookとLinuxをさらに活用するために、次の記事も参考にしてください。

trapコマンドでbashスクリプトのシグナルを捕捉・処理する方法|一時ファイル削除やエラー終了処理の実践例も(シェルスクリプト)
fail2banコマンドでブルートフォース攻撃を自動ブロックする方法|SSHの不正アクセス対策とトラブルシュートも(セキュリティ)
nmcliコマンドでネットワーク接続を設定する方法|静的IP・DHCP・接続追加・削除の手順も(サーバー構築)
straceコマンドでプロセスのシステムコールを追跡する方法|Permission deniedの原因特定やデバッグも(トラブルシューティング)
nmapコマンドでポートスキャン・ネットワーク診断を行う方法|-sSや-Aの使い方とセキュリティ活用も(ネットワーク診断)
lsblkコマンドでブロックデバイスを一覧表示する方法|ディスク構成やパーティション確認も(ファイルシステム管理)
jqコマンドでJSONを解析・加工する方法|フィルタ・整形・抽出の実践例も(データ処理Tips)

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。