Docker之容器資料卷

2022-09-14 15:21:22 字數 4257 閱讀 1238

資料?如果資料都在容器中,那麼我們容器刪除,資料就會丟失!需求:資料可以持久化

mysql,容器刪除了,刪庫跑路!需求:mysql資料可以儲存在本地!

容器之間可以有乙個資料共享的技術!docker容器中產生的資料,同步到本地!

這就是卷技術!目錄的掛載,將我們容器內的目錄,掛載到linux上面!

目的:容器的持久化和同步操作,容器間可以資料共享

方式一:直接使用命令來掛載

-v, --volume list                    bind mount a volume

docker run -it -v 主機目錄:容器內目錄 -p 主機埠:容器內埠

➜ ~ docker run -it -v /home/ceshi:/home centos /bin/bash

#通過 docker inspect 容器id 檢視

測試檔案的同步

1、停止容器

2、宿主機修改檔案

3、啟動容器

4、容器內的資料依舊是同步的

5.容器刪掉,宿主機也還有資料

以後修改只需要在本地修改即可,容器內會自動同步!

mysql的資料持久化命令

# 執行容器,需要做資料掛載 #安裝啟動mysql,需要配置密碼的,這是要注意點!

# 參考官網hub

docker search mysql

# 拉取

docker pull mysql:5.7

# 掛載

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e mysql_root_password=123456 --name mysql01 mysql5.7

-d 後台執行

-p 埠對映

-v 卷掛載

-e 環境配置 安裝啟動mysql需要配置密碼

--name 容器名字

# 在本地測試建立乙個資料庫,檢視一下我們對映的路徑是否ok!

我們將容器刪除 ,發現,我們掛載到本地的資料卷依舊沒有丟失,這就實現了容器資料持久化功能。

# 匿名掛載

-v 容器內路徑!

docker run -d -p --name nginx01 -v /etc/nginx nginx

# 檢視所有的volume的情況

➜ ~ docker volume ls

driver volume name

local 9948f0d3d123c9d45c442ac7728cb85599c2657e50d

local

# 這裡發現,這種就是匿名掛載,我們在 -v只寫了容器內的路徑,沒有寫容器外的路勁!

# 具名掛載

➜ ~ docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx nginx

➜ ~ docker volume ls

driver volume name

local juming-nginx

# 通過 -v 卷名:容器內路徑

# 檢視一下這個卷

發現:所有的docker容器內的卷,沒有指定目錄的情況下都是在/var/lib/docker/volumes/***x/_data下

如果指定了目錄,docker volume ls 是檢視不到的。

# 三種掛載: 匿名掛載、具名掛載、指定路徑掛載

-v 容器內路徑 #匿名掛載

-v 卷名:容器內路徑 #具名掛載

-v /宿主機路徑:容器內路徑 #指定路徑掛載 docker volume ls 是檢視不到的

擴充套件:

# 通過 -v 容器內路徑: ro rw 改變讀寫許可權

ro #readonly 唯讀

rw #readwrite 可讀可寫

docker run -d -p --name nginx05 -v juming:/etc/nginx:ro nginx

docker run -d -p --name nginx05 -v juming:/etc/nginx:rw nginx

# ro 只要看到ro就說明這個路徑只能通過宿主機來操作,容器內部是無法操作!

dockerfile使用來構建docker映象的檔案

# 建立乙個dockerfile檔案,名字可以隨便 建議dockerfile

# 檔案中的內容 指令(大寫) 引數

from centos

volume ["volume01","volume02"]

cmd echo "----end----"

cmd /bin/bash

#這裡的每個命令,就是映象的一層!

yum install vim # 編輯檔案的,沒有裝一下
安裝完之後就可以執行這個命令了

多個mysql同步資料!

命名的容器掛載資料卷

# 測試,我們通過剛才啟動的

啟動docker01

docker run -it --name docker01 latteitcjz/centos:1.0 # 1.0必須寫
當前這個ctrl+p+q不停止退出

依次啟動docker02、docker03

docker run -it --name docker02 --volumes-from docker01 latteitcjz/centos:1.0
docker02繼承docker01的volumes

可以驗證,在docker01下加乙個資料,在docker02下也會出現

建立docker03,同樣繼承docker01

docker run -it --name docker03 --volumes-from docker01 latteit/centos:1.0
在docker03的volume01下建立檔案,在docker01的volume01下同樣也有

即通過–volumes-from 可以實現不同容器間的資料共享

刪除docker01,資料還在

docker rm -f
可以看到,刪除docker01,進入docker02,資料依然在

多個mysql實現資料共享

➜  ~ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e mysql_root_password=123456 --name mysql01 mysql:5.7

➜ ~ docker run -d -p 3307:3306 -e mysql_root_password=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

# 這個時候,可以實現兩個容器資料同步!

結論:

容器之間配置資訊的傳遞,資料卷容器的生命週期一直持續到沒有容器使用位置

但是如果持久化到了本地,即使所有容器刪除了,本地資料是不會刪除的

Docker 資料卷 資料卷容器

一,概念解析 1,資料卷 資料卷就是在宿主中可以在容器之間進行共享和重用的一系列和檔案和資料夾,通過docker run v命令可以將資料卷掛載到對應的容器目錄空間,進行檔案讀取,容器卷特性如下 資料卷可以在容器之間共享和重用,容器間傳遞資料將變得高效方便 對資料卷內資料的修改會立馬生效,無論是容器...

docker 容器資料卷

直接新增容器資料卷 docker run it v 宿主機絕對路經目錄 容器內目錄 映象名 新增許可權唯讀 docker run it v 宿主機絕對路經目錄 容器內目錄 ro 映象名 1.1dockerfile構建 docker 體系結構 保留字指令 from 基礎映象,當前是基於哪個映象 mai...

Docker資料卷容器

簡介 如果需要在容器之間共享一些持續更新的資料,可以用建立資料卷容器的方式,資料卷容器其實就是乙個普通容器,專門用它提供資料卷供其它容器掛載 例 sudo socker run it v dbdata name dbdata centos zdx bin bash 建立了乙個名為dbdata的容器將...