1. 程式人生 > >docker學習——docker的volumes

docker學習——docker的volumes

目錄

什麼是volume

volume(卷)用來儲存docker持久化的資料,其實就是一個主機上的一個目錄,由docker統一管理,我們知道image是隻讀的,在image執行時,才會加入可寫層,雖然我們也可以將資料寫入到可寫層,但這會增加容器的大小,如果我們不想持久化資料,又不想將資料暫存在docker的可寫層,可以考慮使用 tmpfs mount(以後在總結),我對volume的理解就是將主機上的一個檔案對映到容器當中的某個檔案,容器向其中寫入資料就相當於向主機中對應的檔案寫入資料,官方有一幅圖描述tmpfs mount與volume的不同:

volumes on the Docker host

匿名卷與實名卷

匿名卷即沒有顯示指定名字的卷,實名卷具有名字,兩種卷均儲存在/var/lib/docker/volumes/區域,匿名卷的目錄名是一串數字,如果在建立容器是添加了-rm引數,則匿名卷會隨著容器的刪除而刪除,其實匿名卷和實名卷基本可以看成是一個東西,只是匿名卷名字由docker隨機命名,並且可以隨容器的銷燬而銷燬而已

如何建立volume

有兩種方式:
#用於為單一容器建立資料卷
docker run -v.....

#用於為叢集服務建立資料卷
docker run -mount.....

高於17.06的docker可以將--mount用於為單一容器建立資料卷,兩者的差別如下:

1、-v或是-volume包括三個區域,以分號分割

  • 第一個區域用於定義卷的名稱,如果不指定,表明使用匿名卷,實名卷的名稱在一臺主機上唯一
  • 第二個區域指定卷對應容器中的哪個檔案
  • 第三個區域是可選的,是用逗號分割的選項列表

2、-mount使用鍵值對<key>=<value>,以逗號分割,對應的值如下

  • type:可以是bind、volume、tmpfs,建立資料卷使用volume
  • source:掛載點的名字,對於實名卷,為實名卷的名字,匿名卷不需要使用這個關鍵字
  • destination:指定卷對應容器中的哪個檔案
  • readonly:指定資料卷只可讀
  • volume-opt:可以出現多次,其值為一個鍵值對(有什麼用我還不知道)

如果volume-opt中關鍵字對應的值出現volume-opt,需要讓docker識別出這個volume-opt是一個值,如何做?

-mount引數的值用單引號包含起來,將關鍵字對應值中出現的volume-opt用雙引號括起來,如下:

$ docker service create \
     --mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"'
    --name myservice \
    <IMAGE>

-v與-mount的區別

-mount可以支援建立叢集服務的資料卷,而-v不行,其餘基本沒差

資料卷的幾種用法

接下來文件介紹了資料卷的幾種用法,在這裡總結下,方便以後查閱

1、建立、檢視、刪除資料卷:

可以在沒有任何容器的前提下建立資料卷

建立實名資料卷
docker volume create my-vol

建立匿名卷
docker volume create

檢視資料卷列表
docker volume ls

檢視具體的資料卷
docker volume inspect my-vol

刪除資料卷
docker volume rm my-vol 

2、在建立容器時指定資料卷

#使用-mount建立實名卷
$ docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

#使用-v建立實名卷
$ docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest

3、在建立叢集服務時指定資料卷

$ docker service create -d \
  --replicas=4 \
  --name devtest-service \
  --mount source=myvol2,target=/app \
  nginx:latest

4、填充資料卷

如果容器中用於對映的檔案或目錄不為空,則其中的資料或是檔案會拷貝到資料卷中

5、使用只讀資料卷

多個容器可以掛載在同一個資料捲上,我們可以設定某個容器對資料卷只有讀許可權,設定方式如下:

#ro表示只讀(readonly)
$ docker run -d \
  --name=nginxtest \
  -v nginx-vol:/usr/share/nginx/html:ro \
  nginx:latest

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

6、在多臺機器上共享一個數據卷

文件原文如下:

總結一下:

1、在應用程式中新增程式碼邏輯,從雲端儲存上讀寫資料

2、使用支援寫資料到雲端儲存的volume驅動,並使用該驅動建立資料卷(至於資料卷驅動是啥,以後用到再說)

7、下載資料卷驅動以及使用資料卷驅動建立資料卷

#下載vieux/sshfs驅動
$ docker plugin install --grant-all-permissions vieux/sshfs

#使用特定的驅動建立資料卷(-driver)
$ docker volume create --driver vieux/sshfs \
  -o [email protected]:/home/test \
  -o password=testpassword \
  sshvolume

#建立容器時使用特定驅動建立資料卷(-volume-driver)
$ docker run -d \
  --name sshfs-container \
  --volume-driver vieux/sshfs \
  --mount src=sshvolume,target=/app,[email protected]:/home/test,volume-opt=password=testpassword \
  nginx:latest

8、移除資料卷(與之前的部分有重複)

(1)移除匿名卷

#-rm:刪除容器時會刪除容器對應的匿名卷,拿下面的例子來說,刪除busybox容器時,會刪除/foo對應的匿名卷,但是不會刪除awesome
$ docker run --rm -v /foo -v awesome:/bar busybox top

(2)根據名字移除卷

docker volume rm awesome

(3)移除所有資料卷

$ docker volume prune

docker規定,沒有容器正在使用資料卷後才允許刪除該資料卷

9、其他

volume-from可以從另一個容器當中掛載容器中已經建立好的資料卷

相關推薦

docker 學習筆記

名稱 ted lte settings 刪除 學習 pat doc mem   1.查詢dockers 某個容器的ip地址。 [[email protected]/* */ ~]# docker inspect --format=‘{{.NetworkSett

docker學習(3)--Dockfile詳解

基於 環境 設置 多個 詳解 連接 當前 true truct   轉載請註明出處:http://www.cnblogs.com/lighten/p/6900556.html 1.基本說明   Dockfile是一個用於編寫docker鏡像生成過程的文件,其有特定的語法。在

docker學習筆記

不一致 規模 操作 崩潰 快速 新的 內存 並發 發熱 一:docker理解 docker的通俗化定義:docker相當於一個容器,你可以把任何程序放到docker中。 它是一個軟件容器化平臺。 二:docker思想 集裝箱:如果只是單純地把項目

Docker 學習

com mage png img image nbsp alt logs 學習 Docker學習 Docker 學習

docker--學習筆記最後附dockerfile--nginx實例

docker一、docker簡介1、Docker優勢(1)、啟動速度快,秒級實現(2)、資源利用率高,一臺機器可以跑上千個docker容器(3)、更快的交付和部署,一次創建也配置後,可以再任意地方運行(4)、內核級別的虛擬化,不需要額外的hypervisor支持。會有更高的性能和效率(5)、易遷移,平臺依賴性

docker學習(二) 基本命令

學習 logs restart docker ui oca nbsp 存在 端口 src 1.查看docker 鏡像 docker images 2.拉取鏡像 docker pull xxx xxx 為鏡像名稱 3.刪除鏡像 docker rmi xxx

Docker 學習筆記之 核心概念

api rest api 核心概念 log 筆記 try nbsp .com ont Docker核心概念: Docker Daemon Docker Container Docker Registry Docker Client 通過rest API 和Docker

docker學習筆記(五)——Docker常用命令總結

docker學習筆記 docker常用命令總結 1. 開啟/停止/重啟container(start/stop/restart)容器可以通過run新建一個來運行,也可以重新start已經停止的container,但start不能夠再指定容器啟動時運行的指令,因為docker只能有一個前臺進程。容器st

Docker學習筆記——私有倉庫部署

docker registry https1、系統環境:CentOS 7.3 172.16.0.44 registry 已安裝docker 172.16.0.45 client 已安裝docker2、未加密倉庫部署 下載registry鏡像 docker pull registry

Docker學習筆記——運行nginx容器

nginx docker dockerfile 1、通過Docker hub或者私有倉庫pull nginx鏡像拉取鏡像docker pull nginx或者docker pull registry.abc.com:5000/nginx:zx創建nginx容器運行項目目錄mkdir -p /opt

docker學習筆記-安裝

centos 7 root用戶 linux 點擊 add target github com ogr 安裝docker Ubuntu Docker 安裝 Docker 支持以下的 Ubuntu 版本: Ubuntu Precise 12.04 (LTS) Ubunt

Docker學習筆記——Java及Tomcat Dockerfile

java tomcat dockerfile 1、Java Dockerfile創建項目目錄java,目錄下上傳所需java版本壓縮包,並創建Dockerfile文件,項目結構如下:java -Dockerfile -jdk-8u111-linux-x64.gzDockerfile內容:#

win10系統docker學習(一)——docker安裝

tle png 問題: 方案 start htm 完成後 系統 mage windows系統中目前有兩種安裝docker的方式,分別為boot2docker和docker toolbox。按照官方說明和實際安裝過程來講,推薦使用docker toolbox方

Docker學習筆記-- 如何使用Dockerfile構建鏡像

學習筆記 docker 如何使用 Dockerfile是一種被Docker程序解釋的腳本,Dockerfile由一條一條的指令組成,每條指令對應Linux下面的一條命令。Docker程序將這些Dockerfile指令翻譯真正的Linux命令。Dockerfile有自己書寫格式和支持的命令,Dock

Docker學習筆記 之 Docker安裝配置使用

容器 dcoker 簡介Docker是一個開源的引擎,可以輕松的為任何應用創建一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集群和其他的基礎應用平臺。環境:CentOS7.3地址:1

Win10下Docker學習(1)安裝

ner table 組成 高效率 down 提高 打開 cpu 其他人 Docker簡介 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,

docker 學習(2)

ins -s line 分配 table date world color not found docker容器中安裝vim ubuntu 中默認未裝vim,docker run ubuntu vim 出現: container_linux.go:247: starting

Docker學習系列(一):windows下安裝docker

阻止 statistic pro nta 雙擊 copyright ner notebook 現在 本文目錄如下: windows按照docker的基本要求 具體安裝步驟 開始使用 安裝遠程連接工具連接docker 安裝中遇到的問題 Docker的更新 Dock

Docker學習Docker容器基本使用

rest 刪除 圖片 -c 容器 run bcd user git Docker學習之Docker容器基本使用 新建容器並啟動 命令格式:docker run --options repository:tag 後臺運行 命令格式:-d 已存在的容器相關操作 啟動:docke

Docker學習(1)安裝

www. ati https 機制 生產環境 開機啟動 works tab 流行 1. Docker簡介 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全