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 遅延読み込みの詳細な説明

推薦する

HTML テーブル セルの幅と高さを設定する方法

Web ページを作成するときに、テーブルの幅が揃っていないという問題に遭遇することがよくあります。 ...

MySQL の日付と時刻の加算と減算のサンプル コード

目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...

Dockerコンテナの起動失敗を解決する方法

質問: コンピュータを再起動した後、docker の mysql コンテナを再起動できません。原因が...

Javascriptでシンプルなナビゲーションバーを実装

この記事では、参考までに、シンプルなナビゲーションバーを実装するためのJavascriptの具体的な...

Vue+flaskで動画合成機能を実現(ドラッグ&ドロップアップロード)

目次ドラッグアンドドロップアップロードについては以前の記事で書きました。ファイルをアップロードするF...

NextCloud プライベート クラウド ストレージ ネットワーク ディスクの構築に関する詳細なチュートリアル

Nextcloud は、オープンソースで無料のプライベート クラウド ストレージ ネットワーク ディ...

Dockerを使用してMySQLデータベースをインストールするDeepinの詳細な説明

まずMySQLソースをクエリするdocker 検索 mysql公式ウェブサイトにアクセスしてイメージ...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

この記事では、MySQLのマスタースレーブ同期の原理を説明します。

目次MySQL マスタースレーブ同期原理の簡単な分析1. マスタースレーブとは何ですか? 2. 主従...

JavaScript における 3 つの for ループ ステートメントの使用の概要 (for、for...in、for...of)

序文JS に触れるすべての開発者は、必然的に for ループを扱うことになります。結局のところ、fo...

uniappを使用してWeChatミニプログラムでEChartsを使用する方法

今日は、uniapp を使用して Echarts を統合し、マップ チャートを表示します。 mpvu...

Linux での透過的巨大ページの使用と無効化の概要

導入コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加して...

HTML5 と HTML4 の 10 の主な違い

HTML5 は HTML 標準の次のバージョンです。ますます多くのプログラマーが、Web サイトの構...

Docker を使用して nginx で tomcat クラスターを構築する方法 (画像とテキスト付き)

まず、Tomcatフォルダを作成します。Dockerの設定を容易にするために、ルートディレクトリに直...

プロジェクトのフロントエンドとバックエンドでの Echart チャートの使用に関する詳細な説明

目次序文1. プロジェクトアーキテクチャ2. Echart公式サイトにアクセスして自己分析を学ぶ2....