1. 簡介
什麼是Docker?
Docker是一個利用容器化技術來高效開發、部署和執行應用程式的平台。與傳統的虛擬機(VM)不同,容器共享主機作業系統的核心(Kernel),因此啟動速度更快,資源消耗也較少。
在Ubuntu上使用Docker的優勢
Ubuntu是與Docker高度兼容的Linux發行版之一,其優勢如下:
- 官方支援:Docker官方正式支援Ubuntu,可透過官方套件庫輕鬆安裝。
- 穩定的套件管理:利用Ubuntu的APT套件管理器,可輕鬆管理Docker版本。
- 廣泛的社群支援:Ubuntu擁有龐大的使用者社群,遇到問題時較容易找到解決方案。
本文章將介紹的內容
本文將詳細說明以下內容:
- 如何在Ubuntu上安裝Docker
- Docker映像檔的基本操作
- 使用Dockerfile建立自訂映像檔
- 設定Ubuntu容器的繁體中文環境
- 最佳化與輕量化Docker映像檔
- 在Ubuntu容器中進行應用程式開發
- 常見錯誤與解決方案
本指南適用於從初學者到進階使用者,希望對您有所幫助!
2. 在Ubuntu上安裝Docker
使用官方套件庫安裝Docker
在Ubuntu上,可以透過官方套件庫輕鬆安裝Docker。請按照以下步驟進行安裝設定。
1. 移除舊版Docker套件
Ubuntu內建的 docker.io
可能是較舊的版本,因此建議先移除。
sudo apt remove docker docker-engine docker.io containerd runc
2. 安裝必要的相依套件
安裝Docker前,先安裝必要的相依套件。
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
3. 新增Docker官方套件庫
新增Docker的官方GPG金鑰,並設定套件庫。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. 安裝Docker
套件庫設定完成後,即可安裝Docker。
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
5. 確認安裝是否成功
檢查Docker是否安裝成功,顯示版本資訊即可確認。
docker --version
安裝後的初始設定
1. 啟動Docker服務並設定開機自動執行
啟動Docker服務,並讓其在系統開機時自動執行。
sudo systemctl start docker
sudo systemctl enable docker
2. 設定非root使用者可使用Docker
預設情況下,Docker只能由root使用者執行,若要讓一般使用者可使用Docker,需加入 docker
群組。
sudo usermod -aG docker $USER
設定完成後,請登出並重新登入,以確保權限變更生效。
3. 測試Docker是否可正常運作
使用非root權限執行 hello-world
容器,確認Docker是否正常運作。
docker run hello-world
如果終端機顯示「Hello from Docker!」,表示安裝成功!

3. Docker映像檔的基本操作
什麼是Docker映像檔?
Docker映像檔(Image)是一種用於建立容器的模板。透過使用Ubuntu為基礎的Docker映像檔,可以快速建立一個Ubuntu環境。
從Docker Hub獲取Ubuntu映像檔
Docker Hub是一個包含大量官方Docker映像檔的託管平台。要下載Ubuntu映像檔,可以執行以下指令:
docker pull ubuntu
啟動與停止容器
下載Ubuntu映像檔後,可以使用它來啟動容器:
docker run -it ubuntu bash
執行此指令後,將開啟Ubuntu容器的終端(Shell),可在容器內進行操作。
列出運行中的容器
要檢視目前運行中的容器,可使用以下指令:
docker ps
若要顯示所有容器(包含已停止的),請使用 -a
參數:
docker ps -a
停止與刪除容器
要停止執行中的容器,可使用以下指令:
docker stop [容器ID或名稱]
若要刪除不再需要的容器,請執行以下指令:
docker rm [容器ID或名稱]
管理Docker映像檔
要檢視已下載的Docker映像檔,可以使用以下指令:
docker images
若要刪除不再使用的映像檔,請執行以下指令:
docker rmi [映像檔ID]
4. 使用Dockerfile建立自訂映像檔
什麼是Dockerfile?
Dockerfile是一個用於建立自訂Docker映像檔的設定檔案。透過Dockerfile,可以根據需求客製化映像檔,例如安裝特定軟體或設定環境變數。這樣可以確保開發環境一致,並便於部署。
Dockerfile的基本語法
在Dockerfile中,可以使用以下主要指令:
指令 | 說明 |
---|---|
FROM | 指定基礎映像檔 |
RUN | 執行指令來安裝軟體或配置系統 |
COPY | 將檔案複製到容器內 |
WORKDIR | 設定工作目錄 |
CMD | 設定容器啟動時預設執行的指令 |
ENTRYPOINT | 設定容器的進入點(Entry Point) |
建立基於Ubuntu的自訂映像檔
接下來,我們將透過以下步驟建立一個基於Ubuntu的自訂Docker映像檔。
1. 建立專案目錄
首先,建立一個新的專案目錄並進入該目錄。
mkdir my-ubuntu-image
cd my-ubuntu-image
2. 建立Dockerfile
在專案目錄內建立 Dockerfile
,並加入以下內容:
# 使用官方Ubuntu映像檔作為基礎
FROM ubuntu:latest
# 設定維護者資訊(可選)
LABEL maintainer="your-email@example.com"
# 更新軟體包並安裝基本工具
RUN apt update && apt install -y curl vim git
# 設定工作目錄
WORKDIR /workspace
# 設定容器啟動時執行的指令
CMD ["bash"]
3. 建置Docker映像檔
使用Dockerfile建置自訂映像檔:
docker build -t my-ubuntu-image .
其中 -t
參數用於指定映像檔名稱。
4. 確認映像檔是否建立成功
檢查新建的Docker映像檔:
docker images
5. 啟動容器
使用自訂映像檔來啟動容器:
docker run -it my-ubuntu-image
此容器內應該已經預裝了 curl
、vim
和 git
。
5. 設定Ubuntu容器的繁體中文環境
預設的Ubuntu映像檔是英文環境,如需使用繁體中文,則需進行額外設定。
設定繁體中文語系
要讓Ubuntu容器能夠顯示與輸入繁體中文,首先需要安裝語系套件。
1. 安裝必要的語言套件
apt update
apt install -y language-pack-zh-hant locales
2. 設定語系
安裝後,設定繁體中文為系統語言並套用。
locale-gen zh_TW.UTF-8
update-locale LANG=zh_TW.UTF-8
3. 套用設定
export LANG=zh_TW.UTF-8
設定繁體中文輸入法
若需在終端機或GUI環境中輸入繁體中文,可以安裝 ibus-chewing
。
apt install -y ibus-chewing
如果使用GUI環境,請新增以下環境變數來啟用輸入法。
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
在Docker容器內使用GUI應用程式
如果要在Docker容器內執行GUI應用程式,可以使用X伺服器來顯示介面。
在主機上安裝X伺服器後,執行以下命令來啟動容器並啟用X11轉發。
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image
6. 最佳化與輕量化Docker映像檔
最佳化Docker映像檔可以提升容器的啟動速度並減少存儲空間。本章節將介紹如何建立更輕量化的映像檔。
建立輕量化的Ubuntu映像檔
預設的 ubuntu:latest
映像檔較大,如果想減少映像檔的大小,可以使用 ubuntu:minimal
。
FROM ubuntu:minimal
另一個更極致的輕量化方案是使用 Alpine Linux,這是一個極小型的Linux發行版,適合用於輕量化容器。
FROM alpine:latest
RUN apk add --no-cache bash curl
使用Alpine可以大幅減少映像檔大小,減少數百MB的存儲需求。
刪除不必要的檔案以減少映像檔大小
在Dockerfile中,透過刪除不必要的快取與檔案,可以有效減少映像檔的大小。例如:
RUN apt update && apt install -y curl vim \
&& apt clean \
&& rm -rf /var/lib/apt/lists/*
上面的 rm -rf /var/lib/apt/lists/*
指令可以刪除APT快取,減少映像檔佔用的存儲空間。
使用多階段建置(Multi-stage Build)
透過多階段建置,可以將開發環境與最終的應用環境分開,使映像檔更加輕量。例如:
FROM ubuntu as builder
RUN apt update && apt install -y gcc
FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc
這樣做的好處是,在最終映像檔中不包含編譯工具,使得映像檔體積更小,更適合部署。
7. 實踐:在Ubuntu容器中開發應用程式
本章將介紹如何在Ubuntu容器中建立開發環境,並進行應用程式開發。
建立Python開發環境
在Ubuntu容器內建立Python開發環境的Dockerfile範例如下:
FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]
使用以下指令來建置映像檔並執行Python開發環境:
docker build -t python-dev .
docker run -it python-dev
進入容器後,即可使用 python3
指令來執行Python程式。
建立Node.js開發環境
如果需要使用Node.js開發環境,可使用以下Dockerfile:
FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]
建置映像檔並執行Node.js開發環境:
docker build -t node-dev .
docker run -it node-dev
進入容器後,即可使用 node
指令來執行JavaScript程式。
8. FAQ與常見問題排除
在使用Docker的過程中,可能會遇到各種錯誤。本章將介紹常見問題及其解決方案。
Docker與虛擬機(VM)的差異
- Docker:容器共用主機作業系統核心,輕量且啟動速度快。
- 虛擬機(VM):每個VM都運行完整的作業系統,因此資源消耗較高,啟動速度較慢。
由於Docker更輕量,因此更適合開發環境及自動化部署。
Ubuntu容器的資料持久化
若希望容器停止後仍能保留資料,可使用 Volume 掛載。
docker run -v my_data:/data ubuntu
即使刪除容器,資料仍然會保存在 my_data
Volume 內,可供日後使用。
常見錯誤與解決方案
1. permission denied
錯誤
若執行Docker指令時出現 permission denied
,可能是因為當前使用者未加入 docker
群組。
請執行以下指令將使用者加入 docker
群組:
sudo usermod -aG docker $USER
執行後,請登出並重新登入以套用權限變更。
2. image not found
錯誤
如果Docker Hub上的映像檔已被移除,請指定最新的版本重新下載:
docker pull ubuntu:22.04
指定特定版本可確保獲取最新的可用映像檔。