docker-compose:數(shù)據(jù)卷volumes掛載規(guī)則說明
案例compose
# add this file # default MySQL root password is 123456 version: '3.1' services: mysql: image: mysql:5.7 container_name: mysql_5.7 restart: always ports: - 3305:3306 volumes: - ./mysql_config/conf.d:/etc/mysql/conf.d - ./mysql_data:/var/lib/mysql - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d environment: MYSQL_ROOT_PASSWORD: 123456
前言
數(shù)據(jù)卷的掛載,是從host到container的,相當于linux系統(tǒng)中將host文件夾掛載在container的指定目錄下,若掛載位置有文件/文件夾,則原文件夾隱藏,unmount后原文件夾恢復。
結果
概念理解
- 宿主機目錄對應的物理儲存地址被容器和宿主機操作系統(tǒng)同時管理。
- 宿主機目錄可以看成一個硬盤被掛載在容器目錄下
- 宿主機的目錄和容器的目錄可以看成兩個指針指向同一個物理地址
- 非空容器目錄為什么不行?數(shù)據(jù)卷的意義在于數(shù)據(jù)持久化,將應用數(shù)據(jù)分離,因此數(shù)據(jù)在宿主機,若容器目錄非空,會造成邏輯沖突,也就是怎樣去同步宿主機目錄和容器目錄,解決兩邊文件的差異。因此只能掛載在容器中的空目錄下。
tips
- 若掛載的是目錄,容器目錄要為空目錄
- 若容器目錄不存在,也可以掛載會自動創(chuàng)建
- volumes基本規(guī)則->*文件夾:文件夾;文件:文件
只要指定目錄掛載就會刪除容器內的同名文件夾,例如:將mysql的配置目錄映射出容器,就會被代替為宿主機的對應文件夾內容,無法在compose層面將原本的配置文件copy到宿主機。但是目前,docker-
compose不支持類似docker cp的功能將容器內的文件復制到宿主機。
可以參考github上官方的提問:https://github.com/docker/compose/issues/5523
以及Stack Overflow上的提問:https://stackoverflow.com/questions/39176561/copying-files-to-a-container-with-docker-compose
想要將容器內文件復制出容器的解決的方法只有通過手動或腳本執(zhí)行docker cp。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
windows10下安裝docker且使用wsl2安裝雙系統(tǒng)并構建最小jre鏡像和應用鏡像
這篇文章主要給大家介紹了windows10下安裝docker且使用wsl2安裝雙系統(tǒng)并構建最小jre鏡像和應用鏡像的流程步驟,文中有詳細的圖文介紹,需要的朋友可以參考下2023-08-08docker?compose部署mongodb?分片集群的操作方法
分片機制(Sharding)是MongoDB中用于處理大規(guī)模數(shù)據(jù)集和高負載應用的一種數(shù)據(jù)分布策略,通過將數(shù)據(jù)均勻分布在多個服務器上,分片技術能夠提高應用的可擴展性和性能,本文給大家介紹docker?compose部署mongodb?分片集群的相關操作,感興趣的朋友一起看看吧2024-10-10dockerfile發(fā)布springboot項目實踐
使用Docker的其中一個目的,是為了更加簡單,方便的部署我們編寫的服務,本文主要介紹了dockerfile發(fā)布springboot項目實踐,具有一定的參考價值,感興趣的可以了解一下2023-08-08