最詳細的整理docker資料卷教學

2022-02-23 19:01:02
本篇文章給大家帶來了關於中資料卷的相關知識,資料卷可以在容器之間共用或重用資料,資料卷中的更改不會包含在映象的更新中,希望對大家有幫助。

推薦學習:《》

什麼是資料卷

使用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 引數所掛載資料卷的容器 自己並不需要保持在執行狀態。

01.png

基本使用

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資料卷教學的詳細內容,更多請關注TW511.COM其它相關文章!