docker volume数据卷

1.创建volume

  • Docker 1.9之后引入新的子命令,docker volume,可以对volume进行创建、查看和删除。
$ sudo docker volume create --name vol_simple
  • 使用docker run或docker create创建容器时,也可以使用-v标签为容器添加volume。
$ sudo docker run -d -v /data ubuntu
  • 以下命令创建制定名字volume,并挂载到容器中到/data目录下
$ sudo docker run -d -v vol_simple: /data ubuntu
  • 使用docker volume inspect查看volume到信息
$ sudo docker volume inspect vol_simple

2.挂载volume

  • 使用如下命令创建并挂载volume
$ sudo docker volume create --name vol
$ sudo docker run -d -v vol: /data ubuntu
  • 将宿主机上到目录挂载到容器中,文件夹必须使用绝对路径,如果宿主机中不存在/host/dir,将创建一个空文件夹。如果镜像中原本存在/container/dir文件夹,该文件夹下原有到内容将被隐藏,以保持与宿主机中到文件夹一致。(以主机内容为主)
$ sudo docker run -v /host/dir:/container/dir ubuntu
  • 挂载单个文件,文件必须使用绝对路径,文件不存在/host/file,则创建一个同名空目录。挂载后文件内容与宿主机到文件一致,也就是说如果容器中原本存在/container/file,该文件将被隐藏。(以主机内容为主)
$ 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文件夹,这个文件夹中到内容将全部复制到宿主机对应到文件夹下。(以容器内容为主)
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创建容器时,可以使用--volumes-from标签使得容器与已有的容器共享volume。
$ sudo docker run --rm -it --volumes-from vol_simple ubuntu
  • 如果一些数据,比如配置文件、数据文件等,要在多个容器之间共享,一种常见的做法时创建一个数据容器,其他容器与之共享volume。
    如下:首先创建一个挂载了volume的数据容器vol_data,该容器仅仅输出一条提示后就停止运行以避免浪费资源;接下来的两个容器与这个数据容器共享这个volume;如此就将需要共享数据的容器进行较好的解耦。
$ 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,554评论 0 120
  • https://deepzz.com/post/the-docker-volumes-basic.htmlDesc...
    deepzz阅读 5,060评论 0 2
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,806评论 0 7
  • 我喜欢你 像云追着风,风追着雨 不知何起,不问归期。 我喜欢你 像线代的高数次幂 心急火燎,心乱如麻。 我喜欢你 ...
    荒唐小姐阅读 1,068评论 2 8
  • 已经累到不想动了。贴的面膜精华太多了,整的脸和脖子黏黏糊糊的,好不爽~而且特别渴,水还热,头发还没干,蓬蓬的,好热...
    天上的船阅读 92评论 0 0