Docker入门六部曲——服务
?
原文鏈接:http://www.dubby.cn/detail.html?id=8735
準備
- 已經安裝好Docker 1.13或者以上的版本。
- 安裝好Docker Compose。如果你是用的是Docker for Mac和Docker for Windows,那么不用擔心,這是自帶的。如果是Linux,那么需要你去安裝了。如果是用的是Windows10的預覽版,因為沒有Hyper-V,所以你需要使用Docker Toolbox。
- 閱讀完《Docker入門六部曲——容器》。
- 閱讀完《Docker入門六部曲——基本引導》。
- 確保你的
friendlyhello鏡像已經被push到注冊中心了。我們會在這一篇文章中用到。 - 確保你的鏡像已經可以正常的部署。運行
docker run -p 80:80 username/repo:tag(我的是docker run -p 80:80 dubbyyoung/get-started:part1,你要換成你自己的),然后瀏覽http://localhost/。
介紹
這一篇文章,我們會伸縮我們的應用,并且開始負載均衡。為了達到這一目的,我們需要把目光提升一個層級:服務層。
- Stack(堆棧)
- Services(服務)——你正在看的
- Container(容器)
理解服務
在一個分布式應用中,這個應用的不同部分,被稱為一個一個服務。例如,你在做一個視頻分享網站,會包含這么幾個服務,把數據存儲到磁盤的服務,用戶上傳文件后的文件轉換服務,給前端調用的一個服務等等。
服務其實就是在一個應用中的容器。“一個服務只運行一個鏡像,但是,他會編排鏡像的運行方式——使用那個端口,需要多少個副本(replicas,就是多個實例)才能滿足需要,等等”。伸縮一個服務就是改變這一個服務的運行的容器的數量。
不用擔心,有了Docker,這些都可以很容易實現,我們只需要定義好docker-compose.yml就可以了。
你的第一個docker-compose.yml
docker-compose.yml文件是一個YAML文件,定義了Docker容器的行為。
docker-compose.yml
version: "3"
services:web:# 使用你自己的username/repo:tagimage: dubbyyoung/get-started:part1deploy:replicas: 5resources:limits:cpus: "0.1"memory: 50Mrestart_policy:condition: on-failureports:- "8000:80"networks:- webnet
networks:webnet:
上面的docker-compose.yml告訴Docker要這么做:
- 從注冊中心把鏡像拉取下來。
- 運行5個實例作為一個服務
web,并且限制每個實例的CPU使用率最多只能到10%,內存最多使用50M。 - 一旦一個容器失敗就重啟。
- 把宿主機的
80端口映射到web這個服務的80端口。 - 指示
web服務里的所有容器通過一個負載均衡的網絡webnet來共享80端口(在內部,這些容器自己會使用一個臨時的端口來映射到web服務的80端口)。 - 把
webnet網絡作為默認網絡設置。
想了解docker-compose.yml的一些其他知識嗎?
看
version: "3",這個本質上是讓它可以和Swarm mode兼容。只有在version>=3.x時,才可以用deploy,當然,沒有deploy,更加不會有他的子選項;同樣,只有在version>=3.x時,才可以用docker stack deploy這個命令。當然,你的配置文件名不是必須是
docker-compose.yml,這只是標準命名而已,你完全可以用有實際意義的命名來代替,比如docker-stack.yml。
運行你的負載均衡應用
在執行docker stack deploy之前,先需要執行:
docker swarm init
?
注意:這個命名的意義,在下一篇文章會介紹。如果你不執行這個,會報”this node is not a swarm manager.”的錯誤的。
現在可以運行了,給你的應用起個名字吧,我們不妨叫他getstartedlab:
docker stack deploy -c docker-compose.yml getstartedlab
?
如果這個命令執行失敗,不妨嘗試著把端口改成8000:80。
然后使用這個命令來看你的五個容器:
docker stack ps getstartedlab
?
現在你可以訪問localhost(如果你的是8000:80,那就訪問localhost:8000)。隨著你刷新頁面,你還可以看到容器ID在不斷變化,這也證明了是均在均衡。
注意:你訪問頁面大概需要30秒鐘,這不是Docker性能差,而是因為沒有Redis,這個在之后我們會解決的。
伸縮你的應用
你可以修改你的docker-compose.yml中的replicas數量,保存之后,在使用docker stack deploy命令:
docker stack deploy -c docker-compose.yml getstartedlab
?
Docker會自動更新,不需要你手動的下容器或者手動的kill。
現在使用docker stack ps,你可以看到伸縮之后的容器數量。
下掉你的應用
下掉應用的命令是docker stack rm:
docker stack rm getstartedlab
?
這個命令會把你的應用移除,不過在我們的單節點的swarm依然是運行中(可以使用docker node ls查看)。可以使用docker swarm leave --force來關閉swarm。
相信你也覺得使用Docker來伸縮你的應用還是很簡單的。看到這里,你的Docker使用已經很接近生產使用了。下一步,我們會學習如何把你的應用部署在集群的Docker機器上。
總結
以上是生活随笔為你收集整理的Docker入门六部曲——服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国乙烷行业投资分析
- 下一篇: 2022-2028年中国乙酸钴行业发展现