我有一台乾淨的 Linux Server,展示一下想要在這台 Server 使用 Docker 的話要安裝、設置些什麼。
建置環境
Linux OS Version:Ubuntu 20.4
安裝版本注意事項
如果你的 Linux 是以下的 64 位元 version,安裝請參考 安裝 Docker-ce(new)
- Ubuntu Kinetic 22.10
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Bionic 18.04 (LTS)
如果你的 Linux 是其他 version,安裝請參考 安裝 Docker.io(舊版)
安裝 Docker.io(舊版)
如果輸入 docker 相關指令出現 not found
訊息,代表還沒有安裝 Docker
使用 apt 安裝 Docker,先更新 sources 的套件資訊 & 索引
sudo apt update
sudo apt-get install docker.io
安裝好後,可用以下指令查看安裝的 Docker 服務狀態 (兩個指令用途相同,擇一即可)
systemctl status docker
service docker status
安裝 Docker-ce(new)
官方教學:Install Docker Engine on Ubuntu | Docker Documentation
如果你的 Server 已經安裝過 old 的 docker.io,請先移除
sudo apt-get remove docker docker-engine docker.io containerd runc
如果出現一些這種 message 不用擔心 👇,就是代表你沒安裝這個套件而已,他才會找不到套件來刪除
E: Unable to locate package docker-engine
設置 docker.com 的 repository
docker-ce 會從這個 sources 抓,所以必須設置
更新 sources 的套件資訊 & 索引
sudo apt-get update
安裝所需套件
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
新增 Docker 官方 GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
設置 repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安裝新的 Docker Engine
更新 sources 的套件資訊 & 索引
sudo apt-get update
安裝 docker-ce 與其他相關套件
sudo apt-get install docker-ce docker-ce-cli containerd.io
如果在執行上述指令出現此錯誤 👇 ,代表你沒設置 repository 所以他抓不到,請參考上一個步驟設置完 repository 後,再更新一次 sources 索引,然後再執行一次此 install 指令才可以用
E: Package 'docker-ce' has no installation candidate
(如果你不想用 docker 的 repository 安裝,可以再參考 Install Docker Engine on Ubuntu | Docker Documentation 其他安裝方式)
install 完畢後,可以下 docker -v
檢查,如果是移除舊版的安裝,docker-ce 的 version 會比 docker.io 新
為 Docker 添加權限
下 docker 指令時,若是遇到 permission denied
錯誤
是因為權限問題,docker 指令前面還要再加一個 sudo
,像這樣 ⬇
sudo docker ps
如果不想要每次加「sudo」,就要再做以下設置
建立 Docker Group
如果還沒有 docker group 的話可以用以下指令添加
sudo groupadd docker
不過如果你是用前一個步驟安裝 docker.io 的話,其實他就會幫你自動 add group 'docker'
了 (可以看一下 install docker.io 那張圖的 log)
把我的 user 帳戶添加進這個 Docker 群組
sudo usermod -aG docker mmadmin
設置完後要重新 Login 才能生效
設置 Server 的 Proxy
如果使用 curl 指令下載東西時出現 time out
,代表你可能需要設置 proxy
這裡我選擇用永久的全域變數設置方式
在 /etc/profile.d 下創建一個 http_proxy.sh
來存全域環境變數
sudo touch /etc/profile.d/http_proxy.sh
編輯 http_proxy.sh
sudo vi /etc/profile.d/http_proxy.sh
添加 proxy 設置
export HTTPS_PROXY=http://yourproxy.hostname:3128
export HTTP_PROXY=http://yourproxy.hostname:3128
export https_proxy=http://yourproxy.hostname:3128
export http_proxy=http://yourproxy.hostname:3128
上面會發現我大小寫的 HTTP_PROXY
http_proxy
都有設置,是因為我之前踩到一些坑,發現有些指令只接受大寫的 HTTP_PROXY
,有些指令只接受小寫的 http_proxy
,所以我的解決方式是大小寫都設置比較保險
延伸閱讀:大小寫 http proxy 的相關討論串
http proxy - What's the 'right' format for the HTTP_PROXY environment variable? Caps or no caps? - Unix & Linux Stack Exchange
讓 Server 重新吃這個設定
source /etc/profile.d/http_proxy.sh
查看 env 是否已經有新增的 proxy 環境變數
env | grep -i proxy
再下一次 curl 就可以通了
設置 Docker Proxy
如果無法 pull image,出現以下錯誤,代表還需要設置 docker proxy
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
新增 docker service 用的目錄
sudo mkdir -p /etc/systemd/system/docker.service.d
新增 proxy.conf 設置擋
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
編輯 proxy.conf
sudo vi /etc/systemd/system/docker.service.d/proxy.conf
裡面添加 port 為 3128 的 Proxy 的設置
[Service]
Environment="HTTP_PROXY=http://yourproxy.hostname:3128"
Environment="HTTPS_PROXY=http://yourproxy.hostname:3128"
(Docker 就支援大寫的 HTTP_PROXY
,這裡放心只設置大寫的就可以了)
設置完後要重新載入 Docker Daemon 配置
sudo systemctl daemon-reload
重新啟動 Docker
sudo systemctl restart docker.service
接下來就能正常 docker pull image 了
更多 proxy 設置說明可參考官方 Doc
Control Docker with systemd | Docker Documentation
Configure Docker to use a proxy server | Docker Documentation