# Ubuntu Docker
###### tags: `Ubuntu Software`
## preprocess
首先,更新軟體包索引,並且安裝必要的依賴軟體,來新增一個新的 HTTPS 軟體源:
```bash!=
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
```
使用下面的 curl 匯入源倉庫的 GPG key:
```bash!=
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
將 Docker APT 軟體源新增到你的系統:
```bash!=
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
```
現在,Docker 軟體源被啟用了,你可以安裝軟體源中任何可用的 Docker 版本。
## Install
### 安裝最新版
```bash=
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
```
一旦安裝完成,Docker 服務將會自動啟動。你可以輸入下面的命令,驗證它:
```bash=
sudo systemctl status docker
```
輸出將會類似下面這樣:
```bash!=
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-21 14:47:34 UTC; 42s ago
...
```
### 安裝特定版本
想要安裝指定版本,首先列出 Docker 軟體源中所有可用的版本:
```bash=
sudo apt update
apt list -a docker-ce
```
可用的 Docker 版本將會在第二列顯示。在寫作這篇文章的時候,在官方 Docker 軟體源中只有一個 Docker 版本(5:19.03.9~3-0~ubuntu-focal)可用:
```bash=
docker-ce/focal 5:19.03.9~3-0~ubuntu-focal amd64
```
通過在軟體包名後面新增版本=<VERSION>來安裝指定版本:
```bash!=
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io
```
一旦安裝完成,Docker 服務將會自動啟動。你可以輸入下面的命令,驗證它:
```bash=
sudo systemctl status docker
```
輸出將會類似下面這樣:
```bash!=
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-21 14:47:34 UTC; 42s ago
...
```
### 更新
當一個新的 Docker 釋出時,你可以使用標準的sudo apt update && sudo apt upgrade流程來升級 Docker 軟體包。
如果你想阻止 Docker 自動更新,鎖住它的版本:
```bash=
sudo apt-mark hold docker-ce
```
## 以非 Root 使用者身份執行 Docker
預設情況下,只有 root 或者 有 sudo 許可權的使用者可以執行 Docker 命令。
想要以非 root 使用者執行 Docker 命令,你需要將你的使用者新增到 Docker 使用者組,該使用者組在 Docker CE 軟體包安裝過程中被建立。想要這麼做,輸入:
```bash=
sudo usermod -aG docker $USER
```
$USER是一個環境變數,代表當前使用者名稱。
登出,並且重新登入,以便使用者組會員資訊重新整理
## 驗證安裝過程
想要驗證 Docker 是否已經成功被安裝,你可以執行docker命令,前面不需要加`sudo, 我們將會執行一個測試容器:
```bash=
docker container run hello-world
```
如果本地沒有該映象,這個命令將會下載測試映象,在容器中執行它,打印出 “Hello from Docker”,並且退出。
輸出看起來應該像這樣:

這個容器將會在列印訊息後停止執行,因為它沒有任何長期執行的程序。
預設情況下,Docker 從 Docker Hub 拉取映象。它是一個雲端服務,主要用來儲存 公有和私有源中的 Docker 映象。
## 解除安裝 Docker
在解除安裝 Docker 之前,你最好 移除所有的容器,映象,卷和網路。
執行下面的命令停止所有正在執行的容器,並且移除所有的 docker 物件:
```bash=
docker container stop $(docker container ls -aq)
docker system prune -a --volumes
```
現在你可以使用apt像解除安裝其他軟體包一樣來解除安裝 Docker:
```bash=
sudo apt purge docker-ce
sudo apt autoremove
```
## install docker-compose
輸入:
```bash=
sudo apt install -y docker-compose
```
## [ Solution ] 啟動 docker-compose 發生 ERROR: Couldn’t connect to Docker daemon at http+docker://localunixsocket - is it running? 錯誤
解決啟動 docker-compose 時發生的錯誤
ERROR: Couldn’t connect to Docker daemon at http+docker://localunixsocket - is it running? If it’s at a non-standard location, specify the URL with the DOCKER_HOST environment variable

### Step 1. 將當前用戶加入 docker 群組
❖ 在 【 Terminal 】中輸入下方指令
```bash=
sudo gpasswd -a ${USER} docker
```

### Step 2. 退出當前用戶
❖ 在 【 Terminal 】中輸入下方指令
```bash=
sudo su
```

### Step 3. 再次切换到 ubuntu 用戶
❖ 在 【 Terminal 】中輸入下方指令
```bash=
su siang
```

### Step 4. 啟動 docker-compose
❖ 在 【 Terminal 】中輸入下方指令
```bash=
docker-compose up -d
```

## 進入docker image檔環境
```bash=
docker-compose up #啟動你的docker image
docker ps # 確定docker iamge 有跑起來
docker exec -it distribute_robot_1 /bin/bash #進入docker image
```