DockerコンテナでJupyterノートブックを設定する方法

DockerコンテナでJupyterノートブックを設定する方法

Jupyter ノートブックは、主に Python コードの記述、より具体的にはディープラーニング開発のために、Docker コンテナの下に構成されています。

Jupyter Web を最も効率的に使用する方法は、クラウド上にデプロイすることです。CPU クラウド サーバーでも GPU クラウド サーバーでも、すぐに起動して使用できます。

docker の登場により、導入と使用がはるかに便利になりました。

- Dockerをインストールする

DockerにはDocker CEとDocker EEがあり、一般的にはDocker CE(コミュニティ版)が使われます。

Docker は、Linux (Ubuntu、CentOS)、MacOS、Windows、または Raspberry Pi にインストールできます。一般的には Linux で使用されますが、個人的には Ubuntu システムが好きです。それでは、ubutnu で docker をインストールする方法を紹介しましょう。

まず、マシン上に存在する可能性のある古いバージョンを削除します。

$ sudo apt-get 削除 docker docker-engine docker.io

オプションのカーネルモジュールのインストール

カーネル パッケージのインストール サイズを削減するために、Ubuntu 14.04 以降では、一部のカーネル モジュールがオプションのカーネル モジュール パッケージ (linux-image-extra-*) に移動されました。通常インストールされたシステムにはオプションのカーネル モジュール パッケージが含まれますが、一部のトリミングされたシステムでは省略されている場合があります。 AUFS カーネル ドライバーは、オプションのカーネル モジュールの一部です。推奨される Docker ストレージ レイヤー ドライバーとして、AUFS を使用するには、通常、オプションのカーネル モジュール パッケージをインストールすることをお勧めします。

$ sudo apt-getアップデート
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

Ubuntu 16.04 以降の Docker CE では、デフォルトで overlay2 ストレージ レイヤー ドライバーが使用されるため、手動での構成は必要ありません。

証明書と鍵の準備

apt ソースは HTTPS を使用して、ダウンロード プロセス中にソフトウェアが改ざんされないようにします。したがって、まず、HTTPS を使用して転送するパッケージを CA 証明書とともに追加する必要があります。

$ sudo apt-getアップデート
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

国内ネットワークの問題により、国内ソースの使用を強くお勧めします。コメントの公式ソースを参照してください。

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key を追加 -
# 公式ソース# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

最後に、Docker ソフトウェア ソースを追加します。

$ sudo aptリポジトリを追加\
 "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
 $(lsb_release -cs) \
 安定した"
# 公式ソース# $ sudo add-apt-repository \
# "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) \
# 安定した

上記のコマンドは、Docker CE APT ミラー ソースの安定バージョンを追加します。Docker CE のテスト バージョンまたはデイリー ビルド バージョンが必要な場合は、stable を test または nightly に変更してください。

Docker CEをインストールする

$ sudo apt-getアップデート
$ sudo apt-get install docker-ce

Docker CEを起動する

$ sudo systemctl dockerを有効にする
$ sudo systemctl dockerを起動します

Ubuntu 14.04 の場合は、次のコマンドを使用して起動します。

$ sudo サービス docker を開始

Dockerユーザーグループを作成する

セキュリティ上の理由から、通常、Linux システムでは root ユーザーは直接使用されません。したがって、より良い方法は、docker を使用する必要があるユーザーを docker ユーザー グループに追加することです。

$ sudo グループ追加 docker
$ sudo usermod -aG docker $USER

Dockerが正しくインストールされているかどうかをテストする

$ docker run hello-world

テスト用にhello-worldイメージをプルします。

ローカルでイメージ 'hello-world:latest' が見つかりません
最新: library/hello-world から取得
d1725b59e92d: プル完了
ダイジェスト: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
ステータス: hello-world:latest の新しいイメージをダウンロードしました

Dockerからこんにちは!
このメッセージは、インストールが正常に動作していることを示しています。

このメッセージを生成するために、Docker は次の手順を実行します。
 1. Docker クライアントが Docker デーモンに接続しました。
 2. Docker デーモンは Docker Hub から「hello-world」イメージを取得しました。
 (amd64)
 3. Dockerデーモンは、そのイメージから新しいコンテナを作成し、
 現在読んでいる出力を生成する実行可能ファイル。
 4. Dockerデーモンはその出力をDockerクライアントにストリーミングし、Dockerクライアントはそれを
 端末に。

もっと野心的なことに挑戦するには、次のコマンドで Ubuntu コンテナを実行できます。
 $ docker run -it ubuntu bash

無料の Docker ID を使用して、イメージを共有したり、ワークフローを自動化したりすることができます。
 参考:

その他の例やアイデアについては、以下をご覧ください。
 詳しくはこちら

上記の情報が正常に出力されればインストールは成功です。

画像アクセラレータ

中国の Docker Hub からイメージをプルすることが難しい場合があります。この場合、イメージ アクセラレータを構成できます。 Dockerは公式に提供しており、Alibaba Cloud、Qiniu Cloudなど多くの国内クラウドサービスプロバイダーが国内アクセラレータサービスを提供しています。

Ubuntu 14.04 システム:

/etc/default/docker を編集し、DOCKER_OPTS でアクセラレータ アドレスを設定します。

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

次に、サービスを再起動します。

$ sudo サービス docker を再起動します

Ubuntu 16.04以降:

/etc/docker/daemon.json に次の内容を記述してください (ファイルが存在しない場合は、新しいファイルを作成してください)。

{
 「レジストリミラー」: [
 「https://registry.docker-cn.com」
 ]
}

次に、サービスを再起動します。

$ sudo systemctlデーモンリロード
$ sudo systemctl dockerを再起動します

アクセラレータが効果的かどうかを確認する

コマンドラインで docker info コマンドを実行します。次の出力が表示されれば、構成は成功です。

レジストリミラー:
 レジストリ

- 一般的なDockerコマンド

まず、docker コマンドを使用する前に、イメージとコンテナの概念を区別する必要があります。推奨参考リンク

同じイメージで複数の Docker コンテナを起動します。これらのコンテナは起動後、アクティブになり、互いに分離されます。コンテナを操作した後、既存のシステム環境を維持したい場合は、送信して保存する必要があります。

開始コマンド: docker run

たとえば、次のコマンドは「Hello World」を出力し、コンテナを終了します。

$ docker run ubuntu:18.04 /bin/echo 'Hello world'
こんにちは世界

これは、ローカルで /bin/echo 'hello world' を実行するのとほとんど区別がつきません。

次のコマンドは、bash ターミナルを起動し、ユーザーの操作を可能にします。

$ docker run -it ubuntu:16.04 /bin/bash
ルート@af8bae53bdd3:/#

-i オプションはコンテナの標準入力を開いたままにし、 -t オプションは Docker が疑似端末 (疑似 tty) を割り当ててコンテナの標準入力にバインドできるようにします。

コンテナのステータスには主に次のものが含まれます。

created: 作成済み (docker ps -a コマンドを使用して一覧表示できます) ですが、まだ起動されていません (docker ps コマンドを使用して一覧表示できません)

ランニング:ランニング

一時停止: コンテナプロセスが一時停止しています

再起動中: コンテナプロセスは再起動中です

exited: 上の図の停止状態は、コンテナが以前は実行されていたが、現在は停止していることを意味します (まだ実行されていない新しく作成されたコンテナを指す作成状態とは区別されます)。 start コマンドを使用して実行状態に戻すことができます。

破棄: コンテナは削除され、存在しなくなりました

現在のシステムによってプルされたイメージを表示します。

$docker イメージ

現在のシステムで開始された(アップ状態)コンテナをすべて表示する

$ dockerコンテナls

または

$ docker ps

現在のシステム内のすべてのコンテナを表示

$ dockerコンテナls -a

または

$ docker ps -a

コンテナを終了するには:

$ docker コンテナ停止 (ID または名前)

または、exit コマンドまたは Ctrl+d を使用してターミナルを終了し、コンテナを停止します。

コンテナを入力します:

$docker アタッチ (ID または名前)

または

$docker exec (ID または名前)

$docker attach はこの stdin から終了し、コンテナが停止します。

$docker exec はこの stdin から終了しますが、コンテナは停止しません。

$docker execを使用することをお勧めします

コンテナを削除します: $docker container rm (id または name)

終了状態にあるすべてのコンテナをクリーンアップします $ docker container prune

- Jupyterをインストールする

まずコンテナに入ります:

$ docker run -i -t ubuntu:16.04 /bin/bash

このプロセスは基本的に Ubuntu システムに Jupyter をインストールするのと同じですが、コンテナ内の Ubuntu は最小限の環境であり、python-dev パッケージはインストールされていません。

#apt-get 環境を更新 apt-get update

#python dev パッケージをインストールします apt-get install python-dev

#jupyterをインストールする
pip インストール jupyter

デフォルトでは、jupyter にはローカル アドレスからのみアクセスできます。jupyter にリモートからアクセスできるようにするには、構成を緩和する必要があります。リモート アクセスを有効にする場合は、パスワードを設定する必要があります。Jupyter の構成ファイルは、暗号化された暗号テキスト パスワードのみをサポートします。

#jupyter 設定ファイルを生成します。これにより、設定ファイル .jupyter/jupyter_notebook_config.py が生成されます。
jupyter ノートブック --generate-config

#ipythonを使用してパスワードを生成する In [1]: from notebook.auth import passwd
[2]: passwd() の場合
パスワードを入力してください: 
パスワードを確認してください: 
出力[2]: 'sha1:******'

# 設定ファイル .jupyter/jupyter_notebook_config.py の次のパラメータを変更します c.NotebookApp.ip='*' # すべてのアドレスをバインドします c.NotebookApp.password = u'生成されたパスワード'
c.NotebookApp.open_browser = False #起動後にブラウザで自動的に開くかどうか c.NotebookApp.port =8888 #アクセスポートを指定します。デフォルトは8888です。対応するマップされたdockerポートに注意してください

設定が完了したら、jupyter notebook コマンドで Jupyter を起動できます。コンテナ内で直接 root ユーザーを使用する場合、Jupyter を起動するコマンドは jupyter notebook --allow-root です。

最後のコマンドは次のとおりです。

docker run -it --name jupytertest -p 8888:8888 -v ~/mnt:/mnt jupyter-ubuntu:v1 su root -c 'jupyter notebook --allow-root'

-p はポート マッピング、-v はパス マウント マッピングです。

起動が成功したら、http://ubuntu-ip:8888 を使用してアクセスします。

補足: docker でリモート Jupyter を作成する

リモートサーバーのDockerコンテナ内でコマンドを使用する

jupyterノートブック --port=8888 --allow-root

jupyter を実行できます。

注意すべき点は、現在の docker コンテナのポートが 8888 の場合、--port=8888 を省略できることです。現在の docker コンテナのポートが 8888 でない場合は、jupyter を実行するときに、現在の docker コンテナのポートと一致するようにポートを指定する必要があります。

現在のdockerコンテナのポートを忘れた場合は、dockerの外部でコマンドを使用できます。

ドッカーps

チェック。

jupyter を実行すると、インターフェイスにログのようなものが多数出力されます。次のように:

現在のインターフェースを保持し、トークン(赤で囲まれた部分)を記録します。

実行後、ローカル ブラウザーにリモート サーバーの IP (jupyter を実行している Docker コンテナーのポート番号) を入力します。たとえば、192.168.0.101:8888 などです。

ログインインターフェースは次のとおりです。

パスワードを設定したくない場合は、トークンを使用して直接ログインできます。

パスワードを設定する場合は、トークンを使用してパスワードを設定できます。次回ログインするときは、トークンの代わりにパスワードを直接使用できます。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Jupyterノートブックの出力が不完全な場合の解決策
  • Jupyterノートブックを起動した後にトークンがない問題を解決する
  • Python の Jupyter ノートブックのショートカット キーのまとめ
  • Jupyter-notebookがデフォルトのブラウザをポップアップしない問題を解決する
  • ターミナルはモジュールをインポートして、jupyterノートブックをインポートできない問題を解決できます。
  • Jupyter Notebook が csv ファイルを読み取るときに発生するエラーの解決方法
  • Jupyterノートブックで画像が表示されない問題の解決方法
  • Jupyterノートブックで起動ディレクトリを指定する方法
  • Jupyterノートブックの画像表示がぼやける問題を解決し、鮮明な画像を保存する方法

<<:  Web デザイン リファレンス Firefox デフォルト スタイル

>>:  JavaScript 遅延読み込みの詳細な説明

推薦する

jQuery ステップ進行軸プラグインの実装コード

毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...

Vue プロジェクトで addRoutes を使用する際の問題の解決策

目次序文1. 404 ページ1. 原因2. 解決策2.白い画面を更新する1. 原因2. 解決策3. ...

セマンティック HTML 構造の利点は何ですか?

1つ: 1.セマンティック タグは単なる HTML であり、CSS にはセマンティクスはありません...

JavaScript操作要素は、ページコンテンツのスタイルを変更する方法を教えます

目次1. 操作要素1.1. 要素コンテンツの変更1.2. innerText と innerHtml...

Mysql論理アーキテクチャの詳細な説明

1. 全体的なアーキテクチャ図他のデータベースと比較すると、MySQL は、そのアーキテクチャがさま...

スクロール画像バーを実現するための CSS サンプルコード

一部の Web サイトでは、画像が連続的にスクロールしているのをよく見かけます。この効果は、CSS ...

Vue Routerはバックグラウンドデータに応じて異なるコンポーネントをロードします

目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...

MySQL のデフォルトのストレージ エンジンを変更する方法

mysql ストレージ エンジン: MySQL サーバーはモジュール スタイルを採用しており、特にス...

vue3.0 で要素を使用するための完全な手順

序文: vue3.0の要素フレームワークを使用します。要素はvue2.0をサポートしており、vue3...

Linux での mysql-5.7.28 インストール チュートリアル

1. 公式ウェブサイトから Linux バージョンをダウンロードします: https://dev.m...

Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました

MySQLへの接続ここでは、リモート接続に navicat を使用します。MySQL に接続する前に...

Reactのコンポーネント共同利用実装

目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...

MySQL の 3 つの Binlog 形式の概要と分析

1つ。 Mysql Binlog フォーマットの紹介 Mysql binlog ログには、State...

MySQLが2つのテーブルを関連付ける際のエンコードの問題と解決策

Mysqlが2つのテーブルを関連付けると、次のエラーメッセージが生成されます:照合順序の不正な組み合...

Chrome タブバーを実装するための CSS のヒント

今回は、Google Chrome のタブバーのような、特殊な丸い角を持つナビゲーション バーのレイ...