作者: Hao
最後編輯日期: 2024-10-23
Docker 介紹
部署方式
傳統部署
- 應用程序直接運行在操作系統上,操作系統運行在硬件上。
- 每個應用程序都需要獨立的操作系統支持,這樣會導致資源浪費和操作系統間的相互干擾。
虛擬化部署
- 在硬件上安裝操作系統,然後使用 Hypervisor(虛擬機監控器)來管理虛擬機。
- 每個虛擬機運行自己的操作系統和應用程序。
- 虛擬機共享硬件資源,但每個虛擬機之間是相互隔離的,提供更好的資源利用和隔離性。
容器部署
- 在硬件上安裝操作系統,然後使用容器運行時來管理容器。
- 每個容器運行自己的應用程序和可執行文件/庫,但共享宿主操作系統的內核。
- 容器之間是相互隔離的,但相比虛擬機更輕量級,啟動速度更快,資源利用率更高。
Docker 架構
- 容器類似於輕量級的虛擬機。
- 容器共享操作系統內核。
- 容器擁有自己的文件系統、CPU、內存、進程空間等。
- 容器之間相互隔離。
Docker 基本操作
鏡像操作
- 搜索鏡像:
docker search
- 下載鏡像:
docker pull
- 列出本地鏡像:
docker images
- 刪除鏡像:
docker rmi
容器操作
運行:docker run
🔴 注意事項:若執行docker run -d -p 88:80 --name mynginx nginx
可能會無法訪問,因為 server 防火牆可能會阻擋非 80 端口,需要去設定。
- 語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 說明:運行一個新的容器,從指定的鏡像創建並啟動。
- 常用選項:
-d
:在後台運行容器並返回容器 ID。-p
:將主機端口映射到容器端口,例如-p 8080:80
將主機的 8080 端口映射到容器的 80 端口。--name
:指定容器的名稱。-v
:將主機目錄或文件掛載到容器,例如-v /host/path:/container/path
。
- 範例:
docker run -d -p 80:80 --name mynginx nginx
查看:docker ps
- 語法:
docker ps [OPTIONS]
- 說明:列出當前正在運行的容器。
- 常用選項:
-a
:顯示所有容器,包括未運行的容器。-q
:只顯示容器 ID。--filter
:根據條件過濾容器,例如--filter "status=exited"
只顯示已退出的容器。
- 範例:
docker ps -a
停止:docker stop
- 語法:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- 說明:停止一個或多個正在運行的容器。
- 常用選項:
-t
:等待容器停止前的超時秒數(默認 10 秒)。
- 範例:
docker stop mynginx
分享至 Docker Hub
保存狀態:docker commit
docker commit
指令用於將容器的當前狀態保存為新的鏡像。
- 語法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- 範例:
docker commit -m "Updated configuration" -a "Your Name" mynginx mynginx:v1.0
保存 tar 文件:docker save
- 語法:
docker save [OPTIONS] IMAGE [IMAGE...]
- 範例:
docker save -o mynginx.tar mynginx:v1.0
從 tar 文件加載鏡像:docker load
- 語法:
docker load [OPTIONS]
- 範例:
docker load -i mynginx.tar
清理資源
docker rm [CONTAINER]
:刪除已停止的容器。docker system prune
:清除所有停止的容器、無用的映像檔及其他資源。docker volume prune
:刪除未使用的 volume。
Docker 網路操作
docker network ls
:列出所有 Docker 網路。docker network create [NETWORK_NAME]
:創建自訂網路。docker network connect [NETWORK] [CONTAINER]
:將容器連接到指定網路。
Volume 操作
docker volume create [VOLUME_NAME]
:創建 volume。docker volume ls
:列出所有 volume。docker volume rm [VOLUME_NAME]
:刪除 volume。
Docker Compose
Docker Compose 是一個工具,用於定義和運行多個 Docker 容器的應用。透過撰寫 docker-compose.yml 文件,您可以輕鬆管理應用的服務、網絡和卷。
docker-compose.yml 文件
這是 Docker Compose 的核心文件,用於定義應用的各個服務。在此範例中,我們有三個服務:redis、mysql 和一個應用(app)。
-
常用命令
- 上線:
docker compose up -d
,啟動並在後台運行定義在 docker-compose.yml 文件中的所有服務。 - 下線:
docker compose down
,停止並移除定義在 docker-compose.yml 文件中的所有服務。 - 啟動特定服務:
docker compose start x1 x2 x3
,啟動一個或多個已定義的服務。 - 停止特定服務:
docker compose stop x1 x3
,停止一個或多個已運行的服務。 - 擴容:
docker compose scale x2=3
,調整服務的運行實例數量。
- 上線:
-
使用範例 以下是 docker-compose.yml 文件的一個範例,它定義了三個服務:redis、mysql 和一個簡單的應用(web)。
version: "3.8"
services:
redis:
image: "redis:latest"
ports:
- "6379:6379"
mysql:
image: "mysql:latest"
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- "3306:3306"
web:
image: "nginx:latest"
ports:
- "80:80"
depends_on:
- redis
- mysql
- 操作範例
- 啟動所有服務:docker compose up -d
- 檢查運行狀況:docker compose ps
- 停止所有服務:docker compose down
- 啟動特定服務:docker compose start web
- 停止特定服務:docker compose stop web
- 擴展服務:docker compose up --scale web=3 -d
- 假設 web 服務需要擴展到 3 個實例