# install docker - 根據[這篇文章](https://github.com/twtrubiks/docker-tutorial)安裝 # start jupyter ## 建立container並啟動 - `docker run -p 10000:8888 --name <container_name> jupyter/datascience-notebook` - `-p` 代表將本機的 10000 port 的所有流量轉發到 container 中的 8888 port - `8888`是預設的port - `--name`後面接container的名稱 ## 停止container - `docker stop <container_name>` - 第一次啟動時畫面可能如下,要停止的話按`ctrl-c`,之後再啟動就不會有以下畫面了 - ![](https://hackmd.io/_uploads/SJGOHXJCh.png) ## 啟動container - `docker start <container_name>` # connect to jupyter - 啟動container之後,以下面方式進入jupyter ## 方法一: server 指令 ### 以root身分進入 > 創立好container之後,最好先以root身分進入,將user加入sudoer,如此才能使用sudo - 在server輸入`docker exec -u 0 -it <Container_name> bash` - 進入jupyter之後,輸入`visudo` - 用vi開啟`/etc/sudoers.tmp` - 在`# User privilege specification`的下面加上 - `jovyan ALL=(ALL) ALL` - 在`# Allow members of group sudo to execute any command`的下面加上 - `jovyan ALL=(ALL:ALL) NOPASSWD:ALL` - 之後儲存並退出(`:wq`)就好 - 接下來用一般使用者進入jupyter就可以使用sudo了! - ### 以一般使用者整進入 - 在server輸入`docker exec -it <Container_name> bash` - `exec`表示在在啟動中的container執行指令 - `bash`就是被執行的指令 - 也就是開啟一個shell - `-it`表示開啟一個互動式的介面 - 可以參考[這篇文章](https://ithelp.ithome.com.tw/articles/10299117?sc=iThelpR) ## 方法二: browser - 在browser輸入server的ip位址,加上port - ex. `your.server's.ip.address.:port_number` - 這邊的`port_number`就是前面設定`10000:8888`的`10000` # set up SSL ## 設定password > 之後登入時使用,就不用擔心token不見 - 輸入`jupyter notebook password` - 接下來輸入好密碼就可以了 ## 設定certificate - 進入jupyter之後移動到`~/.jupyter` - `cd ~/.jupyter` - 輸入以下指令產生憑證 ``` openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem ``` - 全部按enter維持default就好 - 接著開啟`jupyter_*_config.py` - in this case, `jupyter_notebook.config.py` - 記得開這個docker原本就有的`config.py`,自己產生一個可能系統可能抓不到 - 我就因為照著官方文件輸入`jupyter server --generate-config`產生config.py在自己改,而走了很多彎路ˋ ˊ - 找到下面兩行 ``` c.NotebookApp.certfile c.NotebookApp.keyfile ``` - 在vi裡面按下`/`並輸入`certfile`就可以找到了 - 將其取消註解,改成 ``` c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem' c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key' ``` - 接著重新啟動,並把url裡的`http`改成`https`就好了! - ex. `https://your.public.ip.address:port_number` # References - https://blog.51cto.com/u_15187242/2744689 - https://ithelp.ithome.com.tw/articles/10299117?sc=iThelpR - https://docs.docker.com/engine/reference/commandline/exec/ - https://github.com/jupyter/docker-stacks - https://github.com/twtrubiks/docker-tutorial - https://jupyter-server.readthedocs.io/en/latest/operators/public-server.html#securing-a-jupyter-server