搜尋
首頁運維Docker最詳細的整理docker資料卷教程

本篇文章為大家帶來了關於docker中資料卷的相關知識,資料卷可以在容器之間共享或重用數據,資料卷中的變更不會包含在映像的更新中,希望對大家有幫助。

最詳細的整理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資料卷教程

基本使用

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中文網其他相關文章!

陳述
本文轉載於:掘金。如有侵權,請聯絡admin@php.cn刪除
Docker在行動:現實世界中的示例和用例Docker在行動:現實世界中的示例和用例Apr 24, 2025 am 12:10 AM

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

Docker vs. Kubernetes:用例和方案Docker vs. Kubernetes:用例和方案Apr 23, 2025 am 12:11 AM

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

Linux上的Docker:Linux系統的容器化Linux上的Docker:Linux系統的容器化Apr 22, 2025 am 12:03 AM

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:編排者Docker:容器化工具,Kubernetes:編排者Apr 21, 2025 am 12:01 AM

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

Docker的目的:簡化應用程序部署Docker的目的:簡化應用程序部署Apr 20, 2025 am 12:09 AM

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

Linux和Docker:不同Linux發行版的DockerLinux和Docker:不同Linux發行版的DockerApr 19, 2025 am 12:10 AM

在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

掌握Docker:Linux用戶指南掌握Docker:Linux用戶指南Apr 18, 2025 am 12:08 AM

在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

Linux上的Docker:應用和用例Linux上的Docker:應用和用例Apr 17, 2025 am 12:10 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

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