Docker學習之數據管理

Docker 數據管理html

如何在 Docker 內部以及容器之間管理數據,在容器中管理數據主要有兩種方式:nginx

  • 數據卷(Volumes)web

  • 掛載主機目錄 (Bind mounts)docker


數據卷 ubuntu

是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,能夠提供不少有用的特性:bash

  • 數據卷 能夠在容器之間共享和重用curl

  • 對 數據卷 的修改會立馬生效ide

  • 對 數據卷 的更新,不會影響鏡像測試

  • 數據卷 默認會一直存在,即便容器被刪除url


注意:數據卷的使用,相似於 Linux 下對目錄或文件進行 mount,鏡像中的被指定爲掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的數據卷。


建立一個數據卷

# docker volume create my-vol

my-vol


查看全部的數據卷

# docker volume ls

DRIVER     VOLUME NAME

local               my-vol


查看指定數據卷的信息

# docker volume inspect my-vol

[
{
"CreatedAt": "2018-05-16T11:17:19+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]


啓動一個掛載數據卷的容器

Docker 新用戶推薦使用 --mount 參數,將數據卷掛載到容器裏。在一次docker run 中能夠掛載多個數據卷。

# docker run -d -p 8080:80 --name web --mount source=my-vol,target=/usr/share/nginx/html nginx

把宿主機本地my-vol數據卷掛載到nginx容器的默認目錄;

[root@localhost _data]# pwd

/var/lib/docker/volumes/my-vol/_data

[root@localhost _data]# ls -l

-rw-r--r-- 1 root root 39 May 16 11:24 index.html


使用curl測試,訪問到的內容是本地文件;

# curl http://localhost:8080

<html>

<h1>Docker is fun!</h1>

</html>


查看數據卷的具體信息

# docker inspect web

數據卷的信息在Mounts這一段

"Mounts": [
{
"Type": "volume",
"Name": "my-vol",
"Source": "/var/lib/docker/volumes/my-vol/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""


刪除數據卷

# docker volume rm my-vol

數據卷是被設計用來持久化數據的,它的生命週期獨立於容器,Docker 不會在容器被刪除後自動刪除數據卷,而且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的 數據卷。

若是須要在刪除容器的同時移除數據卷。能夠在刪除容器的時候使用 docker rm -v 這個命令。


清理無主的數據卷命令

# docker volume prune



監聽主機目錄

掛載一個主機目錄做爲數據卷

# docker run -d -p 8080:80 --name nginx-web --mount type=bind,source=/usr/local/src,target=/opt,readonly nginx

加載宿主機的/usr/local/src 目錄到容器的/opt目錄,readonly只讀掛載。

本地目錄必須是絕對路徑而且目錄要存在,不然會報錯bind source path does not exist

在容器內創建文件會提示只讀系統。

# docker exec -it afa bash

root@afa7bbf270ce:/opt# touch abc

touch: cannot touch 'abc': Read-only file system


查看數據卷的具體信息

# docker inspect nginx-web

"Mounts": [
{
"Type": "bind",
"Source": "/usr/local/src",
"Destination": "/opt",
"Mode": "",
"RW": false,
"Propagation": "rprivate"
}


掛載一個本地主機文件做爲數據卷

# docker run --rm -it --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history ubuntu:16.04 bash

root@9a22d85fba61:/# whoami

root

root@9a22d85fba61:/# pwd

/

root@9a22d85fba61:/# exit

exit


把本地.bash_history文件掛載到容器裏,就能夠記錄在容器輸入過的命令

[root@localhost volumes]# cat /root/.bash_history

whoami

pwd

exit

相關文章
相關標籤/搜索