# 建立Image
docker build -t image -f docker/Dockerfile.dev .
# 運行
docker run -it --rm --name containerName -p 8080:8080 -v .:/app image
2025/05/27
用 Docker 建立 Vue.js 開發環境:簡單一步啟動 npm run serve
2024/11/14
Docker Desktop - WSL distro terminated abruptly
netsh winsock reset
參考資料:
2023/10/03
2023/09/16
搭建 Kubernetes Cluster Master Nodes & Worker Nodes
Kubernetes是一個開源的容器管理平台,它被廣泛用於應用程式的部署、自動化運維和擴展。它由Google於2014年釋出,並且現在是由Cloud Native Computing Foundation(CNCF)支持和維護的一個項目。Kubernetes通常簡稱為K8s。
Kubernetes的重要性:
容器化應用程式: Kubernetes最初是為了解決容器化應用程式的部署和管理而設計的。它支持多種容器技術,最常見的是Docker。容器提供了獨立的運行環境,可以確保應用程式在不同環境中一致運行。
自動化和自我修復: Kubernetes提供了豐富的自動化功能,可以自動部署、擴展、升級和維護應用程式。它能夠檢測並恢復應用程式或節點的故障,從而實現高可用性。
擴展性: Kubernetes的架構非常靈活,可以在物理機器、虛擬機器和各種雲平台上運行。它可以輕鬆地擴展以應對不斷增長的工作負載。
服務發現和負載均衡: Kubernetes提供了服務發現和負載均衡的功能,使應用程式能夠輕鬆地找到和通信彼此。這對於微服務架構非常重要。
配置管理: Kubernetes可以幫助管理應用程式的配置,並支持不同環境之間的配置差異。這有助於確保應用程式在不同環境中的一致性。
Kubernetes的基本概念:
Pods(容器集): Pod是Kubernetes的最小部署單位,可以包含一個或多個容器。這些容器共享相同的網絡和存儲資源。
ReplicaSets和Deployments(複本集和部署): ReplicaSets和Deployments用於定義和管理應用程式的副本數量,以實現高可用性和擴展。
Services(服務): 服務定義了一個固定的入口點,使應用程式能夠通過名稱來訪問其他應用程式。
ConfigMaps和Secrets(配置映射和機密): ConfigMaps用於管理配置數據,而Secrets用於安全地管理敏感信息,如密碼和API金鑰。
Volumes(存儲卷): 存儲卷用於提供持久性存儲,以便容器之間共享數據。
Namespace(命名空間): 命名空間用於將集群劃分為多個虛擬區域,以隔離和組織不同應用程式或團隊的資源。
Configurations(配置): 配置文件用於定義和管理Kubernetes資源的配置,如Pods、Services和Ingress。
Ingress(入口): Ingress控制器用於管理集群外部流量的路由,允許多個應用程式共享同一個IP地址。
StatefulSets(有狀態集): 用於管理有狀態應用程式,如數據庫,以確保持久性和有序的操作。
FastAPI 透過Celery 處理Async task並透過Docker運行
Celery 是一個強大的分散式任務佇列框架,用於處理非同步任務和分散式任務排程。它在許多應用程式和系統中都有廣泛的用途,包括以下方面:
非同步任務處理:Celery 最常見的用途之一是執行非同步任務。這些任務可以是長時間運行的操作,例如圖像處理、文件上傳、電子郵件發送、資料處理等。透過將這些任務非同步執行,應用程式可以保持響應性,而不會阻塞使用者介面或主要應用程式流程。
定時任務:Celery 可用於建立和執行定時任務,例如每小時執行一次數據備份或每天發送電子郵件報告。透過 Celery 的定時任務功能,您可以輕鬆管理和排程這些重複性任務。
分散式任務:Celery 是一個分散式任務佇列,可用於在多台伺服器或容器之間分發任務。這對於處理大量任務或需要負載平衡的任務非常有用。
訊息處理:Celery 可以用作訊息處理系統,用於處理和分發訊息。這在實時應用程式中非常有用,例如即時聊天或通知系統。
背景處理:在 Web 應用程式中,Celery 可以處理背景任務,例如處理使用者提交的表單資料、生成報告、執行搜尋索引更新等。這有助於提高應用程式的效能和可擴展性。
任務重試和錯誤處理:Celery 具有內建的任務重試和錯誤處理機制,可以自動重試失敗的任務,或將失敗的任務記錄下來以供後續分析和修復。
分散式資料處理:對於需要分散式資料處理的應用程式,Celery 可以幫助將資料處理任務分發到多個節點,以加速資料處理和分析。
非同步通訊:Celery 不僅可以執行任務,還可以用作非同步通訊的機制。應用程式可以使用 Celery 發送訊息、通知其他服務或元件執行操作。
總之,Celery 是一個多功能的工具,適用於需要非同步、分散式、定時或重複性任務處理的各種應用程式。它具有廣泛的用途,可以與多種訊息代理(如 RabbitMQ、Redis 等)和框架集成,以滿足不同應用場景的需求。無論是 Web 開發、資料處理、實時應用程式還是背景任務處理,Celery 都提供了強大的功能和工具,使開發人員能夠更輕鬆地處理各種任務和非同步操作。
2023/09/15
使用 Docker運行Vue project
專案結構如下:
常理來說要透過Nginx部屬,通常配置如下:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
index index.html;
server_name _;
access_log /var/log/default_access_log;
error_log /var/log/default_error_log;
location / {
try_files $uri $uri/ /index.html?$args;
}
# Cache file
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
root /usr/share/nginx/html;
expires 12h;
add_header Pragma public;
add_header Cache-Control "public, max-age=31536000";
}
}
2019/04/24
Docker Error response from daemon
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
突然想到預設我將Docker的服務停止,所以重啟服務即可
restart daemon or Docker Service
2015/09/04
2015/08/19
Docker 基本操作
#啟動Docker
boot2docker up
#關閉Docker
boot2docker down
#出現下方訊息,無法啟動Dokcer 解決方式
#Post http:///var/run/docker.sock/v1.20/containers/create: dial unix /var/run/docker.sock: no such file or directory.
#* Are you trying to connect to a TLS-enabled daemon without TLS?
#* Is your docker daemon up and running?
`eval "$(boot2docker shellinit)"`
#登入倉庫,需先至Docker hub註冊帳號 \
#Windows輸入帳號資訊時需使用Ctrl + Enter
docker login
Username:username
password:password
E-mail:email
#取得映像檔
docker pull name:version
#ex: docker pull centos:centos
#建立新映像檔
docker commit -m "說明" -a "建立者名稱" 容器ID DockerHub帳號/倉庫名稱:tag(可以省略)
#ex: docker commit -m "Installed Apache latest version" -A"C.Y.Fang" 4572d897e0ea c.y.fang/test:v1
#ex: docker commit -m "Installed Apache latest version" -A"C.Y.Fang" 4572d897e0ea c.y.fang/test
#上傳映像檔
docker push DockerHub帳號/倉庫名稱
#ex docker push chengyoufang/test
#列出目前有的映像檔
docker ps -l
#列出目前有的容器,預設為顯示當前執行狀態的
docker ps -a
#只顯示特定的容器
docker ps -before={id|name}
#移除容器
docker rm id
#強制移除使用中容器
docker rm -f id
#開啟容器port
docker run -d -p IP:外部port:內部port 映像檔名稱