docker 使用技巧101

1 目錄掛載和單個(gè)文件掛載

例如下面一個(gè)掛載實(shí)例, /var/run/license_unix_sock 是個(gè)文件扬霜,docker 容器通過(guò)該 socket 文件和主機(jī)上的進(jìn)程進(jìn)行通信定鸟, /var/www/html/ 是目錄。

- "/var/run/license_unix_sock:/var/run/license_unix_sock"
- "/var/www/html/:/var/www/html/"
- "/etc/localtime:/etc/localtime"

現(xiàn)象:當(dāng)運(yùn)行在主機(jī)上的程序重啟時(shí)候著瓶, /var/run/license_unix_sock 發(fā)生變化联予,但是在 docker 容器中掛載的文件并沒有發(fā)生改變,仍然是舊文件材原。

原因:對(duì)bind mount 這種掛載方式來(lái)說(shuō)躯泰,文件的改變會(huì)改變它的inode,但是容器內(nèi)inode保持不變华糖。

解決方案:修改為掛載目錄麦向。

相關(guān)案例:

https://serversforhackers.com/c/mounting-files-vs-directories

https://github.com/docker/docker/issues/15793#issuecomment-135411504

2 使用 docker swarm,容器莫名其妙重啟

某些情況下客叉,docker 容器全部重啟诵竭,經(jīng)過(guò)查看 docker 運(yùn)行日志,發(fā)現(xiàn)下面報(bào)錯(cuò):

Feb 26 11:43:16 sz-drip dockerd[5065]: time="2020-02-26T11:43:16.124650220+08:00" level=error msg="heartbeat to manager { } failed" error="rpc error: code = NotFound desc = node not register
Feb 26 11:43:16 sz-drip dockerd[5065]: time="2020-02-26T11:43:16.124764380+08:00" level=error msg="agent: session failed" backoff=100ms error="node not registered" module=node/agent node.id=
Feb 26 11:43:16 sz-drip dockerd[5065]: time="2020-02-26T11:43:16.124803737+08:00" level=info msg="manager selected by agent for new session: { }" module=node/agent node.id=a5drrk7eo59x4m6itl
Feb 26 11:43:16 sz-drip dockerd[5065]: time="2020-02-26T11:43:16.124835689+08:00" level=info msg="waiting 47.652971ms before registering session" module=node/agent node.id=a5drrk7eo59x4m6itl
Feb 26 11:43:16 sz-drip dockerd[5065]: time="2020-02-26T11:43:16.278198549+08:00" level=info msg="worker a5drrk7eo59x4m6itlbsf28pq was successfully registered" method="(*Dispatcher).register

原因:docker swarm 節(jié)點(diǎn)間通信默認(rèn)超時(shí)時(shí)間為 5s兼搏,在虛擬化環(huán)境下有時(shí)候會(huì)超時(shí)卵慰,導(dǎo)致節(jié)點(diǎn)重啟。

解決方案:使用以下命令將心跳超時(shí)時(shí)間更改為 30s佛呻。

docker swarm update --dispatcher-heartbeat 30s

centos 上查看日志方法:journalctl -u docker.service

相關(guān)案例:

https://github.com/moby/moby/issues/38107

備注:使用 docker-compose 有時(shí)候也會(huì)出現(xiàn)啟動(dòng)失敗的情況裳朋,可以使用下面兩個(gè)環(huán)境變量進(jìn)行設(shè)置:

export DOCKER_CLIENT_TIMEOUT=500
export COMPOSE_HTTP_TIMEOUT=500

3 docker 容器訪問(wèn)宿主機(jī)服務(wù)

需要在 docker 容器中訪問(wèn)部署在宿主機(jī)上的服務(wù),可以采用下面一些方法吓著。

  • 采用 host 網(wǎng)絡(luò)模式

    在啟動(dòng)容器時(shí)鲤嫡,使用 --net="host" 參數(shù)。

  • 使用宿主機(jī)對(duì)外的IP绑莺,需要防火墻端口開放暖眼。

  • 使用 docker0 訪問(wèn)

    ip route show | awk '/default/ {print $3}'

    注意:這種方式只能訪問(wèn)監(jiān)聽到 0.0.0.0 或者 docker0 上服務(wù)。

4 給 docker 指定 IP

首先需要?jiǎng)?chuàng)建自己的網(wǎng)絡(luò)纺裁。

docker network create --subnet=10.12.0.0/16 testnet

然后可以通過(guò)運(yùn)行參數(shù)指定 IP

docker run -d --net testnet --ip 10.12.1.32 ubuntu

5 宿主機(jī)與容器間文件拷貝

常用的有如下兩種方法:

第一種诫肠,將目錄掛載到容器司澎,然后可以通過(guò) ${PWD}/data 目錄將文件拷貝到容器中,或在容器中將文件拷貝至 /data 目錄栋豫。

docker run -i -v ${PWD}/data:/data ubuntu:latest

第二種挤安,較第一種更為方便快捷。

從容器中拷貝數(shù)據(jù)到宿主機(jī):

docker cp <containerId>:/file/path/within/container /host/path/target

拷貝文件到容器:

docker cp /host/path/target <containerId>:/file/path/within/container

6 如何啟動(dòng) docker-compose.yml 文件中的某個(gè)服務(wù)

在一個(gè) docker-compose.yml 文件中我們經(jīng)常會(huì)定義多個(gè)服務(wù)丧鸯,使用 docker-compose up -d 可以將服務(wù)全部啟動(dòng)蛤铜,當(dāng)我們修改某個(gè)服務(wù)配置后,再次運(yùn)行該命令就可以直接重啟更改后的服務(wù)骡送。

有時(shí)候,我們只需要啟動(dòng)其中的某一個(gè)服務(wù)絮记,而不需要全部啟動(dòng)摔踱,可以使用以下命令:

docker-compose up --detach --build xxxx

更新配置或代碼后,使用以上命令就可以重新生成容器怨愤。

或者

docker-compose up -d xxxx

7 如何清除無(wú)用鏡像

docker rmi $(docker images | grep -w "keyword" | awk -F " " '{print $3}') -f

或者刪除所有鏡像:

docker rmi -f $(docker images -q)

8 如何刪除磁盤空間

docker volume rm $(docker volume ls -q)

9 如何查看 docker daemon 日志的位置

在不同的系統(tǒng)派敷,查看方式也不同,參考下表:

系統(tǒng) 查看方式
RHEL, Oracle Linux /var/log/messages
Debian /var/log/daemon.log
Ubuntu 16.04+, CentOS journalctl -u docker.service 或者查看 /var/log/syslog
Ubuntu 14.10- /var/log/upstart/docker.log
macOS (Docker 18.01+) ~/Library/Containers/com.docker.docker/Data/vms/0/console-ring
macOS (Docker <18.01) ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring
Windows AppData\Local

參考鏈接如下:https://docs.docker.com/config/daemon/#read-the-logs

10 如何導(dǎo)入/導(dǎo)出鏡像文件

例如將鏡像文件 mongodb:4.0.11-xenial 導(dǎo)出至 mongodb.tar 文件中撰洗,可以使用以下命令:

docker save mongodb:4.0.11-xenial > mongodb.tar

使用以下命令導(dǎo)入鏡像:

docker load < mongodb.tar

11 執(zhí)行 docker 容器中的命令

例如 mongodb 運(yùn)行在 docker 容器中篮愉,需要使用 mongoimport 導(dǎo)入數(shù)據(jù),可以采用以下命令:

docker exec $(docker ps | grep "ms_mongodb" | awk -F " " '{print $1}') mongoimport -u ${MONGOUSER} -p ${MONGOPASSWORD} -d ${MONGODB} -c ${name} --file ${DOCKER_RESOURCE}/${name}.json

其中 ms_mongodb 是容器名差导。

未完待續(xù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晕粪,更是在濱河造成了極大的恐慌泡挺,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件助析,死亡現(xiàn)場(chǎng)離奇詭異犀被,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)外冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門寡键,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人雪隧,你說(shuō)我怎么就攤上這事西轩。” “怎么了脑沿?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵遭商,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捅伤,道長(zhǎng)劫流,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮祠汇,結(jié)果婚禮上仍秤,老公的妹妹穿的比我還像新娘。我一直安慰自己可很,他們只是感情好诗力,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著我抠,像睡著了一般苇本。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菜拓,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天瓣窄,我揣著相機(jī)與錄音,去河邊找鬼纳鼎。 笑死俺夕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贱鄙。 我是一名探鬼主播劝贸,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逗宁!你這毒婦竟也來(lái)了映九?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瞎颗,失蹤者是張志新(化名)和其女友劉穎氯迂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體言缤,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嚼蚀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了管挟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轿曙。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖僻孝,靈堂內(nèi)的尸體忽然破棺而出导帝,到底是詐尸還是另有隱情,我是刑警寧澤穿铆,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布您单,位于F島的核電站,受9級(jí)特大地震影響荞雏,放射性物質(zhì)發(fā)生泄漏虐秦。R本人自食惡果不足惜平酿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悦陋。 院中可真熱鬧蜈彼,春花似錦、人聲如沸俺驶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)暮现。三九已至还绘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栖袋,已是汗流浹背拍顷。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栋荸,地道東北人菇怀。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓凭舶,卻偏偏與公主長(zhǎng)得像晌块,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帅霜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360