快轉到主要內容

Docker Engine在各大Linux發行版的安裝教學

· 民國115年丙午年
·
切換繁體/簡體 ·
分類 資訊科技 虛擬機與容器技術
標籤 Docker Linux
目錄

本文參照Docker官方文件,簡介各大Linux發行版的Docker安裝方式,以及安裝後建議採取的措施,配合個人經驗做註解。指令未來可能有所變更,請以Docker公司的官方文件為準。

1. 什麼是Docker?
#

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

容器 (container) 相較於虛擬機 (virtual machine) 是更輕量,速度更快,佔用硬體資源低的技術。容器並不會模擬完整硬體與作業系統,而是透過Linux核心的namespaces與 cgroups等機制隔離行程,並與宿主系統共用同一個Linux核心。Docker本身則是將這些Linux核心功能進一步封裝與標準化的容器平台。

用Docker的好處是什麼呢?它對軟體開發人員和使用者都有好處。

對軟體開發人員來說,你可以把一個程式所需要的依賴項目打包為一個Docker映像檔(image),然後部署到多個機器上。一次打包多處執行。這樣每個Linux發行版只要裝了Docker,都能用一樣的指令跑一樣的服務,不用調整一堆有的沒的設定檔,省去解決依賴衝突的時間。例如,你在Ubuntu開發的軟體,打包為Docker映像檔之後,便能確保它在Debain、Arch Linux、Fedora、openSUSE的機器也能跑起來。不需要重新打包。

對使用者來說,Docker能夠節省你安裝軟體的時間。

以自架雲端「Nextcloud」為例,在Ubuntu傳統的安裝方式需要你用apt install自行安裝Apache、PHP、MariaDB、Redis等多種依賴,還要處理不同Linux發行版之間的套件差異、權限設定、版本相容性問題,部署與維護成本較高。而使用Docker則可以將Nextcloud所需的執行環境與依賴一併封裝成映像檔,透過docker compose up -d一行指令快速部署到不同機器上,大幅減少環境配置問題,並讓升級、移轉、備份更加方便。

Docker誕生於2013年,與Docker類似的容器技術還有Systemd-nspawn、LXC、Podman等等。有很多新興方案試圖取代Docker,不過Docker仍是目前Linux最熱門的容器技術,有非常成熟的生態系,推薦瞭解使用方式。

2. Docker Engine與Docker Desktop的差別
#

本文是要在Linux系統安裝Docker。提及的Docker皆是指Docker Engine,並不包含圖形軟體Docker Desktop。

你真的需要裝Docker Desktop嗎?

答案是 不必要 。Docker Desktop僅是一個虛擬機軟體,用來給需要的人使用。

Docker本身是開源軟體,使用Apache License授權。不過Docker Desktop是Docker, Inc公司推出的產品,是含有封閉原始碼的軟體。

先說,Docker在Linux系統的執行速度是比Windows和macOS快的。因為Docker本來就重度依賴Linux核心的功能。因此Docker可以說是Linux專武。

那麼其他系統要怎麼跑Docker呢?使用虛擬機。Docker Desktop是給Windows和macOS系統一個方便跑Docker的環境。由於Docker需要用到Linux核心才能運作,很難移植到其他系統,故Windows和macOS需要安裝Docker Desktop,用它附帶的虛擬機跑Docker。從Docker官方說明便可知道Docker Dektop的Docker本質是跑在虛擬機裡面。所以Docker Dekstop的效能不佳。更誇張的是連Linux版Docker Desktop也是跑在虛擬機裡面。如果你已經在用Linux系統,那就不需要裝Docker Desktop,直接跑原生版的Docker即可。

除非你需要常常管理Docker Hub的專案,否則跑Docker Desktop就是浪費空間。要真正上手Docker請學習指令。真的、真的很需要一個Docker圖形控制界面,你可以跑Portainer這類服務替代之。

3. 各大Linux發行版的Docker安裝指令
#

Ubuntu & WSL
#

參考資料:Docker官方文件

測試版本:Ubuntu 26.04

Windows WSL預設的發行版是Ubuntu,所以也可以用Ubuntu的指令裝Docker。

如果要最新版,建議加入Docker官方的套件庫,而非從Ubuntu套件庫裝。

  1. 安裝GNUPG,匯入Docker套件庫的金鑰
sudo apt-get update

sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

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
  1. 按照你的系統版本加入對應的套件庫
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
  1. 安裝Docker Engine
sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Debian
#

參考資料:Docker官方文件

測試版本:Debian 13

如果要最新版,建議加入Docker官方的套件庫,而非從Debian套件庫裝。

  1. 安裝GNUPG,匯入Docker套件庫的金鑰
sudo apt update

sudo apt install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

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
  1. 按照你的系統版本加入對應的套件庫
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
  1. 安裝Docker Engine
sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Arch Linux
#

參考資料:Arch Wiki

從Arch Linux的套件庫直接安裝Docker就可以了

sudo pacman -S docker docker-compose

Fedora
#

參考資料:Docker官方文件

測試版本:Fedora 44

Fedora套件相對新,可以選擇從Fedora套件庫直接裝或是用Docker官方提供的版本。

  1. 加入Docker官方的套件庫,以取得最新Docker套件
sudo dnf -y install dnf-plugins-core

sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
  1. 安裝Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

openSUSE
#

參考資料:openSUSE Wiki

openSUSE Tumbleweed使用以下指令從套件庫安裝最新版:

sudo zypper install docker docker-compose docker-compose-switch

4. 安裝Docker後建議做的事
#

本節講述測試Docker安裝正常的程序,以及檢討安全性措施。

  1. 您可以將使用者加入Docker群組,然後重開機。這樣使用者不須sudo也能執行docker指令。但請注意這樣等同賦予使用者root權限,能夠以docker執行任何指令。
sudo groupadd docker

sudo usermod -aG docker $USER
# 或是addgroup $USER docker
  1. 設定Linux系統開機之後,自動啟動Docker服務
# 如果是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
  1. 接著,試試看跑Docker的Hello World,確認Docker Engine是否正常運作。docker run這個指令會從Docker Hub這個最多人用的託管網站下載映像檔。成功的話會印出Hello World訊息。
sudo docker run hello-world
  1. 如果Docker容器無法連上網路,致使無法拉取映像檔,請查看/etc/resolv.conf,調整DNS設定(Systemd-resolved或dnsmasq),使用Google的DNS8.8.8.8

  2. 最後是值得注意的安全性問題:Docker會自行調整iptables規則,從而導致UFW防火牆的封鎖失效。這樣Linux電腦跑容器服務會有潛在風險,例如不該給外人存取的資料庫通訊埠被Docker暴露到外網。此時請考慮採用ufw-docker這類方案解決之。或者設定Docker服務只監聽localhost,改用反向代理存取服務。

延伸閱讀
#

相關文章


感謝您的閱讀。我寫作是為了誠實表達想法,而不是追逐社群互動與流量。我很樂意傾聽你在仔細閱讀我文章之後的心得。若有內容勘誤 or 技術問題 or 回饋想法,歡迎透過本站「關於」頁面的Email與我聯絡。