日本高清免费一本视频100禁_在线不卡欧美精品一区二区三区_国产一区二区好的精华液_中文综合在线_国产啊啊啊视频在线观看_大地资源网免费观看高清

中國(guó)專(zhuān)業(yè)IT外包服務(wù)

用心服務(wù)每一天
IT之道-艾銻知道

您當(dāng)前位置: 主頁(yè) > IT服務(wù) > 服務(wù)器服務(wù) >

服務(wù)器維護(hù)docker容器如何優(yōu)雅的終止詳解


2020-05-27 17:34 作者:艾銻無(wú)限 瀏覽量:

如何做好服務(wù)器維護(hù)?北京艾銻無(wú)限科技與你談?wù)処T人員必須知道的服務(wù)器維護(hù)信息

服務(wù)器維護(hù)過(guò)程中,我們?nèi)粘5捻?xiàng)目當(dāng)中,這是我們經(jīng)常需要面對(duì)和處理的問(wèn)題:

 服務(wù)器維護(hù)場(chǎng)景A:假如我們打包在容器中的程序,提供HTTP方式的服務(wù),負(fù)責(zé)處理各種HTTP requests并返回結(jié)果,我們必然希望在容器被停掉的時(shí)候,能夠讓程序有時(shí)間把已經(jīng)在處理中的請(qǐng)求繼續(xù)處理完畢,并返回結(jié)果給客戶(hù)端。

服務(wù)器維護(hù)場(chǎng)景B:又比如我們打包在容器中的程序,負(fù)責(zé)寫(xiě)入數(shù)據(jù)到某個(gè)數(shù)據(jù)文件中,我們希望程序能夠在容器被停掉的時(shí)候,有時(shí)間把內(nèi)存中緩存的數(shù)據(jù)持久化到存儲(chǔ)設(shè)備中,以防數(shù)據(jù)丟失。

服務(wù)器維護(hù)場(chǎng)景C:再比如現(xiàn)在流行的微服務(wù)架構(gòu)中,一般會(huì)有服務(wù)發(fā)現(xiàn)的機(jī)制,也即每一個(gè)微服務(wù)在啟動(dòng)之后,都會(huì)主動(dòng)把自己的地址信息注冊(cè)到服務(wù)發(fā)現(xiàn)模塊當(dāng)中,讓其他的服務(wù)可以知道自己的存在。而在容器被停掉的時(shí)候,微服務(wù)需要即時(shí)從服務(wù)發(fā)現(xiàn)模塊中注銷(xiāo)自己,以防止從API Gateway而來(lái)的請(qǐng)求被錯(cuò)
誤的路由到了已經(jīng)被停止掉的微服務(wù)。

如上的各種場(chǎng)景中,都要求打包在容器中的應(yīng)用程序能夠被優(yōu)雅的終止(也即gracefully shutdown),這種gracefully shutdown的方式,允許程序在容器被停止的時(shí)候,有一定時(shí)間做一些后續(xù)處理操作,這也是我們需要進(jìn)一步探討的話(huà)題。

服務(wù)器維護(hù)提示:docker stop 與 docker kill 的區(qū)別

Docker本身提供了兩種終止容器運(yùn)行的方式,即docker stop與docker kill。

服務(wù)器維護(hù)要點(diǎn):docker stop

先來(lái)說(shuō)說(shuō)docker stop吧,當(dāng)我們用docker stop命令來(lái)停掉容器的時(shí)候,docker默認(rèn)會(huì)允許容器中的應(yīng)用程序有10秒的時(shí)間用以終止運(yùn)行。所以我們查看docker stop命令幫助的時(shí)候,會(huì)有如下的提示:

1

2

3

4

5

6
→ docker stop --help

Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Options:

  --help  Print usage

 -t, --time int Seconds to wait for stop before killing it (default 10)

在docker stop命令執(zhí)行的時(shí)候,會(huì)先向容器中PID為1的進(jìn)程發(fā)送系統(tǒng)信號(hào)SIGTERM,然后等待容器中的應(yīng)用程序終止執(zhí)行,如果等待時(shí)間達(dá)到設(shè)定的超時(shí)時(shí)間,或者默認(rèn)的10秒,會(huì)繼續(xù)發(fā)送SIGKILL的系統(tǒng)信號(hào)強(qiáng)行kill掉進(jìn)程。在容器中的應(yīng)用程序,可以選擇忽略和不處理SIGTERM信號(hào),不過(guò)一旦達(dá)到超時(shí)時(shí)間,程序就會(huì)被系統(tǒng)強(qiáng)行kill掉,因?yàn)镾IGKILL信號(hào)是直接發(fā)往系統(tǒng)內(nèi)核的,應(yīng)用程序沒(méi)有機(jī)會(huì)去處理它。在使用docker stop命令的時(shí)候,我們唯一能控制的是超時(shí)時(shí)間,比如設(shè)置為20秒超時(shí):

1
docker stop --time=20 container_name

服務(wù)器維護(hù)要點(diǎn):docker kill

接著我們來(lái)看看docker kill命令,默認(rèn)情況下,docker kill命令不會(huì)給容器中的應(yīng)用程序有任何gracefully shutdown的機(jī)會(huì)。它會(huì)直接發(fā)出SIGKILL的系統(tǒng)信號(hào),以強(qiáng)行終止容器中程序的運(yùn)行。通過(guò)查看docker kill命令的幫助,我們可以看到,除了默認(rèn)發(fā)送SIGKILL信號(hào)外,還允許我們發(fā)送一些自定義的系統(tǒng)信號(hào):

1

2

3

4

5
6

→ docker kill --help

Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...]

Kill one or more running containers

Options:
  
--help   Print usage
 
-s, --signal string Signal to send to the container (default "KILL")

比如,如果我們想向docker中的程序發(fā)送SIGINT信號(hào),我們可以這樣來(lái)實(shí)現(xiàn):

1 docker kill --signal=SIGINT container_name

與docker stop命令不一樣的地方在于,docker kill沒(méi)有任何的超時(shí)時(shí)間設(shè)置,它會(huì)直接發(fā)送SIGKILL信號(hào),以及用戶(hù)通過(guò)signal參數(shù)指定的其他信號(hào)。

其實(shí)不難看出,docker stop命令,更類(lèi)似于Linux系統(tǒng)中的kill命令,二者都是發(fā)送系統(tǒng)信號(hào)SIGTERM。而docker kill命令,更像是Linux系統(tǒng)中的kill -9或者是kill -SIGKILL命令,用來(lái)發(fā)送SIGKILL信號(hào),強(qiáng)行終止進(jìn)程。

服務(wù)器維護(hù)提示:在程序中接收并處理信號(hào)

了解了docker stop與docker kill的區(qū)別,我們能夠知道,docker kill適合用來(lái)強(qiáng)行終止程序并實(shí)現(xiàn)快速停止容器。而如果希望程序能夠gracefully shutdown的話(huà),docker stop才是不二之選。這樣,我們可以讓程序在接收到SIGTERM信號(hào)后,有一定的時(shí)間處理、保存程序執(zhí)行現(xiàn)場(chǎng),優(yōu)雅的退出程序。

接下來(lái)我們可以寫(xiě)一個(gè)簡(jiǎn)單的Go程序來(lái)實(shí)現(xiàn)信號(hào)的接收與處理,程序在啟動(dòng)過(guò)后,會(huì)一直阻塞并監(jiān)聽(tīng)系統(tǒng)信號(hào),直到監(jiān)測(cè)到對(duì)應(yīng)的系統(tǒng)信號(hào)后,輸出控制臺(tái)并退出執(zhí)行。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// main.go

package main

import (

 "fmt"

 "os"

 "os/signal"

 "syscall"

)

func main() {

 fmt.Println("Program started...")

 ch := make(chan os.Signal, 1)

 signal.Notify(ch, syscall.SIGTERM)

 s := <-ch

 if s == syscall.SIGTERM {

 fmt.Println("SIGTERM received!")

 //Do something...

 }

 fmt.Println("Exiting...")
}

接下來(lái)服務(wù)器維護(hù)要點(diǎn):使用交叉編譯的方式來(lái)編譯程序,讓程序可以在Linux下運(yùn)行:

1
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o graceful
 

編譯好之后,我們還需要打包程序到容器中運(yùn)行。于是,我們還得有個(gè)Dockerfile。在這里,我們選擇使用體積小又輕盈的alpine鏡像作為基礎(chǔ)鏡像,打包這個(gè)Go程序:

1
2
3
4
from alpine:latest

MAINTAINER Timothy

ADD graceful /graceful

CMD ["/graceful"]
 
服務(wù)器維護(hù)要點(diǎn):這里需要避開(kāi)的一個(gè)坑,是Dockerfile中CMD命令的用法。

服務(wù)器維護(hù)要點(diǎn):CMD命令有兩種方式:

1 CMD /graceful

使用 CMD command param1 param2 這種方式,其實(shí)是以shell的方式運(yùn)行程序。最終程序被執(zhí)行時(shí),類(lèi)似于/bin/sh -c的方式運(yùn)行了我們的程序,這樣會(huì)導(dǎo)致/bin/sh以PID為1的進(jìn)程運(yùn)行,而我們的程序只不過(guò)是它fork/execs出來(lái)的子進(jìn)程而已。前面我們提到過(guò)docker stop的SIGTERM信號(hào)只是發(fā)送給容器中PID為1的進(jìn)程,而這樣,我們的程序就沒(méi)法接收和處理到信號(hào)了。

1 CMD [“/graceful”]

使用 CMD [“executable”,”param1”,”param2”] 這種方式啟動(dòng)程序,才是我們想要的,這種方式執(zhí)行和啟動(dòng)時(shí),我們的程序會(huì)被直接啟動(dòng)執(zhí)行,而不是以shell的方式,這樣我們的程序就能以PID=1的方式開(kāi)始執(zhí)行了。

話(huà)題轉(zhuǎn)回來(lái),我們開(kāi)始執(zhí)行容器構(gòu)建操作,打包程序:

1 docker build -t registry.xiaozhou.net/graceful:latest .

 

打包過(guò)后的鏡像,才6MB左右:

1
2
3
λ Timothy [workspace/src/graceful] → docker images

REPOSITORY            TAG     IMAGE ID   CREATED    SIZE

registry.xiaozhou.net/graceful       latest    b2210a85ca55  20 hours ago  6.484 MB
 

啟動(dòng)并運(yùn)行容器:

1 λ Timothy [workspace/src/graceful] → docker run -d --name graceful b2210a85

查看容器運(yùn)行狀態(tài):

1
2
3

λ Timothy [workspace/src/graceful] → docker ps -a

CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

fd18eedafd16  b221    "/graceful"   3 seconds ago  Up 2 seconds       graceful

查看容器輸出,能看到程序已經(jīng)正常啟動(dòng):

1
2
λ Timothy [workspace/src/graceful] → docker logs graceful

Started...

服務(wù)器維護(hù)要點(diǎn):接著我們要使用docker stop大法,看程序能否響應(yīng)SIGTERM信號(hào):

1
2
λ Timothy [workspace/src/graceful] → docker stop graceful

graceful

最后,查看容器的日志,檢驗(yàn)輸出:

1
2
3
4
λ Timothy [workspace/src/graceful] → docker logs graceful

Started...

SIGTERM received!

Exiting...
 
以上內(nèi)容為北京艾銻無(wú)限科技發(fā)展有限公司IT外包服務(wù)公司為大家提供的服務(wù)器維護(hù)小知識(shí),更多內(nèi)容請(qǐng)關(guān)注:www.bjitwx.com

相關(guān)文章

IT外包服務(wù)
二維碼 關(guān)閉
主站蜘蛛池模板: 91女神在线观看_国产精品激情久久久久久久_精品国产欧美_日日干夜夜操高清视频_成人avav_日韩经典一区二区_成人在线观看一区二区_日产一级片 | 亚洲熟妇无码爱V在线观看_国产九一视频在线观看_看日本黄色片_精品99在线视频_午夜私人影院久久久久_国产人成亚洲第一网站在线播放_91这里只有精品_馬与人黃色毛片一部 | 男人猛躁进女人免费播放_西西人体444WwW高清大胆_精品福利国产_欧美日韩亚洲系列_91短视频入口_放荡的丰满少妇中文字幕_狠狠插日日干_在线观看亚洲精品视频 | 国产午夜精品理论片a大结局_69激情视频_欧美人与动性xxxxBBBB_久久人爽人人爽人人片AV_少妇人妻88久久中文字幕_日本国产精品视频_在线观看av播放_亚洲欧美另类在线图片区 | 久久久久亚洲AV无码专区首JN_91久久精品国产91久久_在线www免费观看视频_五月丁香好婷婷开心网_人妻中文字幕无码系列_使劲快高潮了国语对白在线_亚洲免费综合_9999在线 | 久久亚洲精品国产精品婷婷_国产在线精品91_av色天天_国产午夜亚洲精品理论片大丰影院_欧美日韩精品视频一区二区在_亚洲免费成人在线_99在线免费播放_中文字幕AV熟女 | 色接久久_欧亚乱熟女一区二区三区在线_激情综合色五月六月婷婷_18无码粉嫩小泬无套在线观看_h视频免费_成·人免费午夜视频_天堂网在线最新版www_79年熟女大胆露脸啪啪对白P | 欧美怡春院一区二区三区_熟妇女的欲乱在线观看_丝袜足控一区二区三区_四虎国产精品永久地址99_人人射人人爱_欧美一级毛片日韩一级_激情综合在线观看_国产日产欧产精品精品推 | 天天爱天天做天天爽歪歪_视频一区二区中文字幕_瑞典性xxxxxhd高清_爱爱视频一区_婷婷五月开心色婷在线尤物_日韩精品一区二区三区_久久999精品_九一在线啪 | 德国妓女精品性HD_狼人精品一区二区三区在线_性猛交xxxx乱大交中国_国产一级片中文字幕_四虎永久在线精品免费播放_日日婷婷夜日日天干A片_91成熟丰满女人少妇777_好好热av | 超碰97成人_97在线视频免费人妻_韩国免费一区_无码国产色欲XXXX视频_国产精品久久久久久99999_日韩国产亚洲欧美成人图片_午夜宅男在线观看_欧美日韩综合一区二区三区 | 亚洲综合第一页_成人在线视频在线观看_欧美成人精品一区二区三区在线观看_国产日韩欧美亚洲精品中字_国产二区在线播放_av黄在线观免费网站_国产精品自在在线午夜蜜芽TV在线_国产色悠悠 | sifangtv在线视频_久久精品av麻豆的观看方式_国产专区国产AV_国模少妇无码一区二区三区_久久无码专区国产精品S_毛片爱爱_色天天av_亚洲国产69 | 久久亚洲精品国产精品婷婷_国产在线精品91_av色天天_国产午夜亚洲精品理论片大丰影院_欧美日韩精品视频一区二区在_亚洲免费成人在线_99在线免费播放_中文字幕AV熟女 | 国产精品久久久久久久久齐齐_亚洲理论_少妇人妻14页_麻花色_中文屏幕乱码av_久久久久久福利视频_60老熟女多次高潮露脸视频_精品国产一区二区三区av小说_毛片123 精品av中文字幕在线毛片_中国一级片_日批一级片_高清成人爽a毛片免费_美景之屋5在线观看_欧美乱妇无码毛片_中文亚洲成A人片在线观看_国产成人无码A区在线观看视频不卡 | 日本不卡视频一二三区_亚洲区成人_插下面视频_aaa在线免费观看_av中文字幕久久专区_亚洲一区二区三区四区五区_日本一区二区精品视频_曰曰摸天天添天天湿 | 无码人妻黑人中文字幕_日韩欧美中文视频_国产精品无码无片在线播放_亚洲精品GV天堂无码男同_久久ri资源网_亚洲天堂男人影院_国产成人欧美视频在线观看_一本大道久久a久久精二佰 | 亚洲人a成www在线影院_久久动漫在线观看_亚洲再线_AV无码爆乳护士在线播放_五月天婷亚洲天综合网鲁鲁鲁_japansex久久高清精品_成人cosplay福利网站18禁_国产欧美日韩亚洲更新 | 老头天天吃我奶躁我的视频_男人的天堂AV亚洲一区2区_亚洲高清不卡视频_超碰在线c_亚洲A∨无码男人的天堂_无码色av一二区在线播放_99热最新精品_国产裸体视频网站 | 四虎4hu永久免费_无码精品A在线观看无_精品久久人妻AV中文字幕_国产成A人亚洲精V品无码_日本xxxx网站_国产乱magnet_中文字幕无码日韩专区_久久久久亚洲精品无码网址蜜桃 | 日韩在线综合视频_亚洲精品成人18久久久久_国产原创AV在线播放不卡_免费看国产黄色_亚洲免费精品视频_国产亚洲精品久久久999功能介绍_日韩美国1级大片_老太婆性杂交毛片 | 亚洲在线高清_亚洲精品成人在线_黄色一级免费观看_天天澡天天揉揉av在线_欧美国产一区二区在线_国内精品久久久久影院网站_国产成人精品无缓存在线播放_91啦91丨porny丨论坛 | 成人性生活免费看_日韩区国产_成人精品视频99_2021精品极品国产色在线首页_亚洲中文字幕无码AV永久_久久久91av_1314免费观看www视频_欧洲美女与动性zozozo | 亚洲精品天堂在线_久久艹国产_亚洲美女视频在线观看_成人h视频在线_女人18毛片水真多_久久综合在线_在线偷拍自拍_亚洲最大网址 | 色哟哟网页_边啃奶头边躁狠狠躁_欧美精品一区二区三区四区五区_中文字幕亚洲一区二区三区_亚洲图片偷拍自拍_91美剧_精品一区二区日韩_欧洲在线免费视频 | 国产福利免费看_天天人人干_色avav色av爱avav亚洲色拍_国产欧美一区二区久久性色99_久久久亚洲国产精品_播五月开心婷婷欧美综合_多人运动免费观看不用登录_靠比视频在线免费观看 | 91麻豆精品国产91久久久久久久久_一级毛片真人实干_视频成人免费_日韩欧美亚洲视频_亚洲欧美日韩国产成人精品_成人毛片免费网站_韩国毛片在线观看_日本午夜一区 | 中文字幕在线观看一区二区_日本极品少妇videossexhd_欧美中文一区_亚洲成人www_国产精品一级无遮挡毛片_香蕉av久久一区二区三区_VideOS性饥渴_国产精品萝li | 女同免费观看码_法国精品熟妇多毛bhd_国产精品伊人影院_国产精品∧V在线观看_日本肥老太肥506070_国产精品久久久久久婷婷_谁有毛片_四虎影视免费观看 | 国产熟女内射OOOO_少妇和黑人老外做爰av_日韩在线播放中文字幕_又粗又大又黄又爽的免费视频_JAPANESEVIDEOS中国少妇_女人扒下裤让男人桶到爽_成人av免费在线_国产亚洲AV手机在线观看 | 深夜视频免费在线观看_日本韩国一级淫片a免费_在线免费看黄色片_尤物在线观看视频不卡无码_免费a在线观看_成人性生活大片_91久久精品一区二区_亚洲AV无码片在线播放仙踪林 | 无码人妻久久一区二区三区蜜桃_av免费网站_男人戳女人戳到爽视频_在线中文字幕精品第5页_国产一级在线观看视频_成人一级_成年人免费在线看惊悚片动作片_色欲色av免费观看 | 色77影院_国产成人无码AV麻豆_久久人成_不卡高清AV手机在线观看_久久精品在线视频_亚洲国产精品嫩草影院在线观看_精彩视频一区二区三区_国产精品亚洲一区二区三区妖精 | 亚洲av制服丝袜日韩高清_亚洲国产综合专区在线播放_一二三四在线观看视频韩国_最近免费观看在线中文2019_亚洲综合色久_日韩网站在线播放_亚洲成av人片在线观看高清_大地资源网高清视频免费观看 | 无码视频免费一区二三区_东南亚一级毛片_在线观看亚洲_噜噜吧噜噜色_色噜噜狠狠色综合久_一级黄色带_内射无套在线观看高清完整免费_宅男撸66国产精品 | 一区二区三区精_日韩在线视频精品_99精品欧美一区_国产色系视频在线观看_亚洲一区二区三区高清av_亚洲成人超碰_亚洲一区二区无码影院_97无码人妻福利免费公开在线视频 | 久久亚洲免费视频_韩国一级黄色录像_国产极品美女到高潮_妺妺窝人体色WWW视频_日韩精品真人荷官无码_日韩AV无码一网二网三网_91亚洲精品久久久久图片蜜桃_segui88久久综合9999 | 成午夜精品一区二区三区_四虎精品国产永久在线观看_日韩女人一级_久久综合给合久久狠狠狠色97_日韩欧美精品一中文字幕_97碰碰碰人妻无码视频_国产熟妇搡BBBB搡BBBB_91久久99久久91熟女精品 | 日日噜噜夜夜狠狠久久蜜桃_CHINESE熟女熟妇1乱老女人_亚洲a片成人无码av_香蕉久久人人97超碰caoproen_2024国产在线拍揄自揄视频_国产伦精品一区二区三区无广告_在线综合视频_成人欧美一区二区三区男男 | 日日干夜夜爱_欧美交换配乱吟粗大免费看_三级免费黄_最新中文字幕第一页_把腿张开老子cao烂你_国产系列精品av_国产中文字幕免费_韩国av网站在线观看 | 午夜伦4410yy妇女久久v_91小视频在线_超爱碰在线资源_国产二区视频在线播放_a黄色一级_插bb视频青春网站_久久久精品国产免费a片胖妇女_av亚洲精华国产精华 |