Docker 數(shù)據(jù)卷

2018-09-23 18:21 更新

數(shù)據(jù)卷是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

  • 數(shù)據(jù)卷可以在容器之間共享和重用
  • 對(duì)數(shù)據(jù)卷的修改會(huì)立馬生效
  • 對(duì)數(shù)據(jù)卷的更新,不會(huì)影響鏡像
  • 卷會(huì)一直存在,直到?jīng)]有容器使用

*數(shù)據(jù)卷的使用,類似于 Linux 下對(duì)目錄或文件進(jìn)行 mount。

創(chuàng)建一個(gè)數(shù)據(jù)卷

在用 docker run 命令的時(shí)候,使用 -v 標(biāo)記來創(chuàng)建一個(gè)數(shù)據(jù)卷并掛載到容器里。在一次 run 中多次使用可以掛載多個(gè)數(shù)據(jù)卷。

下面創(chuàng)建一個(gè) web 容器,并加載一個(gè)數(shù)據(jù)卷到容器的 /webapp 目錄。

$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py

*注意:也可以在 Dockerfile 中使用 VOLUME 來添加一個(gè)或者多個(gè)新的卷到由該鏡像創(chuàng)建的任意容器。

掛載一個(gè)主機(jī)目錄作為數(shù)據(jù)卷

使用 -v 標(biāo)記也可以指定掛載一個(gè)本地主機(jī)的目錄到容器中去。

$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

上面的命令加載主機(jī)的 /src/webapp 目錄到容器的 /opt/webapp 目錄。這個(gè)功能在進(jìn)行測試的時(shí)候十分方便,比如用戶可以放置一些程序到本地目錄中,來查看容器是否正常工作。本地目錄的路徑必須是絕對(duì)路徑,如果目錄不存在 Docker 會(huì)自動(dòng)為你創(chuàng)建它。

*注意:Dockerfile 中不支持這種用法,這是因?yàn)?Dockerfile 是為了移植和分享用的。然而,不同操作系統(tǒng)的路徑格式不一樣,所以目前還不能支持。

Docker 掛載數(shù)據(jù)卷的默認(rèn)權(quán)限是讀寫,用戶也可以通過 :ro 指定為只讀。

$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro
training/webapp python app.py

加了 :ro 之后,就掛載為只讀了。

掛載一個(gè)本地主機(jī)文件作為數(shù)據(jù)卷

-v 標(biāo)記也可以從主機(jī)掛載單個(gè)文件到容器中

$ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

這樣就可以記錄在容器輸入過的命令了。

*注意:如果直接掛載一個(gè)文件,很多文件編輯工具,包括 vi 或者 sed --in-place,可能會(huì)造成文件 inode 的改變,從 Docker 1.1 .0起,這會(huì)導(dǎo)致報(bào)錯(cuò)誤信息。所以最簡單的辦法就直接掛載文件的父目錄。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)