K8s快速實戰(一)

今天是我開始學習Kubernetes的第一天!Kubernetes(又稱K8s)在現代的開發環境中,已經幾乎變成了必備技能了。也因此快速掌握Kubernetes的功能與特性也變得更加重要,那麼事不宜遲,我們就開始來學習K8s吧!


…我本來是想這麼說的,但是在提到K8s之前,我希望可以先解釋為甚麼K8s會變得更加重要,要談談K8s的崛起,我想免不了提到現代系統架構。K8s在微服務興起之後,變得相當知名,原因是因為微服務的要求有一個特點──”服務需要可以獨立部署”。

微服務簡單來說,就是將各個系統的功能依照業務邊界切割來達到職責分明,並且需要符合不少特性,就可以被稱為微服務。

在大型系統中如果採用微服務設計的話,可想而知,將會因功能切分,產生可能數以百計的服務,而這些服務若是一個個手動管理的話,維運工程師應該會抓狂,於是Kubernetes便是用來簡化複雜的容器部署功能,提供一連串簡易的設定讓軟體的部署可以快速、實現自動化。

單體式架構與微服務

單體式架構(Monolithic)定義是──利用單一個元件建構,以一個單一元件部署,因為所有功能都塞在一起,常常有牽一髮動全身的問題。

微服務(Microservice)是一個服務導向架構(Service-Orient architecture)的變形,將服務解構為一個個鬆耦合的應用程式元件。在微服務架構中,服務應該是輕量化可獨立部署的。
此外還有以下特色:

  • 單個元件擁有單一職責,權責分明
  • 獨立擴展,不需耦合其他元件
  • 可由不同Teams, 開發語言, 不同平台部署來部署,非常自由
  • 一個微服務可以擁有自己的資料庫

Kubernetes提供了完整的介面去管理我們的服務,我們的程式碼通常會經由Docker打包一個可以在各個環境都可以運作的容器(Container)。

Docker

Docker是一個開源的Container執行環境,支援Mac, Windows與Linux,可以用Command Line Tool去控制。應用程式會透過Dockerfile去建構Container Image,透過Container使你的程式碼可以跨環境地執行。

甚麼是Container?

Container是一個軟體單元包含了你的程式碼、執行環境(Runtime)、System Tools、System Library。使用Docker部署有許多好處,除了幾乎不會遇到環境問題外,一個Container包含許多Image Layer,這代表如果你只改了一部分的功能,Docker會只重新編譯你更動的那部分,使用Image Layer可以大大提升執行/部署的效率。

如果沒學過或是不知道Docker是甚麼的人可以參考這篇文章(What is Docker?)

Docker Compose

在Docker中,我們也經常使用Docker Compose這個功能來管理我們的Container,你可以把Docker想成一個腳本,只要一運行就執行多個Container,設定連線、環境參數等等,幫你一次把整個環境做到好,簡單來說,就是這麼萬能的功能。

Docker Compose 特色

  • 使用 YAML 格式的檔案來定義
  • 定義與執行多個Container的應用程式
  • 通常使用Docker CLI 來控制與執行

一個簡易的Docker Compose會像是這樣:
Docker Compose yaml

而Docker Compose也絕非萬能,通常來說,Docker Compose的使用情境如下:

  1. 不需要像是K8s那樣高級的調度的服務。
  2. 開發環境與測試環境。
  3. 外部服務恰好支援Docker Compose 功能的,比方說:
    • Azure App Service
    • AWS ECS
    • Virtual Machine

補充:Docker Compose的資源管理

redis resource limits

補充:Docker Compose的環境參數管理 (內部預設值並可被外部指令覆蓋)

env variable

補充:Docker Compose的環境參數管理 (交給外部定義)

env variable2

補充:Docker Compose的網路

Docker Internal&External Networking

App可以設定屬於的Network,達到公有子網路、私有子網路的效果。
Docker Separate Networking

補充:Docker Compose的執行順序

使用 Depends 可以確保一個服務會在另一個服務啟動後才跟著啟動,避免了未初始化完成造成的錯誤。
Load Process

補充:Docker Compose的儲存

你可以建立一個Volume並把它掛載到一個Container上面,讓Container達到持久化儲存。
alt text

Docker Compose Restart Policy 重啟策略

🧠 補充建議

  • 開發環境:通常用 no 或 on-failure,避免無限重啟造成混亂。
  • 生產環境:建議使用 always 或 unless-stopped,確保服務穩定運行。
  • 若搭配 健康檢查(healthcheck) 使用,可以更精準控制重啟時機。

Restart your container

常見Docker 指令

Command Description
1 docker info Display System Information
2 docker version Display the system version
3 docker login Log in to a Docker registry
4 docker pull [image name] Pull an image from a registry
5 docker run [image name] Run container
6 docker run -d [image name] Run container in detached mode
7 docker start [container name] Start stopped containers
8 docker ps List running container
9 docker ps -a List running&stopped container
10 docker stop [container name] stop container
11 docker kill [container name] Kill container
12 docker image inspect [imageName] get image info
13 docker run --memory="256m" [imageName] Run container with Max memory
14 docker run --cpus=".5" [imageName] Run container with Max CPU
15 docker rm [container name] Delete the container
16 docker run --publish [outer port]:[inner port] --name [container name] [container image in the docker registry or nginx] Mostly used pattern
Docker cli - Attach shell
1 docker run -it [imageName] -- /bin/bash Attach shell
2 docker container exec -it [container name] -- bash Attach to a running container shell
Docker cli - Clean up&Build
1 docker rm $(docker ps -a -q) Remove all stopped container
2 docker images List images
3 docker rmi Delete image
4 docker system prune -a Removes all images not in use by any containers
5 docker build -t [name:tag] . Build and image using a Dockerfile localted in the same folder
6 docker build -t [name:tag] -f [filename] Build an image using a Dockerfile located in specified folder
Docker volume cheatsheet
1 docker create volume [volumeName] Create a new volume
2 docker volume ls List all volume
3 docker volume inspect [volumeName] Display the volume info
4 docker volume rm [volumeName] Remove volume
5 docker volume prune Remove all volumes not mounted
6 docker run -d --name devtest -v myvol:/app nginx:latest Run docker container with Volume
Docker compose cheat sheet
1 docker compose build Build the images
2 docker compose start Start the containers
3 docker compose stop Stop the containers
4 docker compose up -d Build and start
5 docker compose ps List what’s running
6 docker compose rm Remove from memory
7 docker compose down Stop and remove
8 docker compose logs Get the logs
9 docker compose exec [container] bash Run a command in a container
10 docker compose --project-name [projectName] up -d Run an instance as a project
11 docker compose -p [projectName] up -d Shortcut
12 docker compose ls List running projects
13 docker compose cp [containerID]:[src_path] [dest_path] Copy files from the container
14 docker compose exec [src_path] [containerID]:[dest_path] Copy files to the container

Docker Compose → K8s 對照表

功能面向 Docker Compose Kubernetes 對應物件
服務管理 service Service
容器定義 container Pod
組態管理 env file ConfigMap / Secret
資料持久化 volume PersistentVolume / PVC

Finally

本文意在快速帶過Docker的概念,想要完整學習Docker的人建議還是看過相關教學之後再繼續學習,本文只專注提到那些對Kubernetes來說重要的Docker特性,下一篇我們正式進入Kubernetes。我們下次見。

學習資源

  1. (https://www.youtube.com/watch?v=kTp5xUtcalw)

K8s快速實戰(一)
https://clark1945.github.io/2025/11/06/My-first-day-started-learning-Kubernetes/
Author
Clark Liu
Posted on
November 6, 2025
Licensed under