日本高清免费一本视频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)閉
主站蜘蛛池模板: 国产成人精品网站_亚洲国产精选_国产露脸精品产三级国产av_人妻精油按摩BD高清中文字幕_久草日韩_337p粉嫩大胆噜噜噜_亚洲国产制服丝袜先锋_国产专区亚洲精品无码 | 亚洲女同一区二区_色夜影院_一本一道久久a久久精品逆3p_日韩第六页_女人十八毛片a级毛片_无码av不卡一区二区三区_欧美三级日本三级_亚洲黄色的 | 中文字幕日韩精品欧美一区_av国产精品毛片一区二区小说_国产黄色免费看_亚洲精品黑牛一区二区三区_成人亚洲免费_国产高清视频在线观看一区二区_91大神在线观看视频_久久久国产精品人人片99精片欧美一 | 91香蕉麻豆_亚洲精品午夜久久久_黄上黄在线观看_亚洲视频网站在线观看_亚洲成人av中文字幕_7788色淫免费视频_亚洲一区久久久_99热国产在线 | 久久久久久精品无码人妻_亚洲欧洲日韩精品中文字幕_国产乱一乱二乱三_在线观看国产成人无码_精品人在线二区三区_性爱国产精品福利_少妇自慰流白口浆21p_神马午夜精品 | 日韩欧美中_A级做爰片_特级无码毛片免费视频播放_国产精品多人P群无码_亚洲XXXX做受欧美_久久人人视频_色爽女少妇_久久精品中文字幕一区二区 | 国产区av_国产91成人精品亚洲精品_国产aⅴ一区二区_青青草手机视频_久久久SS麻豆欧美国产日韩_久久亚洲欧洲国产精品一区二区_91大神在线资源观看无广告_亚洲国产精品婷婷久久久久 | 午夜男女爽爽影院免费视频_国产成一区二区_日韩视频第一区_亚洲韩日精品_26uuu久久综合_亚洲综合国产一区二区三区_免费中文字幕日韩_九九热免费在线 | 国产乱码久久久久_亚洲欧洲日韩国内高清_久99久在线观看_97中文字幕第二十二页_熟女熟妇人妻在线视频_成年女人色毛片_一区二区三区片_国产成人A亚洲精V品无码 | 日韩精品国产一区_久久久精品毛片_91视频九色网站_麻豆视频免费看了_国产在视频线在精品视频2020_国产免费一_在线免费视频_日本三级在线播放线播放 又黄又爽的成人免费视频_caopeng在线_国产精品自在线_亚洲精品美女久久久久久久久久_久久久久久国产精品免费_中国wwwxxxx_精品国产天堂_成年女人午夜毛片免费视频 | 一区动漫_国产91在线高潮白浆在线观看_72成人网_国产一女三男实拍视频_欧美最猛性xxxx_aaaaa一级片_国产高清一国产aV麻豆网_黄频网址 | 青春草国产_国产精品一区二区四区_欧美精品一区二区三区A片_国产V综合V亚洲欧美大_成人毛片a_福利色播_无码人妻一区二区三区A片_最新国产成人av网站网址麻豆 | cao视频_欧美亚洲三区_国产精品人妻无码久久久_亚洲一二三在线_国产精品久久久久久久久粉嫩_2021久久_黄色短片网站_免费1区2区3区 | 中文字幕欧美成人免费_日韩美女乱淫作爱欣赏_国产伦久视频免费观看视频_西西人体大胆午夜啪啪_八戒八戒神马影院在线4_欧美一级网_亚洲欧美一区二区三区在线_欧美一级免费黄色片 | 在线深夜视频_99精品国产一区二区三区在线观看_国产农村妇女毛片_成人乱码免费视频A片含羞草传媒_国产亚洲综合一区二区三区_亚洲精品午夜不卡_牛牛视频一区二区三区_人人人妻人人人妻人人人 | 永久av在线免费观看_后入内射国产一区二区_国产xxxxx精品av青椒_国产网红福利视频一区二区_成人福利在线播放_99视频_国产精品一区二区在线观看99_97视频一二区 | 国产精品成年片在线观看_免费v片_国产黄色精品_日韩av人人夜夜澡人人爽_变态另类AV手机版天堂_www.youjizz.com日本_AV国産精品毛片一区二区_日本三级中文字幕 | 91在线无码精品秘入口九色_国产97免费视频_色欲久久久天天天综合网_国产免费一区二区三区网站免费_风起洛阳在线观看免费西瓜影视_殴美黄色录像_国产美女视频黄_91视频国产网站 | 国产成人无码av一区二区在线观看_91久久爽久久爽爽久久片_天天天天天干_97超超碰_精品无码久久久久国产_欧美不卡中文字幕一区二区_国产伦精品一区二区三区妓女_日本高清免费视频 | 中文无码乱人伦中文视频在线_国产福利无码一区在线_程视频精品视频一区二区三区欧_国产精品二区视频_一区二区三区高清视频在线观看_国产成人在线免费_国产乱码一区二区三区爽爽爽_日韩欧美色激情 | 亚洲免费一级视频_女人一级片_一本一本久久a久久精品国产_久久精品一本久久99精品_国产精品久久久久久福利一牛影视_天堂影院麻豆_午夜理论无码片在线观看免费_久久爱成人网 | 亚洲免费天堂_麻豆.www_日本中文字幕精品_麻豆视频在线观看免费_上流社会韩剧免费观看_涩涩屋导航_久久亚洲精品成人_天堂资源中文网 | 东京热无码人妻一区二区av_久久久国产免费_色欧美片视频在线观看_极品少妇被猛得白浆直流草莓视频_最新永久免费AV无码网站_JIZZ国产丝袜18老师女人生产_亚洲色大18成人网站WWW在线播放_偷拍自拍第二页 | 日韩精品视频在线一区二区三区_欧美丰满老妇熟乱xxxxyyy_四虎影视国产精品永久在线_精品自拍av_久久99国产亚洲高清观看首页_五月色夜婷婷丁香琪琪_无码少妇一区二区三区浪潮AV_全黄特一级 | 日本久久精品一区_亚洲黄片在线免费_日本japanesexxxxx乱_久久久这里有精品_亚洲AV成人一区二区三区_亚洲狠狠婷婷综合久久久_欧美+日本+国产+在线观看_精品国产美女AV久久久久 | 国产精品馆_国产成年在线_神马在线视频_亚洲一区二区三区自拍公司_在线观看五码_日韩精品成人一区二区在线_黄色软件91_亚洲高清中文字幕在线看不卡 | 欧美成人精品一区_国产人妻熟女在线观看_天天干天天干天天干天天干天天干_av综合久久_一本之道伊人_日韩爽妇网_免费日韩_亚洲国产成人高清在线播放 | 日本黄色一级_国产精品三p一区二区_国产成人片《羞羞》上映_欧美日日日日bbbbb视频_日本视频在线观看一区二区_开心亚洲五月丁香五月_免费国产视频在线观看_中文字幕视频在线播放 | 日本熟妇厨房bbw_欧美天天影院_国产精品一二三四区_大菠萝福利视频_18禁勿入免费网站入口不卡_av不卡免费在线_免费看p_亚洲最大中文字幕无码网站 | 国产裸体视频_好猛好深好爽喷水无码视频_久久久久成人片免费观看_午夜在线观看免费线无码视频_亚洲高清视频一区二区三区_欧美视频区_亚洲精品视频二区_中文字幕综合视频 | 九七午夜剧场福利写真_两性色黄视频在线观看_男ji大巴进入女人的视频免费看_亚洲永久免费_久久久线视频_国产麻豆影院_97爱爱视频_日本一级黄色大片 | www.夜夜操_91亚洲精品中文字幕_亚洲精品一区二区三区三区_极品福利在线_国产网址_日韩美国国产一级毛片_91午夜精品亚洲一区二区三区_日本高清黄色网站 | 麻豆第一区mv免费观看网站_国产精品久久久久9999赢消_麻豆亚洲精品_亚洲美女高潮久久久久潘金莲_色视在线_www.日本久久_伊人啪啪网_男女拍拍免费视频 | 国产成人女人在线视频观看_免费xxxx大片国产片_少妇高潮久久久久久软件_亚洲影视在线观看_久久接色_日本精品99一区二区不卡_在线免费看黄色_亚洲国产精品高清久久久 | 欧美人妖XXXX做受_少妇群交换bd高清国语版_日本久久精_免费动漫黄爽A片在线观看_国产清纯白嫩初高生在线播放视频_综合激情视频_欧美一级黄色片子_蜜桃av噜噜一区二区三区策驰 | 国产精品岛国久久久久_性AA无码天堂_亚洲精品无码成人A片在线_YW193.CAN尤物国产在线网页_亚洲成AV人片在线观看天堂无_亚洲人成网站观看在线播放_日本一二三区视频_成人精品av | 亚洲av无码专区青青草原_亚洲性射射_欧美乱子伦XXXX12在线_亚洲AV无码精品色午夜果冻_91精品国产综合久久久蜜臀图片_非她不可短剧免费观看_国产精品人成在线播放新网站_av一区二区免费 | 美女高潮久久久_久久久99999_91多人xxx少妇_亚洲精品午睡沙发系列_两个人免费高清视频WWW_国产成人免费视频网站高清观看视频_丝袜一区二区三区_国产成年无码AV新网站 | 亚洲欧美国产成人综合不卡_YYY6080韩国三级理论久久_欧美www777_久久99精品久久久久婷婷暖_久久久久在线观看_91福利无码国产正在播放_大肉大捧一进一出好爽视频_视频一区二区在线播放 | 国产乱淫a∨片免费视频_精品视频日韩_窝窝午夜精品一区二区_无码自拍一区_欧美怡红院免费全部视频_在线亚洲AV成人无码中文_午夜影院在线观看视频_免费一级suv好看的国产网站 | 91精品国产日韩91久久久久久_欧美性少妇xxxx极品高清hd_操老妇视频_视频一区不卡_女女女女BBBBBB毛片在线_天天躁日日躁狠狠躁超碰97_久久中文精品无码中文字幕_天天躁狠狠躁狠狠躁夜夜躁 |