小知識 docker 四種資料儲存方式

2021-09-24 14:58:18 字數 4469 閱讀 9007

預設方式,容器本身管理自己的資料,容器檔案系統實際是一系列唯讀的檔案層和最上層的容器可寫檔案層組成,最上層的容器可寫檔案層保留容器執行過程中產生的所有資料修改,這些層的管理是利用容器的storage drivers實現(預設是overlay2,可以通過docker的dameon.json配置檔案修改),對容器內部檔案系統是透明的。

由於容器在檔案系統之上又封裝了一層storage drivers,效能比不上bind或volumes,不建議生產環境使用。

簡單理解,volumes是由docker建立和管理,存放在主機檔案系統的某個目錄,linux下面就在/var/lib/docker/volumes/.

要點:

直接將主機的目錄掛載到容器內部,容器內部的操作會影響宿主機的檔案,docker無法管理,依賴主機檔案系統管理。

要點:

直接將資料臨時存放在主機記憶體中,在容器執行期間有效,容器停止執行或刪除,資料丟失,適用於存放非持久化的狀態或者敏感資訊,因資料安全考慮或者提供更高的效能使用。tmpfs資料不支援在多個容器間共享。

docker volume create    // 手工建立volume

docker volume inspect // 檢視已建立volume詳細資訊

docker volume ls // 檢視docker中已建立的volumes列表

docker volume prune // 刪除所有未使用的本地volumes,遠端的無法刪除

docker volume rm // 刪除指定的volume

# docker volume create my-vol    // 建立my-vol

# docker volume ls | grep my-vol // 檢視是否建立成功

# docker inspect my-vol // 檢視my-vol元資料資訊,可以看到mountpoint指出在本機的檔案目錄

# cd /var/lib/docker/volumes/ // docker管理的volumes本機目錄

# ls | grep my-vol // docker在本機建立my-vol目錄和_data子目錄

# docker volume rm my-vol //刪除

-v ::  // 其中options是選項,唯讀ro

--mount 'type=volume|bind|tmpfs,src=,dst=' // src或source,dst或target或destination

// docker service 不支援-v或--volume語法

// 使用volume啟動乙個服務

# docker service create \

--mount 'type=volume,src=,dst=,volume-driver=local,volume -opt=type=nfs,volume-opt=device=:,"volume-opt=o=addr=,vers=4,soft,timeo=180,bg,tcp,rw"'

--name myservice \

// docker run支援-v或--mount

// 使用volume啟動乙個容器

// 使用容器的目錄內容自動填充空volume

# docker run -d --name=nginxtest --mount source=nginx-vol,destination=/usr/share/nginx/html nginx:latest

# docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html nginx:latest

// 唯讀方式掛載

# docker run -d --name=nginxtest --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly nginx:latest

# docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html:ro nginx:latest

// 共享儲存,以上都是掛載本機的卷

// 使用不同的volume driver提供共享儲存,例如nfs,s3

// 安裝sshfs volume driver

# docker plugin install --grant-all-permissions vieux/sshfs

// 建立sshfs volume,提供ssh密碼

# docker volume create --driver vieux/sshfs -o sshcmd=test@node2:/home/test -o password=testpassword sshvolume

// 建立服務使用nfs volume

// nfsv3

# docker service create -d --name nfs-service \

nginx:latest

// nfsv4

# docker service create -d \

--name nfs-service \

nginx:latest

// 備份乙個容器的資料

// 啟動新容器,備份其它容器的資料目錄/dbdata

# docker run --rm --volumes-from dbstore_container -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

// 恢復資料

# docker run -v /dbdata --name dbstore2 ubuntu /bin/bash

# docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

// 匿名volume刪除,--rm會在容器刪除時,自動刪除匿名volume /foo

# docker run --rm -v /foo -v awesome:/bar busybox top

# docker volume prune // 刪除未使用的所有volume

同樣支援-v和–mount兩種方式。

// 啟動容器,掛載本機目錄$(

pwd)

/target

// --mount方式

# docker run -d \

-it \

--name devtest \

--mount type=bind,source=

"$(pwd

) nginx:latest

// -v方式掛載

# docker run -d \

-it \

--name devtest \

-v "$(

pwd)

nginx:latest

// 唯讀選項

# docker run -d \

-it \

--name devtest \

--mount type=bind,source=

"$(pwd

) nginx:latest

# docker run -d \

-it \

--name devtest \

-v "$(

pwd)

nginx:latest

–tmpfs不支援任何配置選項,不支援docker swarm services, --mount支援所有;

// 以下兩條命令等價

# docker run -d \

-it \

--name tmptest \

nginx:latest

# docker run -d \

-it \

--name tmptest \

nginx:latest

// --mount支援選項

// tmpfs-size:大小,預設無限

// tmpfs-mode:檔案許可權模式,預設是1777

# docker run -d \

-it \

--name tmptest \

nginx:latest

docker四種模式

1 host模式 眾所周知,docker使用了linux的namespaces技術來進行資源隔離,如pid namespace隔離程序,mount namespace隔離檔案系統,network namespace隔離網路等。乙個network namespace提供了乙份獨立的網路環境,包括網絡卡...

Docker 四種網路模式

我們在使用docker run建立docker容器時,可以用 net選項指定容器的網路模式,docker有以下4種網路模式 host模式,使用 net host指定。container模式,使用 net container name or id指定。none模式,使用 net none指定。brid...

發現微軟有四種資料庫

微軟的資料庫平台,我在大學時只是耳聞,並沒有真正地用過。聽說過 office 裡的幾大件,最常用的是 word excel powerpoint,而接下來的就是資料庫 access。曾在工作中用過一次,發現它的 sql 語言支援沒有 sql server 好用,因此後來就基本沒用過。然後工作以後,接...