這篇文章主要介紹Docker中的Service
參考:https://docs.docker.com/get-started/part3/#about-services
在分布式應(yīng)用中,一個應(yīng)用提供的不同的功能模塊稱為Service
例如:一個視頻分享網(wǎng)站士嚎,可能會包含若干個服務(wù)赛糟,一個是用于存儲應(yīng)用數(shù)據(jù)的數(shù)據(jù)庫服務(wù)授帕,一個是用于對上傳的錄像片段進行轉(zhuǎn)碼的服務(wù)和一個用于前端的服務(wù)等。
一個Service中只運行著一個鏡像响驴,但是它定義了鏡像運行方式擅笔,如鏡像運行時應(yīng)該使用哪一個端口舆乔,需要運行多少個鏡像才能滿足這個service需要處理的請求容量磨德。擴大一個service的規(guī)模意味著增加運行著那個鏡像的容器和更多的計算機資源缘回。
在Docker中可以使用docker-compose.yml文件來定義一個service的運行和規(guī)模。
docker-compose.yml 文件
version: "3"
services:
web:
# image 替換成在Docker-Container中定義的鏡像路徑
image: peter/get-started:part2
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4010:85"
networks:
- webnet
networks:
webnet:
docker-compose.yml 文件相關(guān)參數(shù)的解釋
- service使用的是peter/get-started:part2(friendlyhello)這個鏡像
-運行5個鏡像實例典挑,名稱都叫做web酥宴,每個鏡像最多使用10%的cpu資源和50M的內(nèi)存。 - 如果一個鏡像實例出錯馬上重啟全部的實例
-宿主主機使用4010端口映射鏡像使用的85號端口
-webnet是一個負載均衡服務(wù)器您觉,用來轉(zhuǎn)發(fā)流量
-webnet使用的是默認的配置(稱為load-balanced overlay network)幅虑。
-version: "3" 的目的是使這個文件可以和swarm 模式和docker stack deploy 兼容。
開始實驗:
a: 運行 docker swarm init --advertise-addr 192.168.99.100
(有多張網(wǎng)卡的情況下需要指定一張網(wǎng)卡的ip)
Swarm initialized: current node (hiwgrh0o62o478mg956xg3emb) is now a manager.
b: 運行 docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web
c:查看服務(wù):
MacBook-Pro:Service root# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
qvd1gv0as4a9 getstartedlab_web replicated 0/5 peter/get-started:part2 *:4010->85/tcp
MacBook-Pro:Service root# docker service ps qvd1gv0as4a9
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
14sm4xrqau4o getstartedlab_web.1 peter/get-started:part2 default Running Running 5 minutes ago
8hwmin9n42ur getstartedlab_web.2 peter/get-started:part2 default Running Running 5 minutes ago
zge7k7tf9ysi getstartedlab_web.3 peter/get-started:part2 default Running Running 5 minutes ago
xf29evcz9ls9 getstartedlab_web.4 peter/get-started:part2 default Running Running 5 minutes ago
3ac4smbofa2l getstartedlab_web.5 peter/get-started:part2 default Running Running 5 minutes ago
通過curl http://192.168.99.100:4010 命令刷新頁面可以看到實例的id在不斷的變化顾犹。(負載均衡的作用)。
curl http://192.168.99.100:4010
<h3>Hello World!</h3><b>Hostname:</b> e09afafac661<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>yangzhiqiongs-MacBook-Pro:Service root# curl http://192.168.99.100:4010
<h3>Hello World!</h3><b>Hostname:</b> bfc863fbda38<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>yangzhiqiongs-MacBook-Pro:Service root# curl http://192.168.99.100:4010
<h3>Hello World!</h3><b>Hostname:</b> 0f46c60f34f6<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>yangzhiqiongs-MacBook-Pro:Service root# curl http://192.168.99.100:4010
<h3>Hello World!</h3><b>Hostname:</b> c9430749a933<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>yangzhiqiongs-MacBook-Pro:Service root# curl http://192.168.99.100:4010
<h3>Hello World!</h3><b>Hostname:</b> 9dbccd314306<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>yangzhiqiongs-MacBook-Pro:Service root# curl http://192.168.99.100:4010
<h3>Hello World!</h3><b>Hostname:</b> e09afafac661<br/><b>Visits:</b> <i>cannot connect to R
修改 replicas的值為10.
重新部署應(yīng)用
docker stack deploy -c docker-compose.yml getstartedlab
通過命令:docker service ls
,可以查看到現(xiàn)在容器的數(shù)量已經(jīng)變成10個褒墨。
ID NAME MODE REPLICAS IMAGE PORTS
qvd1gv0as4a9 getstartedlab_web replicated 9/10 peter/get-started:part2 *:4010->85/tcp
刪除swarm中運行的實例:
docker stack rm getstartedlab
docker stack rm getstartedlab
Removing service getstartedlab_web
Removing network getstartedlab_webnet
離開swarm:
docker swarm leave --force
其它:
查看容器id的命令炫刷。
docker container ls -q