---
# System prepended metadata

title: Docker 使用 `tensorboard` 和 `jupyter`
tags: [docker, linux, ubuntu, python, tutorials]

---

###### tags: `tutorials` `ubuntu` `linux` `docker` `python`
# Docker 使用 `tensorboard` 和 `jupyter`
## Run container
```bash= !
$ docker run -it -p 5566:6006 -p 7788:8888 -d docker_image
```
- `-p 5566:6006`: 將 container 內部的 `6006` port 連到外部系統的 `5566` port
    :::info
    `tensorboard` 預設 port 為 `6006`
    :::
- `-p 7788:8888`: 將 container 內部的 `8888` port 連到外部系統的 `7788` port
    :::info
    `jupter` 預設 port 為 `8888`
    :::
:::warning
port 值當然都可以自己設定，不過不可使用 < 1024 的 privileged ports 或是已被使用的 port
:::
> 更多 docker 使用方式請看[這裡](https://hackmd.io/@jimmy801/docker_usage)

## Run tensorboard
- 啟動 tensorboard
    ```bash= !
    $ tensorboard --logdir runs/ --host 0.0.0.0
    ```
    - `--logdir`: 設定要顯示 tensorboard 的資料夾
    - `--host`: 設定使用的主機網路
        :::info
        預設為 `localhost`，也就是 `127.0.0.1`，會是連到本機(container)的一個虛擬 IP，而設為 `0.0.0.0` 才可真的 mapping 到系統給的 port
        :::
- 進入 `XXX.XXX.XXX:5566`
    - `XXX.XXX.XXX`: 外部主機實體 ip
    - `5566`: 會 mapping 到 container 的 `6006` port(也就是預設的 tensorboard port)

## Run jupyter
- 啟動 jupyter
    ```bash= !
    $ jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
    ```
    - `--ip`: 設定使用的主機網路
        :::info
        預設為 `localhost`，也就是 `127.0.0.1`，會是連到本機(container)的一個虛擬 IP，而設為 `0.0.0.0` 才可真的 mapping 到系統給的 port
        :::
    - `--no-browser`: 不啟動瀏覽器
    - `--allow-root`: 如果 container 內使用者為 `root` 則需要允許使用 `root` 開啟 jupyter
- 進入 `XXX.XXX.XXX:5566`
    - `XXX.XXX.XXX`: 外部主機實體 ip
    - `7788`: 會 mapping 到 container 的 `8888` port(也就是預設的 jupyter port)