Docker 基本指令 === {%hackmd @HungPin/Dark %} **上一篇 [Docker 環境安裝](https://hackmd.io/vjFDWevgSYyIns0e0H4BcA?both) 介紹了 Docker for Windows 的環境安裝,並建立了 Vscode 的相關環境。接下來,將介紹一些 Docker 的基本指令,並一步步帶你從 Docker 內建立 ROS 環境** ## <font color="orange">Docker Pull</font> Docker Pull 會從 Docker hub (一個供大家上傳自己開發環境的中心) 上下載指定的 Image <font color="yellow">Step 1. 首先,我們先下載 ROS 的鏡像,在 Vscode 的 命令行輸入</font> ``` docker pull osrf/ros:noetic-desktop-full ``` <font color="yellow">Step 2. 完成後我們可以在 Docker 插件中的 Images 看到</font> ![螢幕擷取畫面 2024-01-14 114342](https://hackmd.io/_uploads/Hy6MVfbKT.png) 下載完 Image 後我們可以進到開啟環境的步驟啦~ ## <font color="orange">Docker Run</font> Docker Run 會把這個我們下載的 Images 解壓縮成 Container,也就是我們需要的環境 <font color="yellow">Step 0. 先在本地創建一個資料夾,並以Vscode打開</font> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/Hy8cGDXY6.png" /> </div> <font color="yellow">Step 1. 輸入以下指令</font> 記得將 path to workspace 和 workspace name 改成你自己創建的資料夾 ``` docker run -it --name=ros -v <path to workspace>:/root/<workspace name> -e DISPLAY=host.docker.internal:0.0 --net=host osrf/ros:noetic-desktop-full ``` :::success :::spoiler **這裡對上面一些參數進行小補充** - **-t (--tty)** : 分配一個終端給Container - **-i (--interactive)** : 允許 User 與 Container 交互 - **--name** : Container 的名字(可以自己取) - **-e (--env)** : 這邊給定了 Xserver 的 環境變量 - **-v (--volume)** : 將本地端的特定資料夾掛載到Container內的指定路徑 - **--net=host** : 指定 Container 的網路連接到 host ::: 也可以將這行程式寫成 .bat (windows) 或 .bash (ubuntu),如果下次要創建一個新的Container,直接修改檔案內的程式並運行即可 :::info **檔案範例** :::spoiler <br> **Windows .bat** ```bash= @echo off set WORKSPACE=C:\Users\User\Desktop\workspace docker run -it ^ --name=ros ^ -v %WORKSPACE%:/root/workspace ^ -e DISPLAY=host.docker.internal:0.0 ^ --net=host ^ osrf/ros:noetic-desktop-full ``` **Ubuntu .bash** ```bash= docker run -it \ --name=ros \ -v /home/user/workspace:/root/workspace \ -e DISPLAY=$DISPLAY \ --net=host \ osrf/ros:noetic-desktop-full ``` ::: <font color="yellow">Step 2. 如果有在插件中Container看到開啟,並在終端顯示,就代表成功開啟Container啦~🎉</font> ![螢幕擷取畫面 2024-01-14 115811](https://hackmd.io/_uploads/By0KHf-Kp.png) ### <font color="cyane">接下來,以 Dev Container 開啟 Container 方便我們進行開發</font> <font color="yellow">Step 3. 右鍵插件內指定的 Container 並 點選 Attach Visual Studio Code</font> ![螢幕擷取畫面 2024-01-14 120403](https://hackmd.io/_uploads/Sy1oHf-Fa.png) <font color="yellow">Step 4. 會開啟一個新的視窗,屬於 Container 內的環境</font> ![螢幕擷取畫面 2024-01-14 120515](https://hackmd.io/_uploads/r1y2Hz-Yp.png) <font color="yellow">Step 5. Container 開啟後,通常需要先進行更新</font> ```bash sudo apt update sudo apt upgrade ``` 這樣我們的 ROS Docker 環境就建立好了, 可以進行相關的開發 ## <font color="orange">Docker Start / Docker Stop</font> 如果下一次需要開啟 Container 時,可以輸入以下指令開啟 Docker ```bash docker start <container name> ``` 然後關閉也是一樣,在 host 本地 輸入 ```bash docker stop <container name> ``` ## <font color="orange">Docker Exec</font> 其實在使用 Dev Container 時,還有一個方法可以進到 Container 內部,這也是最原始的方法,就是 docker exec ``` docker exec -it <container name> bash ``` 指定 -it 並執行 container 的 bash,也就是讓用戶能夠使用bash ==當然,還是 Dev Container 好用,不過還是介紹一下== **那麼以上就是 Docker 的 基本指令啦,介紹了一些開啟Container的基本指令,並成功建置了ROS的開發環境**