Windows上でPysparkを用いたデータ処理②　～準備：DockerでJupyterNotebookを起動するまで～

# はじめに
新卒１年目エンジニアでございます。

今回は突然Sparkを用いてデータ処理を行うことになり、
周りがMacPCやVirtualBoxでのLinux環境を使用する中、
なんとかWindowsメインで何とかならないかと試行錯誤した過程の第二弾です。

同じようなことで悩まれている方のお力になれればと思います。

前回は結局Linuxコマンドを使いたいということで、WSLを使用してターミナルでUbuntuを選択できるようにしました。

https://qiita.com/ys_kmr/items/160d8453e8a43dc98adf


# 今回の目的：Windowsで使い捨てのJupyterNotebook環境を作る。

本記事ではDockerを用いたJupyterNotebookの動かし方を紹介します。

[1. DockerのSetup](#1-dockerのsetup)
[2. Dockerをインストールと起動](#2-dockerをインストールと起動)
[3. JupyterNotebookを起動](#3-jupyternotebookを起動)
[4. 停止する](#4-停止する)


（別に使い捨てる必要はないのですが、私は毎回消してしまいます。）

以下、参考記事

https://qiita.com/TsuchiyaYutaro/items/7ae353039b418205246b

https://qiita.com/etaroid/items/b1024c7d200a75b992fc

https://qiita.com/oyan29/items/8b18912fd816cebb285d

## 1. DockerのSetup...
早速前回使えるようにしたUbuntuターミナルで、[上の記事](https://qiita.com/TsuchiyaYutaro/items/7ae353039b418205246b)を参考にDockerのSetupを進めてみます。

![01_docker失敗.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660549/d410f843-1173-2a9c-1a77-e2a66c40776e.png)

怒られました…！まだUbuntuを入れたばかりでdockerなんてコマンドは知らないとのことです。

## 2. Dockerをインストールと起動
下記コマンド打ち込んでdockerのインストールを進める必要があります。
```terminal
$ sudo apt update
$ sudo apt install -y ca-certificates curl gnupg lsb-release
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt update
$ sudo apt install -y docker-ce docker-compose-plugin
```
https://docs.docker.com/engine/install/ubuntu/

https://eng-blog.iij.ad.jp/archives/14205

そしてDockerを起動します。
```terminal
$ sudo service docker start
 * Starting Docker: docker                                                  [ OK ]
```

## 3. JupyterNotebookを起動
Dockerを起動してようやくSetupの準備が整いました。
早速Setupして実行してみましょう。
`'ディレクトリ'`には今回起動するJupyterNotebookのなかで使用したいローカルのディレクトリを指定します。
```terminal
$ sudo docker pull jupyter/pyspark-notebook
$ docker run --name spark_test -it -p 8888:8888 -v 'ディレクトリ':/home/jovyan/work jupyter/pyspark-notebook
```

![02_dockerpull.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660549/136036a2-ddac-64b9-5814-4c4e4703f8ad.png)
DockerのSetupを始めることができました！！

:::note
参考までに`docker pull jupyter/pyspark-notebook`は`↓`のものを引っ張ってきています。
:::
https://hub.docker.com/r/jupyter/pyspark-notebook

![03_setup_jupyter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660549/a0cb334c-f3d6-9972-b694-61687d67b7fb.png)

赤線のリンクをクリックすると規定のブラウザでJupyterNotebookが立ち上がります。
また、左に表示されているディレクトリの「work」の中身を見ると`docker run ...`のときに指定したディレクトリの中身が表示されていることが確認できます。

![04_jupyter_kidou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660549/a659784e-2858-ec2c-102b-b346f6947535.png)

## 4. 停止する
Dockerを使用しているため、最後は忘れずに停止したいです。
停止するときは「Ctrl＋C」で停止できますが、次回また起動しようとすると怒られてしまいます。
```terminal
$ sudo docker run --name spark_test -it -p 8888:8888 -v /mnt/c/users/user/workspace/docker-jupyter:/home/jovyan/work jupyter/pyspark-notebook
docker: Error response from daemon: Conflict. The container name "/spark_test" is already in use by container "f5b3c8b62ac25881d3ea0147166a86252da3567d149fad356ec530f2119243c3". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
```
「Ctrl＋C」で止める場合は、コンテナごと消すようにすることで無駄なリソースを置いておくこともなくなるのでおすすめです。
```terminal
:
:
^C[I 2022-12-15 15:24:26.341 ServerApp] interrupted
Serving notebooks from local directory: /home/jovyan
0 active kernels
Jupyter Server 1.23.3 is running at:
http://f5b3c8b62ac2:8888/lab?token=938fd607cad95828c5190a342c767426786074e68c4c90b0
 or http://127.0.0.1:8888/lab?token=938fd607cad95828c5190a342c767426786074e68c4c90b0
Shutdown this Jupyter server (y/[n])? y
[C 2022-12-15 15:24:28.570 ServerApp] Shutdown confirmed
[I 2022-12-15 15:24:28.572 ServerApp] Shutting down 3 extensions
[I 2022-12-15 15:24:28.572 ServerApp] Shutting down 0 terminals
$ sudo docker rm /spark_test
/spark_test
```
これで次に起動するときに怒られることはなくなりました。

# おわりに

最後まで読んでいただきありがとうございます。

いかがでしたでしょうか。
次回はJupyterNotebookを捜査していきます。

ありがとうございました。