本篇文章為大家帶來了關於docker中資料卷的相關知識,資料卷可以在容器之間共享或重用數據,資料卷中的變更不會包含在映像的更新中,希望對大家有幫助。
推薦學習:《docker影片教學》
什麼是資料卷
使用docker容器的時候,會產生一系列的資料文件,這些資料檔案在刪除docker容器時是會消失的,但是其中產生的部分內容是希望能夠把它給保存起來另作用途的,Docker將應用與運行環境打包成容器發布,程式設計師希望在運行過程鐘產生的部分資料是可以持久化的,而且容器之間我們希望能夠實現資料共享。
一般來說,docker容器資料卷可以看成常用的u盤,它存在於一個或多個的容器中,由docker掛載到容器,但不屬於聯合檔案系統,Docker不會在容器刪除時刪除其掛載的資料卷。
資料卷的特點
資料卷可以在容器之間共用或重複使用資料
資料卷中的變更可以立即生效
資料卷中的變更不會包含在鏡像的更新中
資料卷預設會一直存在,即使容器被刪除
資料卷的生命週期一直持續到沒有容器使用它為止
容器中的管理資料
資料磁碟區:Data Volumes 容器內資料直接對應到本機主機環境
資料磁碟區容器:Data Volume Containers 使用特定容器維護資料磁碟區
#docker常用指令cp
語法
宿主機檔案複製到容器內
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
容器內檔案複製到宿主機
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
常用參數
-L :保持來源目標中的連結
基本上使用
宿主機檔案複製到容器內
docker cp /data/index.html nginx:/usr/share/nginx/html/index.html
容器內檔案複製到宿主機
docker cp nginx:/etc/nginx/nginx.conf /data
docker資料磁碟區
資料磁碟區(Data Volumes)是一個可供一個或多個容器使用的特殊目錄,它將主機作業系統目錄直接對應進容器。
資料卷注意事項
掛載資料卷,最好是透過run而非create/start建立啟動容器,create/start指令建立啟動容器後,再掛載資料卷相當麻煩,要修改很多設定文件,但並非不可以。
docker官網建議盡量進行目錄掛載,不要進行檔案掛載
資料卷類型
宿主機資料卷:直接在宿主機的檔案系統中但是容器可以存取(bind mount)
命名的資料卷:磁碟上Docker管理的資料卷,但是這個磁碟區有個名字。
匿名資料卷:磁碟上Docker管理的資料卷,因為沒有名字想要找到不容易,Docker來管理這些檔案。
宿主機資料卷
bind mounts:容器內的資料被存放到宿主機檔案系統的任意位置,甚至存放到一些重要的系統目錄或文件中。除了docker之外的進程也可以任意對他們進行修改。
當使用bind mounts時,宿主機的目錄或檔案被掛載到容器中。容器將依照掛載目錄或檔案的絕對路徑 來使用或修改宿主機的資料。宿主機中的目錄或檔案不需要預先存在,在需要的使用會自動建立。
使用bind mounts在效能上是非常好的,但這依賴宿主機有一個目錄妥善結構化的檔案系統。
使用bind mounts的容器可以在透過容器內部的進程對主機檔案系統進行修改,包括創建,修改和刪除重要的系統檔案和目錄,這個功能雖然很強大,但顯然也會造成安全方面的影響,包括影響到宿主機上Docker以外的程序
注意事項
如果掛載一個空的資料捲到容器中的一個非空目錄中,那麼這個目錄下的檔案會被複製到資料卷中
如果掛載一個非空的資料捲到容器中的一個目錄中,那麼容器中的目錄會顯示資料卷中的資料。如果原來容器中的目錄有數據,那麼原始資料會被隱藏掉
基本上使用
#語法
docker run -v /宿主机绝对路径目录:/容器内目录 镜像名
基本上使用
docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql mysql:5.7.31 --character-set-server=utf8 --collation-server=utf8_general_ci
容器目錄權限
透過-v 容器內路徑: ro rw 改變讀寫權限ro:readonly 只讀
rw:readwrite 可讀可寫
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 映像名
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:rw 映像名
例如:
docker run -d -P --name nginx05 -v nginx1:/etc/nginx:ro nginx docker run -d -P --name nginx05 -v nginx2:/etc/nginx:rw nginx
ro 只要看到ro就表示這個路徑只能透過宿主機來操作,容器內部是無法操作!
命名的資料卷
#基本上使用
docker run -itd --name nginx -p 80:80 -v lagouedu-nginx:/etc/nginx nginx:1.19.3-
alpine
查看docker資料卷docker volume ls
##查看lagouedu-nginx宿主機目錄docker volume inspect lagouedu-nginx進入docker資料卷預設目錄
cd /var/lib/docker/volumes/lagouedu-nginx檢視檔案ls所有的檔案docker預設儲存在_data目錄中cd _data
##刪除容器
docker rm $(docker stop $(docker ps -aq))
查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在
ls
匿名数据卷
基本使用
docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx:1.19.3-alpine 查看docker数据卷 docker volume ls
查看宿主机目录
docker volume inspect dbd07daa4e40148b11....
进入docker数据卷默认目录
cd /var/lib/docker/volumes/dbd07daa4e40148b11....
查看文件
ls
所有的文件docker默认保存在_data目录中 cd _data
删除容器
docker rm $(docker stop $(docker ps -aq))
查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在
ls
数据卷容器
run命令
常用参数
--volumes-from
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器
也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
发现创建好的数据卷容器是处于停止运行的状态,因为使用 —volumes-from 参数所挂载数据卷的容器 自己并不需要保持在运行状态。
基本使用
docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003 docker run -itd --name nginx01 -p 80:80 --volumes-from data-volume nginx:1.19.3- alpine echo "nginx" > /data/nginx/index.html http://192.168.198.100 docker run -itd --name nginx02 -p 81:80 --volumes-from data-volume nginx:1.19.3- alpine http://192.168.198.100:81 docker run -itd --name mysql01 --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci docker run -itd --name mysql02 --restart always --privileged=true -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci
推荐学习:《docker视频教程》
以上是最詳細的整理docker資料卷教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Docker在實際項目中的應用場景包括簡化部署、管理多容器應用和性能優化。 1.Docker簡化了應用部署,如使用Dockerfile部署Node.js應用。 2.DockerCompose管理多容器應用,如微服務架構中的Web和數據庫服務。 3.性能優化使用多階段構建減小鏡像大小,並通過健康檢查監控容器狀態。

在小型項目或開發環境中選擇Docker,在大型項目或生產環境中選擇Kubernetes。 1.Docker適合快速迭代和測試,2.Kubernetes提供強大的容器編排能力,適合管理和擴展大型應用。

Docker在Linux上重要,因為Linux是其原生平台,提供了豐富的工具和社區支持。 1.安裝Docker:使用sudoapt-getupdate和sudoapt-getinstalldocker-cedocker-ce-clicontainerd.io。 2.創建和管理容器:使用dockerrun命令,如dockerrun-d--namemynginx-p80:80nginx。 3.編寫Dockerfile:優化鏡像大小,使用多階段構建。 4.優化和調試:使用dockerlogs和dockerex

Docker是容器化工具,Kubernetes是容器編排工具。 1.Docker打包應用及其依賴成容器,可在任何支持Docker的環境中運行。 2.Kubernetes管理這些容器,實現自動化部署、擴展和管理,使應用高效運行。

Docker的目的是簡化應用部署,通過容器化技術確保應用在不同環境中一致運行。 1)Docker通過將應用和依賴打包到容器中,解決了環境差異問題。 2)使用Dockerfile創建鏡像,確保應用在任何地方一致運行。 3)Docker的工作原理基於鏡像和容器,利用Linux內核的命名空間和控制組實現隔離和資源管理。 4)基本用法包括從DockerHub拉取並運行鏡像,高級用法涉及使用DockerCompose管理多容器應用。 5)常見錯誤如鏡像構建失敗和容器無法啟動,可通過日誌和網絡配置調試。 6)性能優化建

在Ubuntu、CentOS和Debian上安裝和使用Docker的方法各有不同。 1)Ubuntu:使用apt包管理器,命令為sudoapt-getupdate&&sudoapt-getinstalldocker.io。 2)CentOS:使用yum包管理器,需添加Docker倉庫,命令為sudoyuminstall-yyum-utils&&sudoyum-config-manager--add-repohttps://download.docker.com/lin

在Linux上使用Docker可以提高開發效率和簡化應用部署。 1)拉取Ubuntu鏡像:dockerpullubuntu。 2)運行Ubuntu容器:dockerrun-itubuntu/bin/bash。 3)創建包含nginx的Dockerfile:FROMubuntu;RUNapt-getupdate&&apt-getinstall-ynginx;EXPOSE80。4)構建鏡像:dockerbuild-tmy-nginx.。 5)運行容器:dockerrun-d-p8080:80

Docker在Linux上可以簡化應用部署和管理。 1)Docker是容器化平台,將應用及其依賴打包進輕量、可移植容器。 2)在Linux上,Docker利用cgroups和namespaces實現容器隔離和資源管理。 3)基本用法包括拉取鏡像和運行容器,高級用法如DockerCompose可定義多容器應用。 4)調試常用dockerlogs和dockerexec命令。 5)性能優化可通過多階段構建減小鏡像大小,保持Dockerfile簡潔是最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),