Docker容器數(shù)據(jù)卷介紹及操作示例
容器數(shù)據(jù)卷介紹
什么是數(shù)據(jù)卷
將運用與運行的環(huán)境打包形成容器運行,運行可以伴隨著容器,但是我們對數(shù)據(jù)的要求是持久化的。
容器之間希望有可能共享數(shù)據(jù)。
Docker 容器產(chǎn)生的數(shù)據(jù),如果不通過 docker commit 生成新的鏡像,使得數(shù)據(jù)做為鏡像的一部分保存下載,那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒有了。為了能保存數(shù)據(jù)在 docker 中我們使用卷。
數(shù)據(jù)卷能做什么?
容器的持久化
容器間繼承和共享數(shù)據(jù)
卷就是目錄或文件,存在于一個或多個容器中,由 docker 掛載到容器,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過 Union File System 提供一些用于持續(xù)存儲或共享數(shù)據(jù)的特性。
卷的設(shè)計目的就是數(shù)據(jù)的持久化,完全獨立于容器的生存周期因此 Docker 不會再容器刪除時刪除其掛載的數(shù)據(jù)卷。
特點
- 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
- 卷中的更改可以直接生效
- 數(shù)據(jù)卷中的更改不會包含在鏡像的更新中
- 數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
Docker 容器數(shù)據(jù)卷操作
直接命令添加數(shù)據(jù)卷
命令格式
docker run -it -v 宿主機(jī)絕對路徑:容器內(nèi)絕對路徑 鏡像名
案例演示
#1、容器與宿主機(jī)主機(jī)間文件共享 [root@docker ~]# docker run -itd -v /volume:/containervolume centos:latest c0eb80a4425eac21b933ce1a81132eb08eeaaf30ac5adb077d44c11dd7260268 #2、主機(jī)和容器的 / 下均自動創(chuàng)建共享的目錄 [root@docker ~]# ll -d /volume drwxr-xr-x. 2 root root 6 11月 1 23:25 /volume [root@docker ~]# docker exec -it $(docker ps -q) ls -ld /containervolume drwxr-xr-x. 2 root root 6 Nov 1 15:25 /containervolume #3、驗證,在容器內(nèi)的 containervolume 目錄下創(chuàng)建 test 文件,發(fā)現(xiàn)主機(jī) volume 目錄共享了 test 文件 [root@docker ~]# docker exec -it $(docker ps -q) touch /containervolume/test [root@docker ~]# ll /volume -rw-r--r--. 1 root root 0 11月 1 23:29 test #4、退出容器后,主機(jī)對 volume 文件進(jìn)行修改,再次啟動容器,發(fā)現(xiàn)容器內(nèi)的 dataVolumeContainer 目錄下也同步了 nidaye 文件
dockerfile 添加數(shù)據(jù)卷
dockerfile 說明
可在 Dockerfile 中使用 VOLUME 指令來給鏡像添加一個或多個數(shù)據(jù)卷
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/data/VolumeContainer3"]
出于可移植和分享的考慮,用-v 主機(jī)目錄:容器目錄 這種方法不能夠直接在 Dockerfile 中實現(xiàn)。由于宿主機(jī)目錄是依賴于特定宿主機(jī)的,并不能夠保證在所有的宿主機(jī)上都存在這樣的特定目錄。
案例演示
#1、在 / 目錄下創(chuàng)建 mydocker 文件夾并進(jìn)入 [root@docker ~]# mkdir /mydocker #2、dockerfile 構(gòu)建 [root@docker ~]# vim /mydocker/dockerfile FROM centos:latest #創(chuàng)建的鏡像來自于父鏡像 centos VOLUME ["/volume"] #在 / 下創(chuàng)建數(shù)據(jù)卷 CMD echo "create---volume----successl" #打印數(shù)據(jù)卷創(chuàng)建成功 CMD /bin/bash #3、build 生成新的鏡像 volume/centos [root@docker ~]# docker build -f /mydocker/dockerfile -t volume/centos . Sending build context to Docker daemon 519.2MB Step 1/4 : FROM centos:latest ---> 0f3e07c0138f Step 2/4 : VOLUME ["/volume"] ---> Running in 0059989ef83c Removing intermediate container 0059989ef83c ---> 9a7f6ae84e23 Step 3/4 : CMD echo "create---volume----successl" ---> Running in 9dd2d3fbd75c Removing intermediate container 9dd2d3fbd75c ---> 6f8a83b9feca Step 4/4 : CMD /bin/bash ---> Running in 18edd4a6af38 Removing intermediate container 18edd4a6af38 ---> 30b4d769d4e8 Successfully built 30b4d769d4e8 Successfully tagged volume/centos:latest #鏡像創(chuàng)建成功 #4、使用新鏡像啟動容器 [root@docker ~]# docker run -itd volume/centos 53d070c79a13dd4ecfe3208a3907cd00e4dc3b1a45c2b890d642cb96b7e05217 #5、驗證,容器內(nèi)成功創(chuàng)建目錄 volume [root@docker ~]# docker exec -it $(docker ps -q) ls -ld /volume drwxr-xr-x. 2 root root 6 Nov 1 16:03 /volume #6、驗證,在宿主機(jī)上創(chuàng)建文件 test ,容器 /volume 目錄成功共享數(shù)據(jù) [root@docker ~]# touch /var/lib/docker/volumes/53d070c79a13dd4ecfe3208a3907cd00e4dc3b1a45c2b890d642cb96b7e05217/_data/test #宿主機(jī)數(shù)據(jù)卷默認(rèn)掛載目錄 [root@docker ~]# docker exec -it $(docker ps -q) ls -l /volume -rw-r--r--. 1 root root 0 Nov 1 16:12 test
Docker 數(shù)據(jù)卷容器
數(shù)據(jù)卷容器簡介
命名的容器掛載數(shù)據(jù)卷,其它容器通過掛載這個(父容器)實現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱之為數(shù)據(jù)卷容器。
容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
案例演示
啟動一個 centos_1 容器并掛載數(shù)據(jù)卷
[root@docker ~]# docker run -itd --name="centos_1" -v /volume:/volumecontainer_1 centos 9f73357be614f7c5098b2ef3a83534002992ee2f281b8b984ed7af5c03a7e29b #宿主機(jī) /volume 下創(chuàng)建文件 test [root@docker ~]# touch /volume/test #驗證,容器 centos_1,/volume/container_1/下共享文件 test [root@docker ~]# docker exec -it $(docker ps -q) ls -l /volumecontainer_1 total 0 -rw-r--r--. 1 root root 0 Nov 2 14:33 test
啟動一個 centos_2 容器并繼承容器 centos_1 的文件
[root@docker ~]# docker run -itd --name="centos_2" --volumes-from centos_1 centos baefc86b170c376745761aaea1abc0843521b272213337109510170ff1ccb304 #驗證,容器 centos_2 繼承了容器 centos_1 的文件 [root@docker ~]# docker exec -it $(docker ps -n 1 -q) ls -l /volumecontainer_1 total 0 -rw-r--r--. 1 root root 0 Nov 2 14:33 test #驗證,在容器 centos_2 中添加文件,宿主機(jī)和容器 centos_1 都能共享 [root@docker ~]# docker exec -it $(docker ps -n 1 -q) touch /volumecontainer_1/test_centos_2 #宿主機(jī)成功共享文件 test_container_2 [root@docker ~]# ls -l /volume/ 總用量 0 -rw-r--r--. 1 root root 0 11月 2 22:33 test -rw-r--r--. 1 root root 0 11月 2 22:42 test_centos_2 #容器 centos_1成功共享文件 test_container_2 [root@docker ~]# docker exec -it 9f73357be614 ls -l /volumecontainer_1 total 0 -rw-r--r--. 1 root root 0 Nov 2 14:33 test -rw-r--r--. 1 root root 0 Nov 2 14:42 test_centos_2
以上就是Docker容器數(shù)據(jù)卷介紹及操作示例的詳細(xì)內(nèi)容,更多關(guān)于Docker容器數(shù)據(jù)卷操作的資料請關(guān)注腳本之家其它相關(guān)文章!
- docker 啟動elasticsearch鏡像,掛載目錄后報錯的解決
- docker-修改容器掛載目錄的3種方法小結(jié)
- docker 查看容器的掛載目錄操作
- docker中容器數(shù)據(jù)卷volume介紹
- Docker容器中數(shù)據(jù)卷volumes的使用
- Docker容器數(shù)據(jù)卷技術(shù)介紹
- Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié)
- Docker容器數(shù)據(jù)卷的使用教程
- Docker中容器數(shù)據(jù)卷詳解
- docker如何對已經(jīng)啟動的容器添加目錄映射(掛載目錄)
- Docker數(shù)據(jù)卷和掛載目錄的使用
相關(guān)文章
Docker鏡像構(gòu)建之docker commit的使用
本文主要介紹了Docker鏡像構(gòu)建之docker commit的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04遠(yuǎn)程連接Docker上的Mysql失敗的分析與解決方案
這篇文章主要介紹了遠(yuǎn)程連接Docker上的Mysql失敗的分析與解決方案的相關(guān)資料,需要的朋友可以參考下2023-01-01利用寶塔面板和docker快速部署網(wǎng)站的基本流程
當(dāng)你有了一臺服務(wù)器,就會折騰往這臺服務(wù)器上部署各種好玩的網(wǎng)站,本文將以部署filebrowser舉例介紹網(wǎng)站部署的基本流程,感興趣的朋友一起看看吧2023-12-12對docker中的overlay式網(wǎng)絡(luò)詳解
這篇文章主要介紹了對docker中的overlay式網(wǎng)絡(luò)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11linux環(huán)境部署及docker安裝redis的方法
這篇文章主要介紹了linux環(huán)境部署及docker安裝redis的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08Docker實踐—CentOS7上部署Kubernetes詳解
kubernetes作為docker的管理工具是由Google開源提供,但是kubernetes的安裝一直折磨著運維人員,在這一系列的文章中我將會由kubernetes的安裝講起為大家介紹kubernetes的安裝使用等過程,也作為自己的學(xué)習(xí)筆記。2017-01-01