Hello World 的應用
通常,你需要建立一堆服務來形成複製和協調的應用程式。
典型的現代 Web 應用程式由資料庫,api,前端和反向代理組成。
堅持
資料庫需要永續性,因此我們需要一些在 swarm 中的所有節點之間共享的檔案系統。它可以是 NAS,NFS 伺服器,GFS2 或其他任何東西。設定它超出了範圍。目前,Docker 不包含並且不管理群集中的永續性。此示例假定在所有節點上安裝了/nfs/
共享位置。
網路
為了能夠相互通訊,群中的服務需要在同一網路上。
選擇 IP 範圍(此處為 10.0.9.0/24
)和網路名稱(hello-network
)並執行命令:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
資料庫
我們需要的第一項服務是資料庫。我們以 postgresql 為例。在 nfs/postgres
中為資料庫建立一個資料夾並執行:
docker service create --replicas 1 --name hello-db \
--network hello-network -e PGDATA=/var/lib/postgresql/data \
--mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
kiasaki/alpine-postgres:9.5
請注意,我們使用了 --network hello-network
和 --mount
選項。
API
建立 API 超出了這個例子的範圍,所以讓我們假裝你在 username/hello-api
下有一個 API 映象。
docker service create --replicas 1 --name hello-api \
--network hello-network \
-e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
username/hello-api
請注意,我們傳遞了資料庫服務的名稱。Docker swarm 有一個嵌入式迴圈 DNS 伺服器,因此 API 可以使用其 DNS 名稱連線到資料庫。
反向代理
讓我們建立 nginx 服務,為外部世界提供 API。在共享位置建立 nginx 配置檔案並執行:
docker service create --replicas 1 --name hello-load-balancer \
--network hello-network \
--mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
-p 80:80 \
nginx:1.10-alpine
請注意,我們已使用 -p
選項釋出埠。該埠可供群集中的任何節點使用。