Docker Machine 簡化了在不同環境中佈署 Docker 的流程,讓開發者得以快速建立 Docker 主機。本文將引導讀者使用 Docker Machine 在 AWS EC2 上佈署 Docker 例項,並說明如何設定必要的 AWS 引數,例如 Access Key、Secret Key 和 VPC ID。同時,文章也涵蓋了 Docker Swarm 的使用方法,讓讀者瞭解如何利用 Docker Machine 建立本地 Docker Swarm 叢集,並透過 Discovery Token 註冊節點,實作容器的協調與管理。此外,文章也會介紹如何使用 Docker Compose 簡化多容器應用程式的佈署,以 WordPress 佈署為例,示範如何撰寫 docker-compose.yml 檔案,定義服務、網路和資料卷,並使用 Volume Plugins 管理資料持久化,確保資料在容器重建後不會遺失。
使用Docker Machine佈署AWS EC2例項
Docker Machine是一個強大的工具,允許使用者在本地或雲端提供者中啟動Docker例項,而無需深入組態伺服器例項或本地Docker客戶端。在本章中,我們將探討如何使用Docker Machine在AWS上佈署EC2例項。
AWS驅動程式的預設值
在使用AWS驅動程式時,Docker Machine具有一些合理的預設值。這些預設值包括:
amazonec2-region= us-east-1(北維吉尼亞)amazonec2-ami= ami-26d5af4c(Ubuntu 15.10)amazonec2-instance-type= t2.microamazonec2-root-size= 16GBamazonec2-security-group= docker-machine
內容解密:
這些預設值意味著Docker Machine將在us-east-1區域啟動一個t2.micro型別的EC2例項,使用Ubuntu 15.10作為作業系統,根卷大小為16GB,並使用名為docker-machine的安全組。
啟動AWS EC2例項
在啟動例項之前,我們需要知道AWS存取金鑰和秘密金鑰,以及VPC ID。首先,登入AWS控制檯並導航到IAM | 使用者,選擇您的使用者,然後轉到安全憑證標籤。在那裡,您可以建立新的存取金鑰。
接下來,確保您位於正確的區域(北維吉尼亞),然後導航到VPC | 您的VPC,並選擇預設VPC。記下VPC ID。
現在,您可以使用以下命令啟動EC2例項:
docker-machine create \
--driver amazonec2 \
--amazonec2-access-key JHFDIGJKBDS8639FJHDS \
--amazonec2-secret-key sfvjbkdsvBKHDJBDFjbfsdvlkb+JLN873JKFLSJH \
--amazonec2-vpc-id vpc-35c91750 \
awstest
內容解密:
此命令使用AWS驅動程式建立一個名為awstest的Docker Machine例項,使用指定的存取金鑰、秘密金鑰和VPC ID。
切換到AWS例項並啟動容器
一旦例項啟動,您可以切換本地Docker客戶端以使用AWS例項,並啟動Hello World容器:
eval "$(docker-machine env awstest)"
docker run hello-world
內容解密:
這些命令將本地Docker客戶端組態為使用awstest例項,並啟動Hello World容器。
終止AWS EC2例項
完成測試後,請記得終止EC2例項,以避免產生不必要的費用:
docker-machine rm awstest
內容解密:
此命令刪除awstest例項並終止相應的EC2例項。
Docker Swarm:建立本地叢集
Docker Swarm是一個工具,允許使用者建立和管理Docker容器叢集。在本文中,我們將探討如何使用Docker Machine建立本地叢集。
步驟1:建立發現令牌
首先,使用Docker Machine建立一個VM來生成發現令牌:
docker-machine create -d virtualbox discover
eval "$(docker-machine env discover)"
docker run swarm create
內容解密:
這些命令建立一個名為discover的VM,組態本地Docker客戶端以使用它,並執行Swarm建立命令以生成發現令牌。
使用Plantuml圖表呈現流程
圖表翻譯: 此圖表呈現了使用Docker Machine建立本地叢集的流程。首先,建立一個名為discover的VM,然後組態本地Docker客戶端以使用它。接下來,執行Swarm建立命令以生成發現令牌。
總之,Docker Machine和Docker Swarm是兩個強大的工具,允許使用者輕鬆佈署和管理Docker容器。無論是在本地還是在雲端提供者中,這些工具都可以簡化容器的佈署和管理。
使用 Docker Machine 建立和管理 Docker Swarm 叢集
Docker Machine 是 Docker 官方提供的工具,用於在本地或雲端環境中建立和管理 Docker 主機。本章節將介紹如何使用 Docker Machine 建立和管理 Docker Swarm 叢集。
建立本地 Docker Swarm 叢集
首先,我們需要建立一個 Docker Swarm 叢集。Docker Swarm 是一個容器協調工具,用於管理和協調多個 Docker 主機上的容器。
步驟 1:建立 Discovery Token
要建立 Docker Swarm 叢集,首先需要產生一個 discovery token。這個 token 將用於註冊叢集中的節點。
docker run swarm create
執行上述命令後,會輸出一個 token,例如:40c3bf4866eed5ad14ade6633fc4cefc。請記下這個 token,因為後續步驟需要使用它。
步驟 2:建立 Swarm Manager 和節點
接下來,我們需要建立一個 Swarm manager 和多個節點。使用以下命令建立 Swarm manager:
docker-machine create \
-d virtualbox \
--swarm \
--swarm-master \
--swarm-discovery token://40c3bf4866eed5ad14ade6633fc4cefc \
swarm-master
步驟 3:建立節點
使用以下命令建立兩個節點:
docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://40c3bf4866eed5ad14ade6633fc4cefc \
swarm-node-01
docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://40c3bf4866eed5ad14ade6633fc4cefc \
swarm-node-02
#### 內容解密:
docker-machine create命令用於建立新的 Docker 主機。-d virtualbox指定了使用 VirtualBox 驅動程式來建立虛擬機器。--swarm和--swarm-discovery用於將新建立的主機註冊到 Docker Swarm 叢集中。--swarm-master指定了該主機作為 Swarm manager。
切換到 Swarm 叢集
要使用 Docker 使用者端與 Swarm 叢集互動,需要執行以下命令:
eval $(docker-machine env --swarm swarm-master)
#### 內容解密:
eval $(docker-machine env --swarm swarm-master)命令用於設定 Docker 使用者端的環境變數,以便與 Swarm 叢集互動。
測試 Docker Swarm 叢集
要測試叢集是否正常運作,可以執行以下命令來啟動一個 Hello World 容器:
docker run hello-world
docker ps -a
#### 內容解密:
docker run hello-world命令用於啟動一個 Hello World 容器。docker ps -a命令用於列出所有容器,包括停止的容器。
建立遠端 Docker Swarm 叢集
除了本地叢集外,我們還可以在雲端服務提供商(如 DigitalOcean)上建立 Docker Swarm 叢集。
圖表翻譯: 此圖表展示了建立 Docker Swarm 叢集的流程,包括建立 discovery token、Swarm manager 和節點,以及設定 Docker 使用者端和測試叢集。
步驟 1:建立 Discovery Token
與本地叢集相同,首先需要產生一個 discovery token。
步驟 2:建立 Swarm Manager 和節點
使用以下命令在 DigitalOcean 上建立 Swarm manager 和節點:
docker-machine create \
--driver digitalocean \
--digitalocean-access-token YOUR_ACCESS_TOKEN \
--digitalocean-region lon1 \
--swarm \
--swarm-master \
--swarm-discovery token://YOUR_DISCOVERY_TOKEN \
swarm-master
docker-machine create \
--driver digitalocean \
--digitalocean-access-token YOUR_ACCESS_TOKEN \
--digitalocean-region lon1 \
--digitalocean-size 1gb \
--swarm \
--swarm-discovery token://YOUR_DISCOVERY_TOKEN \
swarm-node-01
docker-machine create \
--driver digitalocean \
--digitalocean-access-token YOUR_ACCESS_TOKEN \
--digitalocean-region lon1 \
--digitalocean-size 1gb \
--swarm \
--swarm-discovery token://YOUR_DISCOVERY_TOKEN \
swarm-node-02
#### 內容解密:
--driver digitalocean指定了使用 DigitalOcean 的驅動程式。--digitalocean-access-token需要替換為您的 DigitalOcean 存取權杖。--digitalocean-region和--digitalocean-size分別指定了主機的地區和大小。
Docker Compose:簡化多容器應用程式佈署的利器
Docker Compose 是 Docker 官方提供的一款強大工具,用於定義和執行多容器的 Docker 應用程式。它的前身是 Fig,一個由 Orchard Labs 開發的第三方服務。Fig 的目標是提供快速、隔離的開發環境,而 Docker Compose 繼承了這一理念,並進一步擴充套件,使其成為定義和執行多容器 Docker 應用的標準工具。
為什麼需要 Docker Compose?
單獨啟動容器很簡單,只需執行 docker run -i -t ubuntu /bin/bash 這樣的命令即可。然而,隨著應用程式變得越來越複雜,僅僅啟動單個容器已經不能滿足需求。Docker 的設計理念是每個容器執行一個應用程式,因此對於複雜的應用程式,需要啟動多個容器並正確地組態它們之間的關聯。這就導致了命令變得越來越長、越來越複雜。
Docker Compose 解決了這個問題,它允許使用者透過一個 YAML 檔案定義多個容器及其之間的關聯。透過這個檔案,使用者可以透過一個簡單的命令啟動整個應用程式,而無需擔心容器的啟動順序和組態。
YAML 檔案與 Docker Compose
YAML(YAML Ain’t Markup Language)是一種人類友好的資料序列化標準,適用於所有程式語言。Docker Compose 使用 YAML 檔案來定義多容器的 Docker 應用程式。這使得使用者可以將應用的組態與程式碼一起儲存,方便分享和佈署。
Docker Compose 檔案範例
接下來,我們將透過一個 WordPress 的範例來展示如何使用 Docker Compose。WordPress 是一個廣泛使用的網頁軟體,用於建立網站、部落格或應用程式。我們將使用 Docker Hub 上的官方 WordPress 映像。
首先,建立一個名為 wordpress 的資料夾,並在其中建立一個名為 docker-compose.yml 的檔案,內容如下:
wordpress:
container_name: my-wordpress-app
image: wordpress
ports:
- "80:80"
links:
- "mysql:mysql"
mysql:
container_name: my-wordpress-database
image: mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
內容解密:
wordpress和mysql是兩個服務的名稱,分別對應 WordPress 和 MySQL 容器。container_name指定了容器的名稱。image指定了要使用的 Docker 映像。ports將主機的 80 連線埠對映到容器的 80 連線埠,使得外部可以存取 WordPress。links定義了容器之間的連線,使得 WordPress 可以連線到 MySQL。environment設定了 MySQL 容器的環境變數,包括 root 使用者的密碼。
啟動應用程式
要啟動應用程式,首先確保你的 Docker 使用者端組態為使用 Swarm 群集。執行 docker-machine ls 確認 Swarm 群集是否活躍,然後執行以下命令:
eval $(docker-machine env --swarm swarm-master)
docker-compose up -d
內容解密:
eval $(docker-machine env --swarm swarm-master)組態 Docker 使用者端使用 Swarm 群集。docker-compose up -d以分離模式啟動容器,使其在背景執行。
執行上述命令後,你可以透過 docker ps 檢視容器的狀態和 IP 地址,並存取 WordPress 安裝頁面。
Docker Compose 與 Volume Plugins 實戰
Docker Compose 是 Docker 官方提供的一個工具,用於定義和執行多容器的 Docker 應用程式。在本章中,我們將介紹 Docker Compose 的基本使用方法,以及如何使用 Volume Plugins 來管理資料持久化。
Docker Compose 基本概念
Docker Compose 使用一個 YAML 檔案來定義多個容器的組態,包括容器名稱、映像檔、埠號對映、環境變數等。以下是一個基本的 docker-compose.yml 檔案範例:
version: '2'
services:
wordpress:
container_name: my-wordpress-app
image: wordpress
ports:
- "80:80"
links:
- mysql:mysql
environment:
WORDPRESS_DB_HOST: "mysql:3306"
WORDPRESS_DB_PASSWORD: "password"
mysql:
container_name: my-wordpress-database
image: mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
內容解密:
version: 指定 Docker Compose 的版本。services: 定義服務列表,每個服務對應一個容器。container_name: 指定容器的名稱。image: 指定容器使用的映像檔。ports: 定義埠號對映,將主機的 80 埠對映到容器的 80 埠。links: 定義容器之間的連線,將 mysql 容器連線到 wordpress 容器。environment: 定義容器的環境變數。
使用 Docker Compose 啟動多個 WordPress 安裝
Docker Compose 的一大優勢是可以在不同的環境中啟動隔離的應用程式。以下是一個範例,展示如何使用不同的 docker-compose.yml 檔案啟動另一個 WordPress 安裝:
wordpress:
container_name: my-other-wordpress-app
image: wordpress
ports:
- "80:80"
links:
- "mysql:mysql"
mysql:
container_name: my-other-wordpress-database
image: mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
內容解密:
- 這裡定義了另一個 WordPress 安裝,使用不同的容器名稱。
- 需要注意的是,如果在同一個主機上啟動多個 WordPress 安裝,需要修改埠號對映以避免衝突。
Volume Plugins 簡介
Volume Plugins 是 Docker 提供的一種擴充套件機制,用於管理資料持久化。在本章中,我們將介紹幾種常用的 Volume Plugins,包括 Docker Volumes、Convoy、REX-Ray 和 Flocker。
Docker Volumes
Docker Volumes 是 Docker 官方提供的資料持久化解決方案。以下是使用 Docker Volumes 的基本步驟:
docker volume create --name my-volume
docker run -d -v my-volume:/var/www/html wordpress
內容解密:
docker volume create: 建立一個新的 Docker Volume。-v: 將 Docker Volume 掛載到容器的指定目錄。
使用 Docker Machine 和 Docker Compose 建立 WordPress 站點
以下是使用 Docker Machine 和 Docker Compose 建立 WordPress 站點的步驟:
建立一個新的 Docker Machine:
docker-machine create chapter03 --driver=virtualbox eval $(docker-machine env chapter03)建立一個
docker-compose.yml檔案,定義 WordPress 和 MySQL 服務。使用 Docker Compose 啟動 WordPress 和 MySQL 服務:
docker-compose up -d安裝 WordPress:
open http://$(docker-machine ip chapter03)/
圖表翻譯:
以下 Plantuml 圖表展示了 Docker Machine、Docker Compose 和 Volume Plugins 之間的關係。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Docker Machine佈署與叢集管理實戰
package "Docker 架構" {
actor "開發者" as dev
package "Docker Engine" {
component [Docker Daemon] as daemon
component [Docker CLI] as cli
component [REST API] as api
}
package "容器運行時" {
component [containerd] as containerd
component [runc] as runc
}
package "儲存" {
database [Images] as images
database [Volumes] as volumes
database [Networks] as networks
}
cloud "Registry" as registry
}
dev --> cli : 命令操作
cli --> api : API 呼叫
api --> daemon : 處理請求
daemon --> containerd : 容器管理
containerd --> runc : 執行容器
daemon --> images : 映像檔管理
daemon --> registry : 拉取/推送
daemon --> volumes : 資料持久化
daemon --> networks : 網路配置
@enduml
圖表翻譯: 此圖示展示了使用 Docker Machine 建立 Docker Host,並使用 Docker Compose 定義服務,最後使用 Docker Volumes 進行資料持久化的流程。