# Docker 本教學目的是讓 Windows 電腦安裝 Docker 並將 jupyter notebook 開起來 下面都是以 Mac 使用 terminal 來做範例, 在 Windows 上則是需要使用 Windows Power Shell, 但指令都是相同的. ## 事先準備 1. 安裝 Docker [link](https://www.docker.com/products/docker-desktop) 2. 將 jupyter 官方的 image 檔案拉下來: `docker pull jupyter/datascience-notebook` ![](https://i.imgur.com/ibT7CRu.png) 3. 將 python3.6 檔案拉下來: `docker image pull python:3.6` ![](https://i.imgur.com/KFcjgH5.png) 4. 這時候 `docker image ls` 的時候就會看到 jupyter 和 python 這兩個 image 了 ![](https://i.imgur.com/4klZjwV.png) ## Docker 指令 ### 基本操作 ```bash # 下載 dockerhub 上的 image $ docker pull [image]:[version] # 顯示所有的 image $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE jupyter/datascience-notebook latest 68d2e7a7723f 3 days ago 3.92GB # 顯示正在執行的 container $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f86334e378d5 jupyter/datascience-notebook "tini -g -- bash" 38 seconds ago Up 37 seconds 8888/tcp quizzical_brown # 顯示所有的 container $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd69b97101a jupyter/datascience-notebook "tini -g -- bash" 4 seconds ago Exited (0) 54 seconds ago frosty_varahamihira f86334e378d5 jupyter/datascience-notebook "tini -g -- bash" 13 seconds ago Up About a minute 8888/tcp quizzical_brown # 刪除 image $ docker rmi [image]:[tag] ``` ### Container 操作 - 啟動一個 container ```bash # 啟動 python container 並操作 bash $ docker run -it python:3.6 bash # 在背景啟動 jupyter notebook container $ docker run -d -p 8888:8888 -v "$PWD":/home/jovyan/work --name my_jupyter jupyter/datascience-notebook start-notebook.sh --NotebookApp.token='1234' ``` - `-i`: Keep STDIN open even if not attached - `-t`: Allocate a pseudo-tty - `-d`: 背景執行 - `-p`: 將 container 內外 port 相對應 - `-v`: 將位置連結至 cointainer 內 - `--rm`: container 關掉後自動刪掉 - `--name`: 將 container 另取名字 若是沒有 `-d` 標籤就一定需要在最後加上進入 container 後第一個要執行的指令, 大多為 `bash` 若需要跳出 container 外則要按下 `ctrl p+q` 完全跳出是按下 `ctrl+d` 在 image name 後面的指令則是將 container 開啟後就要執行的事情 - 進入一個正在執行的 container ```bash $ docker exec -it my_jupyter bash ``` - 結束 container ```bash $ docker stop my_jupyter ``` - 重開已經結束的 container ```bash $ docker start my_jupyter ``` - 刪除結束的 container ```bash $ docker rm my_jupyter ``` ### Container 打包成新 image ```bash # 將 container 打包成新 image $ docker commit --author "klin" [container ID/name] [image]:[tag] # 範例 $ docker commit my_jupyter jupyter_notebook:v0.1 # 將 image 檔案輸出 $ docker save [image]:tag > [output].tar # 將 image 檔案導入 $ docker load < [output].tar ``` ###### tags: `sinopac`