# Docker Desktop Tutorial
> [name=徐冠東(gordondonghsu.ee10@nycu.edu.tw)]
## Download
官網下載: https://www.docker.com/products/docker-desktop/
(安裝以Desktop為範例,但不一定要使用Desktop版本)
---
## Setting-Enable Virtualization
1. By BIOS: https://www.youtube.com/watch?v=ZDeje9wgDp4 (see how to enable virtualization)
2. By Console:

---
接下來就是打開cmd or Windows PowerShell
(windows可改用: https://reurl.cc/WvvDQL)
載入image指令:
```linux=
$ docker pull <image_file>
```
Ex:
```linux=
$ docker pull ubuntu:22.04
```
也可在docker desktop下載image

---
### 創建container指令:
```linux=
$ docker run -itd --name <container_name> --hostname <host_name> -v <host_path>:<virtual_path> <image_file>
```
(其實還有個-p的port連結指令,這裡不需用到)
EX:
```linux=
$ docker run -itd --name AUV_ros --hostname Sayori -v C:\Users\Sayori\Volume01:/home/src ubuntu:22.04
```
(volume觀念參考: https://www.youtube.com/watch?v=p2PH_YPCsis)
Ps: 這裡host_path跟virtual_path是共用資料夾的,可以用來分享資料!
### 輸出成image:
創完container後就可以自己設定環境了~如果未來想把自己設定的環境備份
```linux=
$ docker commit <container_name>
$ docker images -a
$ docker tag <image_ID> <new_image_name>
```
第二行指令是要確認新image的ID為多少,如圖:

(參考: https://linuxhint.com/save-docker-container-as-image/)
---
## 解決在wsl2中無法使用docker desktop的問題
依下圖的指示增加設定。

### 之後以下為可能的報錯,表示目前的使用者身分沒有權限。:
```
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=ocms_server&target=&ulimits=null&version=1": dial unix /var/run/docker.sock: connect: permission denied
```
### 解決辦法:
1. 建立 docker 群組
```=linux
$ sudo groupadd docker
```
2. 如果一開始就已經有群組的話,就則會告知下方訊息
```
groupadd: group 'docker' already exists
```
3. 將非 root 帳號加上 docker 群組中
```=linux
$ sudo gpasswd -a {$USER} docker
```
成功訊息
```
Adding user admins to group docker
```
4. 讓這個帳號立刻改成使用 docker 這個群組
```=linux
$ newgrp docker
```
重新開啟後,就可以使用了。
## 啟動/停止container
啟動:
```
$ docker start {container_name}
```
停止:
```
$ docker stop {container_name}
```
## 使用push指令
記得先在自己的docker hub裡建立相對應的Repositories的名稱:
以下例子的話,就是要建立叫"my-ubuntu-images"的repository,後面還可以選擇tag的數字。
```
$ docker tag ubuntu:22.04 yourusername/my-ubuntu-images:22.04
$ docker push yourusername/my-ubuntu-images:22.04
```
---
## 開放device權限
```
$ docker run -it --device=/dev/ttyUSB0:/dev/ttyUSB0 my-image
```
---
## 詳細可參考網址:
1. 基本概念
(1) https://glints.com/tw/blog/docker-basic-tutorial/
(2) https://mailtojacklai.medium.com/cs-docker%E7%9A%84%E4%B8%89%E5%80%8B%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5-image-container-%E5%92%8Cregistry-89844595a7a6
2. 指令參考
https://firstsun.pixnet.net/blog/post/36246949-docker-basic-commands
3. 別人的影片筆記
https://github.com/twtrubiks/docker-tutorial
4. [Docker] 建立群組
https://quietbo.com/2022/06/06/docker-%E5%BB%BA%E7%AB%8B%E7%BE%A4%E7%B5%84-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unix%E8%A7%A3%E6%B1%BA/
5. Docker Desktop:
https://hackmd.io/Xmf4DouoS_aSnE2nZZuZQg
6. permission denied錯誤
https://quietbo.com/2022/06/06/docker-%E5%BB%BA%E7%AB%8B%E7%BE%A4%E7%B5%84-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unix%E8%A7%A3%E6%B1%BA/
7. 解除無法登入docker hub的問題:
https://stackoverflow.com/questions/65896681/exec-docker-credential-desktop-exe-executable-file-not-found-in-path
8. push分享指令:
https://larrylu.blog/share-image-on-dockerhub-ccb7d9b26fa8
---
## 其他指令
1. docker build
https://docs.docker.com/engine/reference/commandline/build/