在Ubuntu上建立與管理Docker映像檔的完整指南|安裝、最佳化、故障排除

目次

1. 簡介

什麼是Docker?

Docker是一個利用容器化技術來高效開發、部署和執行應用程式的平台。與傳統的虛擬機(VM)不同,容器共享主機作業系統的核心(Kernel),因此啟動速度更快,資源消耗也較少。

在Ubuntu上使用Docker的優勢

Ubuntu是與Docker高度兼容的Linux發行版之一,其優勢如下:

  • 官方支援:Docker官方正式支援Ubuntu,可透過官方套件庫輕鬆安裝。
  • 穩定的套件管理:利用Ubuntu的APT套件管理器,可輕鬆管理Docker版本。
  • 廣泛的社群支援:Ubuntu擁有龐大的使用者社群,遇到問題時較容易找到解決方案。

本文章將介紹的內容

本文將詳細說明以下內容:

  1. 如何在Ubuntu上安裝Docker
  2. Docker映像檔的基本操作
  3. 使用Dockerfile建立自訂映像檔
  4. 設定Ubuntu容器的繁體中文環境
  5. 最佳化與輕量化Docker映像檔
  6. 在Ubuntu容器中進行應用程式開發
  7. 常見錯誤與解決方案

本指南適用於從初學者到進階使用者,希望對您有所幫助!

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

此容器內應該已經預裝了 curlvimgit

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

指定特定版本可確保獲取最新的可用映像檔。

 

年収訴求