Docker精华问答 | 多个 Docker 容器之间共享数据怎么办?
在計(jì)算機(jī)技術(shù)日新月異的今天, Docker 在國內(nèi)發(fā)展的如火如荼。特別是在一線互聯(lián)網(wǎng)公司 Docker 的使用是十分普遍的,甚至成為了一些企業(yè)面試的加分項(xiàng),那么今天我們繼續(xù)關(guān)于Docker 的精華問答。
1
Q:容器磁盤可以限制配額么??
A:對(duì)于?devicemapper,?btrfs,?zfs?來說,可以通過?--storage-opt size=100G?這種形式限制?rootfs?的大小。
Q:容器內(nèi)的數(shù)據(jù)該保存在鏡像里還是物理機(jī)里??
A:如果所謂數(shù)據(jù)是指運(yùn)行時(shí)動(dòng)態(tài)的數(shù)據(jù),那么這部分?jǐn)?shù)據(jù)文件不應(yīng)該保存于鏡像內(nèi)。在運(yùn)行時(shí)要保持容器基礎(chǔ)文件不可變的特性,而變化部分使用掛載宿主目錄,或者數(shù)據(jù)卷來解決。
Q:看到總說要保持容器無狀態(tài),那什么是無狀態(tài)??
A:這里說到的有兩個(gè)層面的無狀態(tài):
容器存儲(chǔ)層的無狀態(tài)?
這里提到的存儲(chǔ)層是指用于存儲(chǔ)鏡像、容器各個(gè)層的存儲(chǔ),一般是Union FS,如?AUFS,或者是使用塊設(shè)備的一些機(jī)制(如?snapshot?)進(jìn)行模擬,如?devicemapper。Union FS?這類存儲(chǔ)系統(tǒng),相當(dāng)于是在現(xiàn)有存儲(chǔ)上,再加一層或多層存儲(chǔ),這類存儲(chǔ)的讀寫性能并不好。并且對(duì)于?CentOS?這類只能使用?devicemapper?的系統(tǒng)而言,存儲(chǔ)層的讀寫還經(jīng)常出 bug。因此,在 Docker 使用過程中,要避免存儲(chǔ)層的讀寫。頻繁讀寫的部分,應(yīng)該使用卷。需要持久化的部分,可以使用命名卷進(jìn)行持久化。由于命名卷的生存周期和容器不同,容器消亡重建,卷不會(huì)跟隨消亡。所以容器可以隨便刪了重新run,而其掛載的卷則會(huì)保持之前的數(shù)據(jù)。
服務(wù)層面的無狀態(tài)?
使用卷持久化容器狀態(tài),雖然從存儲(chǔ)層的角度看,是無狀態(tài)的,但是從服務(wù)層面看,這個(gè)服務(wù)是有狀態(tài)的。從服務(wù)層面上說,也存在無狀態(tài)服務(wù)。就是說服務(wù)本身不需要寫入任何文件。比如前端?nginx,它不需要寫入任何文件(日志走Docker日志驅(qū)動(dòng)),中間的?php,?node.js?等服務(wù),可能也不需要本地存儲(chǔ),它們所需的數(shù)據(jù)都在?redis,?mysql,?mongodb?中了。這類服務(wù),由于不需要卷,也不發(fā)生本地寫操作,刪除、重啟、不保存自身狀態(tài),并不影響服務(wù)運(yùn)行,它們都是無狀態(tài)服務(wù)。這類服務(wù)由于不需要狀態(tài)遷移,不需要分布式存儲(chǔ),因此它們的集群調(diào)度更方便。
Q:卷和掛載目錄有什么區(qū)別??
A:卷 (Docker Volume) 是受控存儲(chǔ),是由 Docker 引擎進(jìn)行管理維護(hù)的。因此使用卷,你可以不必處理?uid、SELinux?等各種權(quán)限問題,Docker 引擎在建立卷時(shí)會(huì)自動(dòng)添加安全規(guī)則,以及根據(jù)掛載點(diǎn)調(diào)整權(quán)限。并且可以統(tǒng)一列表、添加、刪除。另外,除了本地卷外,還支持網(wǎng)絡(luò)卷、分布式卷。
而掛載目錄那就沒人管了,屬于用戶自行維護(hù)。就必須手動(dòng)處理所有權(quán)限問題。特別是在?CentOS?上,很多人碰到?Permission Denied,就是因?yàn)闆]有使用卷,而是掛載目錄,而且還對(duì) SELinux 安全權(quán)限一無所知導(dǎo)致。
Q:多個(gè) Docker 容器之間共享數(shù)據(jù)怎么辦?NFS ??
A:如果是同一個(gè)宿主,那么可以綁定同一個(gè)數(shù)據(jù)卷,當(dāng)然,程序上要處理好并發(fā)問題。
如果是不同宿主,則可以使用分布式數(shù)據(jù)卷驅(qū)動(dòng),讓分布在不同宿主的容器都可以訪問到的分布式存儲(chǔ)的位置。如S3之類。
小伙伴們沖鴨,后臺(tái)留言區(qū)等著你!
關(guān)于Docker?,今天你學(xué)到了什么?還有哪些不懂的?除此還對(duì)哪些話題感興趣?快來留言區(qū)打卡啦!留言方式:打開第XX天,答:……
同時(shí)歡迎大家搜集更多問題,投稿給我們!風(fēng)里雨里留言區(qū)里等你~
福利
1、掃描添加小編微信,備注“姓名+公司職位”,加入【云計(jì)算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
2、公眾號(hào)后臺(tái)回復(fù):白皮書,獲取IDC最新數(shù)據(jù)白皮書整理資料!
推薦閱讀:
技術(shù)頭條
2019年技術(shù)盤點(diǎn)微服務(wù)篇(二):青云直上云霄 | 程序員硬核評(píng)測
“入職 6 年,新人工資高我 2 千”:老板不加錢,不是嫌你老
從沉迷游戲到沉迷編程,16 歲賺 20 萬美元!
南大和中大“合體”拯救手殘黨:基于GAN的PI-REC重構(gòu)網(wǎng)絡(luò),“老婆”畫作有救了 | 技術(shù)頭條
救救中國 996 程序員!GitHub 近 230,000 Star、Python 之父伸張正義!
一個(gè)月修復(fù)20個(gè)漏洞獲23675美元賞金, 原來是黑客隊(duì)伍里出了無間道
真香,朕在看了!
總結(jié)
以上是生活随笔為你收集整理的Docker精华问答 | 多个 Docker 容器之间共享数据怎么办?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Boost:字符串裁剪Trim的测试程序
- 下一篇: Boost:字符串的RLE压缩的测试程序