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