Docker是適用於Linux系統的容器技術,可簡化應用程式部署的程序,也能用來跑伺服器服務。

相較於虛擬機,Docker更輕量,速度更快,佔用硬體資源低。並且許多Linux發行版都支援Docker技術,這樣只要裝了Docker,各大發行版都能用一樣的指令跑一樣的伺服器服務,不用調整一堆有的沒的設定檔。
本文簡介各大Linux發行版的Docker安裝方式,以及安裝後建議採取的措施,配合個人經驗做註解。指令未來可能有所變更,請以Docker公司的官方文件為準。
本文提及的Docker皆是指Docker Engine,並不包含圖形軟體Docker Desktop。
你真的需要裝Docker Desktop嗎?
答案是不必要。Docker Desktop僅是一個封閉原始碼的虛擬機軟體,用來給新手練習之用。Docker Desktop方便給原生不支援Docker的Windows、macOS系統一個方便跑Docker的環境。如果你已經在用Linux系統,那麼就不需要裝Docker Desktop。
要真正上手Docker,請學習指令。
“docker-compose” V2已經併入到Docker,成為docker的子指令"docker compose"。
參考資料:Docker官方文件
測試版本:Ubuntu 22.04,Debian 11
- 安裝GNUPG
1
2
3
| sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
|
- 根據官方文件,建議加入Docker官方的套件庫,而非從APT套件庫裝。按照你的系統加入對應的套件庫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| # Ubuntu用這個
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Debian用這個
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Raspbian OS用這個
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/raspbian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
- 安裝Docker Engine
1
2
| sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
參考資料:Arch Wiki
從Arch的套件庫直接安裝Docker
1
| sudo pacman -S docker docker-compose
|
參考資料:Docker官方文件
測試版本:Fedora 38
- 加入Docker官方的套件庫,以取得最新Docker套件
1
2
| sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
|
- 安裝Docker
1
| sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
參考資料:openSUSE Wiki
openSUSE Tumbleweed使用以下指令:
1
| sudo zypper install docker docker-compose docker-compose-switch
|
openSUSE Leap 15.4使用以下指令:
1
2
| sudo zypper addrepo https://download.opensuse.org/repositories/devel:languages:python/15.4/devel:languages:python.repo zypper refresh
sudo zypper install docker python3-docker-compose
|
參考資料:Alpine Linux Wiki
- 編輯
/etc/apk/repositories
,將儲存庫取消註解,啟用Community儲存庫
1
| http://dl-cdn.alpinelinux.org/alpine/v3.17/community
|
- 從Alpine套件庫安裝Docker
1
2
| sudo apk update
sudo apk add docker docker-compose
|
參考資料:Gentoo Wiki
官方預先編譯的sys-kernel/gentoo-kernel-bin
核心預設支援Docker。若是手動調整核心,參考Gentoo Wiki開啟Docker相關的功能。
用以下指令確認核心與Docker的相容性:
1
| /usr/share/docker/contrib/check-config.sh
|
- 直接編譯安裝以下套件:
1
| sudo emerge --ask --verbose app-containers/docker app-containers/docker-cli
|
本節講述測試Docker安裝正常的程序,以及檢討安全性措施。
- 您可以將使用者加入Docker群組(需重開機),這樣使用者不須sudo也能執行docker指令。
1
2
3
| sudo groupadd docker
sudo usermod -aG docker $USER
# 或是addgroup $USER docker
|
- 設定開機自動啟動Docker服務
1
2
3
4
5
6
7
8
9
| # 如果是init系統是Systemd
sudo systemctl enable docker
sudo systemctl start docker
# 如果是init系統是OpenRC
sudo rc-update add docker
sudo rc-update add cgroups
sudo rc-service cgroups start
sudo rc-service docker start
|
- 接著,試試看跑Docker的Hello World,拉取映像檔,確認Docker Engine是否正常運作。成功的話會印出Hello World訊息。
1
| sudo docker run hello-world
|
如果Docker容器無法連上網路,致使無法拉取映像檔,請調整DNS設定(Systemd-resolved或dnsmasq),使用Google的DNS8.8.8.8
。
最後是值得注意的安全性問題:Docker會自行調整iptables規則,從而導致UFW或FirewallD這類防火牆服務的封鎖失效。這樣跑容器服務會有潛在風險,例如不該給外人存取的資料庫通訊埠被Docker暴露到外網。此時請考慮採用ufw-docker這類方案解決之。