標籤:

使用Docker進行分散式部署(概念篇)

使用Docker進行分散式部署(概念篇)

到現在(2017年)docker的部署 方式有了很大的改變, 常見的教材已經嚴重過時,推薦多看看官方文檔, 這篇文章,是對官方文檔的呢歐蓉 的一個總結.

主要變化

在docker 17++ 版本, docker三劍客中 docker-compose 變成了 docker 的 stack,service 命令, docker-swarm 變成了 docker的 swarm, service命令 , 他們和docker合二為一,集群的部署大大簡化.

除此之外 docker 單獨有了管理容器的container 命令 管理網路的networks命令 和 管理 數據卷的 volumes 命令

docker集群的基本概念

  • Image: docker的基本概念, 用於描述一個容器
  • Container: 一個容器
  • Node: 一個分散式系統中的節點,一般為一台電腦或者一個虛擬機. 有manger 和 slave操作, docker 的swarm,node,stack,service命令只能運行 在 manger node 上
  • Services: 一項服務, 由多個容器在 swarm 的調度下 進行處理, 一項服務包含多個相同image 構成的container
  • Stack: 一系列service構成一個stack
  • docker-machine: 每個machine是一個虛擬機

根據以上概念,我們可推出docker容器集群的開發流程, 先編寫dockerfile文件, 定義好一個一個的鏡像, 然後使用docker-compose 文件編排這些鏡像成services,在一個manger的node上 用stack部署這些services. docker-swarm會自動對服務的容器 編排.

簡單的例子

比如我有一個app 使用了 nsq 消息隊列, 編寫以下文件

docker-compose.yml

networks:n webnet:nn app:n image: golangn command: ping pgmastern networks:n - webnetnn nsqlookupdAnchor:n image: nsqio/nsqn ports:n - 4160:4160n - 4161:4161n command: /nsqlookupdn networks:n webnet:n aliases:n - loopkupnn nsqd:n image: nsqio/nsqn ports:n - 4150:4150n - 4151:4151n depends_on:n - nsqlookupdAnchorn command: /nsqd --broadcast-address=loopkup --lookupd-tcp-address=loopkup:4160n networks:n - webnetnn nsqadmin:n image: nsqio/nsqn command: /nsqadmin --lookupd-http-address=loopkup:4161n depends_on:n - nsqlookupdAnchorn ports:n - 4171:4171n networks:n - webnetn

值得注意的是,compose-file 在使用docker-swarm的時候, 和普通的compose-file不一樣. 比如link命令就被 廢除了.詳情參考官方文檔

這個文件定義了一張網卡,所有的services通過這張網卡給的別名交流.

運行

docker stack deploy -c docker-compose.yml appn

一個名為app的stack就部署成功了,裡面有app和nsq的services.

運行

docker container lsn

查看當前node上的容器,

docker container logs [id]n

查看當前容器的log

docker service scale [service_id]=3n

進行擴容

docker stack rm appn

刪除app stack

這些命令多使用 --help 查看, 可以了解更多使用方法

參考資料

[1]. 官方文檔 : docs.docker.com/get-sta

推薦閱讀:

google的material-ui為什麼沒有柵格系統?
看某前端設計書上說,在 base.css 里先定義一些基礎樣式然後在 html 裡面加上相應的 class,這樣是否和語義化相矛盾?
如何看待從Django 2.0開始不再提供對Python2的支持?
樹莓派做web伺服器的話,性能怎麼樣?

TAG:Docker | Web开发 |