快轉到主要內容

Linux系統各發行版安裝Docker Engine教學

Linux系統 虛擬機與容器技術 Docker Linux
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

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

相較於虛擬機,Docker更輕量,速度更快,佔用硬體資源低。並且許多Linux發行版都支援Docker技術,這樣只要裝了Docker,各大發行版都能用一樣的指令跑一樣的伺服器服務,不用調整一堆有的沒的設定檔。

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

1. Docker Engine與Docker Desktop的差別
#

本文提及的Docker皆是指Docker Engine,並不包含圖形軟體Docker Desktop。

你真的需要裝Docker Desktop嗎?

答案是不必要。Docker Desktop僅是一個封閉原始碼的虛擬機前端軟體,用來給新手練習之用。

Docker Desktop是給Windows、macOS系統一個方便跑Docker的環境。由於Docker需要用到Linux核心才能運作,Windows和macOS的Docker是跑在虛擬機裡面的,和系統之間隔了一層虛擬機,所以Docker Dekstop的效能不佳。

Docker官方說明便可知道Docker Dektop的Docker本質是跑在虛擬機裡面。

更誇張的是連Linux版Docker Desktop也是跑在虛擬機裡面。如果你已經在用Linux系統,那就不需要裝Docker Desktop,直接跑原生版的Docker即可。

除非你需要常常管理Docker Hub的專案,否則跑Docker Desktop就是浪費空間。

要真正上手Docker請學習指令。

真的、真的很需要一個Docker圖形控制界面,你可以跑 Portainer替代之。

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

“docker-compose” V2已經併入到Docker,成為docker的子指令"docker compose"。

2.1. Ubuntu / WSL
#

參考資料: Docker官方文件

測試版本:Ubuntu 22.04

根據官方文件,建議加入Docker官方的套件庫,而非從Ubuntu套件庫裝。首先

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

  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-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2.2. Debian
#

測試版本:Debian 12 Bookworm

  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/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  1. 加入Docker官方的套件庫
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-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2.3. Raspberry Pi OS
#

註:只支援32位元系統Raspbian OS。64位元的Raspberry Pi OS直接用Debian的裝法就可以了。

  1. 安裝GNUPG
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/raspbian/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/raspbian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安裝Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2.4. Arch Linux / Manjaro
#

參考資料: Arch Wiki

從Arch的套件庫直接安裝Docker

sudo pacman -S docker docker-compose

2.5. Fedora
#

參考資料: Docker官方文件

測試版本:Fedora 38

  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

2.6. openSUSE
#

參考資料: openSUSE Wiki

openSUSE Tumbleweed使用以下指令:

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

openSUSE Leap 15.4使用以下指令:

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

2.7. Alpine Linux
#

參考資料: Alpine Linux Wiki

  1. 編輯/etc/apk/repositories,將儲存庫取消註解,啟用Community儲存庫
http://dl-cdn.alpinelinux.org/alpine/v3.17/community
  1. 從Alpine套件庫安裝Docker
sudo apk update
sudo apk add docker docker-compose

2.8. Gentoo
#

參考資料: Gentoo Wiki

  1. 官方預先編譯的sys-kernel/gentoo-kernel-bin核心預設支援Docker。若是手動調整核心,參考 Gentoo Wiki開啟Docker相關的功能。

  2. 用以下指令確認核心與Docker的相容性:

/usr/share/docker/contrib/check-config.sh
  1. 直接編譯安裝以下套件:
sudo emerge --ask --verbose app-containers/docker app-containers/docker-cli

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

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

  1. 您可以將使用者加入Docker群組,然後重開機。這樣使用者不須sudo也能執行docker指令。但請注意這樣等同賦予使用者root權限,能夠以docker執行任何指令。
sudo groupadd docker
sudo usermod -aG docker $USER
# 或是addgroup $USER docker
  1. 設定開機自動啟動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是否正常運作。成功的話會印出Hello World訊息。
sudo docker run hello-world

如果Docker容器無法連上網路,致使無法拉取映像檔,請調整DNS設定(Systemd-resolved或dnsmasq),使用Google的DNS8.8.8.8

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

延伸閱讀
#

相關文章

ReDroid教學:用Docker跑Android系統,在x86電腦玩ARM手機遊戲
Linux系統 虛擬機與容器技術 ReDroid Android Docker Linux Scrcpy
如何在Linux安裝Bliss OS,支援GPU加速的Android-x86虛擬機,可玩手遊
Linux系統 虛擬機與容器技術 Bliss OS Android-X86 KernelSU VirGL Linux QEMU Scrcpy
Cassowary:在Linux跑Windows軟體,支援Microsoft Office 365、Adobe Photoshop
Linux系統 虛擬機與容器技術 Microsoft Office Photoshop QEMU Windows Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。