docker volume數(shù)據(jù)卷

1.創(chuàng)建volume

  • Docker 1.9之后引入新的子命令,docker volume,可以對volume進行創(chuàng)建、查看和刪除。
$ sudo docker volume create --name vol_simple
  • 使用docker run或docker create創(chuàng)建容器時,也可以使用-v標簽為容器添加volume。
$ sudo docker run -d -v /data ubuntu
  • 以下命令創(chuàng)建制定名字volume,并掛載到容器中到/data目錄下
$ sudo docker run -d -v vol_simple: /data ubuntu
  • 使用docker volume inspect查看volume到信息
$ sudo docker volume inspect vol_simple

2.掛載volume

  • 使用如下命令創(chuàng)建并掛載volume
$ sudo docker volume create --name vol
$ sudo docker run -d -v vol: /data ubuntu
  • 將宿主機上到目錄掛載到容器中,文件夾必須使用絕對路徑,如果宿主機中不存在/host/dir,將創(chuàng)建一個空文件夾。如果鏡像中原本存在/container/dir文件夾,該文件夾下原有到內(nèi)容將被隱藏,以保持與宿主機中到文件夾一致。(以主機內(nèi)容為主)
$ sudo docker run -v /host/dir:/container/dir ubuntu
  • 掛載單個文件,文件必須使用絕對路徑,文件不存在/host/file,則創(chuàng)建一個同名空目錄。掛載后文件內(nèi)容與宿主機到文件一致,也就是說如果容器中原本存在/container/file,該文件將被隱藏。(以主機內(nèi)容為主)
$ sudo docker run -it -v /host/file:/container/file ubuntu
  • 主機到文件或文件夾作為volume掛載時,可以使用:ro指定volume為只讀,z和Z指定為是否共享,默認為z,即共享該volume
$ sudo docker run -it -v /host/dir:/container/dir:ro

3.使用Dockerfile添加volume

1.使用VOLUME指令向容器添加volume,如果鏡像中存在/data文件夾,這個文件夾中到內(nèi)容將全部復制到宿主機對應到文件夾下。(以容器內(nèi)容為主)
VOLUME /data

使用VOLUME可以添加多個volume:VOLUME ["/data1","/data2"].

2.需要注意到是,在Dockerfile中使用VOLUME指令之后到代碼,如果嘗試對這個volume進行修改,這些修改都不會生效。例如:
FROM ubuntu
RUN useradd foo
VOLUME /data
RUN touch /data/file #不生效
RUN chown -R foo:foo /data #不生效

正確為:

#改變對volume文件夾修改對順序
FROM ubuntu
RUN useradd foo
RUN mkdir /data && touch /data/file && chown -R foo:foo /data 
VOLUME /data

或者

# 將修改操作放到CMD或者ENTRYPOINT指令中
FROM ubuntu
RUN useradd foo
VOLUME /data
CMD  touch /data/file && chown -R foo:foo /data 

4.共享volume

  • 在docker run或者docker create創(chuàng)建容器時,可以使用--volumes-from標簽使得容器與已有的容器共享volume。
$ sudo docker run --rm -it --volumes-from vol_simple ubuntu
  • 如果一些數(shù)據(jù),比如配置文件、數(shù)據(jù)文件等,要在多個容器之間共享,一種常見的做法時創(chuàng)建一個數(shù)據(jù)容器,其他容器與之共享volume。
    如下:首先創(chuàng)建一個掛載了volume的數(shù)據(jù)容器vol_data,該容器僅僅輸出一條提示后就停止運行以避免浪費資源;接下來的兩個容器與這個數(shù)據(jù)容器共享這個volume;如此就將需要共享數(shù)據(jù)的容器進行較好的解耦。
$ sudo docker run --name vol_data -v /data ubuntu echo "data-only"
$ sudo docker run -it --name vol_share1 --volumes-from vol_data ubuntu
$ sudo docker run -it --name vol_share2 --volumes-from vol_data ubuntu

5.刪除volume

  • docker volume rm <volume_name>
  • docker rm -v <container_name>
  • 在運行容器時使用docker run --rm,--rm標簽會在容器停止運行時刪除容器以及容器所掛載的volume
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,751評論 0 120
  • https://deepzz.com/post/the-docker-volumes-basic.htmlDesc...
    deepzz閱讀 5,179評論 0 2
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統(tǒng)的并且容器的端口非本地主機是訪問不到的。此外,除了...
    R_X閱讀 1,961評論 0 7
  • 我喜歡你 像云追著風,風追著雨 不知何起,不問歸期。 我喜歡你 像線代的高數(shù)次冪 心急火燎,心亂如麻。 我喜歡你 ...
    荒唐小姐閱讀 1,111評論 2 8
  • 已經(jīng)累到不想動了。貼的面膜精華太多了,整的臉和脖子黏黏糊糊的,好不爽~而且特別渴,水還熱,頭發(fā)還沒干,蓬蓬的,好熱...
    天上的船閱讀 124評論 0 0

友情鏈接更多精彩內(nèi)容