Docker宿主機和容器之間文件拷貝docker copy
前言:
Docker 數據管理
在生產環境中使用 Docker ,往往需要對數據進行持久化,或者需要在多個容器之間進行
數據共享,這必然涉及容器的數據管理操作
容器中的管理數據主要有兩種方式:
數據卷 Data Volumes 容器內數據直接映射到本地主機環境;
數據卷容器(Data Volume Containers 使用特定容器維護數據卷
當然還有最原始的copy方式,這個也是管理數據的方式,但是基本不會用到;
最原始的copy方式管理數據:
宿主機文件 copy to 容器內
docker cp 需要拷貝的文件或者目錄 容器名稱:容器目錄
實例:
docker cp 9d205bb2e580:/hyc/aaa.txt/ hyc:/huang
容器內 copy to 宿主機
docker cp 容器名稱:容器目錄 宿主機目錄
數據卷
數據卷(Data Volumes)
數據卷是一個可供一個或多個容器使用的特殊目錄,它將主機操作系統目錄直接映射進容器,
它可以提供很多有用的特性:
1.數據卷 可以在容器之間共享和重用
2.對數據卷的修改會立馬生效
3.對數據卷的更新,不會影響鏡像
4.數據卷 默認會一直存在,即使容器被刪除
數據卷相關操作
1.創建數據卷
docker volume create my-vol
此時,數據卷默認會放到/var/lib/docker/volumes路徑下,會發現所新建的數據卷位置,查看命令如下:
## 參數可以為數字“1”,字母L:大小寫均可,但效果不一樣
ls -1 /var/lib/docker/volumes
2.查看所有的數據卷
docker volume ls
3.查看指定數據卷的詳細信息(顯示一個JSON格式的數據)
docker volume inspect my-vol
4.刪除一個volume
docker volume rm my-vol
注1:數據卷 是被設計用來持久化數據的,它的生命周期獨立於容器,Docker不會在容器被刪除后自動刪除數據卷,
並且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的數據卷,無主的數據卷可能會占據很多空間,
所以要及時刪除
## 掛載數據卷,最好是通過run而非create/start創建啟動容器
## create/start命令創建啟動容器后,再掛載數據卷相當麻煩,要修改很多配置文件,但並非不可以
5.啟動一個掛載數據卷的容器
## demo1
docker run -d \
-it \
--name tomcat01 \
--mount source=my-vol,target=/webapp \
centos:7
注意:此行命令執行后的效果是,宿主機路徑/var/lib/docker/volumes/my-vol/_data與tomcat01容器路徑/webapp完成映射
## demo2 docker run -d \ -it \ --name tomcat02 \ --mount type=bind,source=/javaxl/data,target=/root/webapp02 \ centos:7 注1:linux命令結尾加斜杠有什么用 加了“\”意為將最后的回車換行給注釋了,系統理解為命令還沒有結束,因而是繼續等待用戶進行輸入,直到讀到結束符,如回 注2:source=my-vol,target=/webapp my-vol為要掛載的數據卷,如果數據卷不存在,docker會自動創建 /webapp為容器上目錄,如果目錄不存在, Docke會自動創建 注3:mount選項高級用法 --mount選項的type參數支持三種類型的數據卷 --mount標志:由多個名值對組成,逗號分隔,每個鍵值由 <key> = <value> 元組組成 1.type=volume普通數據卷(默認即這種類型),映射到主機/var/lib/docker/volumes路徑下; --mount type=volume,source=my-vol,target=/webapp 注:這是type的默認值 2.bind:綁定數據卷,映射到主機指定路徑下; --mount type=bind,source=/webapp,destination=/webapp2 3.tmpfs :臨時數據卷,只存在於內存中 docker run -d \ -it \ --name tmptest \ --mount type=tmpfs,destination=/app \ nginx:latest
數據卷容器
如果用戶需要在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。
數據卷容器也是一個容器,但是它的目的是專門提供數據卷給其他容器掛載
數據卷容器相關操作
1.新建數據卷容器
docker run -di --name db_data -v /db_data centos:7
注:-v 后面接的共享數據真實存放路徑
2.用容器db1、db2測試數據卷容器是否可用
docker run -di --name db1 --volumes-from db_data centos:7
docker exec -it db1 bash
cd db_data
docker run -di --name db2 --volumes-from db_data centos:7
docker exec -it db2 bash
cd db_data
隨便創建一個xxx.txt文件就可以查看效果了
效果:上面例子中db1、db2通過db_data來共享了數據