Docker 数据管理

我们已经熟悉了 -v 或者 --volume,官方最近建议( Docker 17.06+ ) 使用 --mount

官方文档:https://docs.docker.com/engine/admin/volumes/

类型

  • bind
  • volume
  • tmpfs

source

sourcesrc

destination

destinationdsttarget

volumes

创建 volume

$ docker volume create VOLUME_NAME

$ docker volume ls

$ docker volume rm VOLUME_NAME

$ docker run

$ docker run \
   --mount source=VOLUME_NAME,target=/app
   # -v VOLUME_NAME:/app \
   --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly
   # -v nginx-vol:/usr/share/nginx/html:ro

$ docker service

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

readonly

$ mkdir: can't create directory 'a.txt': Read-only file system

bind mounts

官方文档:https://docs.docker.com/engine/admin/volumes/bind-mounts/

-v 参数挂载的文件或目录路径如果不存在,Docker 会默认创建一个文件夹

--mount 参数挂载的文件或目录路径如果不存在,Docker 不会自动创建,并且会报错

$ docker run \
   --mount type=bind,source=$PWD/app,target=/app \
   # -v "$(pwd)"/target:/app \
   --mount type=bind,source=$PWD/app,target=/app,readonly \
   # -v "$(pwd)"/target:/app:ro

macOS

该选项仅用于 macOS

--mount type=bind,source=$PWD/target,destination=/app,consistency=cached
  • consistent or default: The default setting with full consistency, as described above.
  • delegated: The container runtime’s view of the mount is authoritative. There may be delays before updates made in a container are visible on the host.
  • cached: The macOS host’s view of the mount is authoritative. There may be delays before updates made on the host are visible within a container.

These options are completely ignored on all host operating systems except macOS.

tmpfs

--mount type=tmpfs,destination=/app

--mount type=tmpfs,destination=/app,tmpfs-mode=1770

注意事项

当挂载一个 空的数据卷 时,若挂载的容器目标目录存在文件时,Docker 会把容器中的文件复制到数据卷中。若 监听主机目录挂载非空数据卷 时,不会复制容器中原有文件,而是由原路径文件直接覆盖容器中的目标路径。下面通过具体的命令来进行说明。

$ docker run -it --rm \
    --mount src=new_vol,target=/etc/nginx/conf.d \
    nginx:alpine \
    ls /etc/nginx/conf.d
default.conf

# 以上说明 Docker 复制容器中的原有文件到了这个空的数据卷

# 在数据卷写入数据

$ docker run -it --rm \
    --mount src=new_vol,target=/etc/nginx/conf.d \
    nginx:alpine \
    sh

/ # cd /etc/nginx/conf.d/
/etc/nginx/conf.d # rm -rf *
/etc/nginx/conf.d # ls
/etc/nginx/conf.d # touch test.txt

# 退出,现在数据卷 new_vol 非空,下面测试挂载一个非空数据卷,看会不会复制容器中的文件到数据卷。

$ docker run -it --rm \
    --mount src=new_vol,target=/etc/nginx/conf.d \
    nginx:alpine \
    ls /etc/nginx/conf.d
test.txt

# 以上说明没有复制

# 现在测试一下监听主机目录

$ docker run -it --rm \
    --mount type=bind,src=$PWD,target=/etc/nginx/conf.d \
    nginx:alpine \
    ls /etc/nginx/conf.d

# 没有看到 default.conf
# 说明没有复制容器中的原有文件,主机中的文件直接覆盖掉了容器中的原有文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker Cloud 简介

    Docker Cloud 是官方推出的构建、测试镜像,管理 Swarm mode,自动以镜像方式部署服务的地方。 构建镜像 和我们熟悉的 Dockr Hub 一...

    康怀帅
  • Docker 清理命令 prune

    Docker 1.13.0+ 引入了清理命令。 官方文档:https://docs.docker.com/engine/admin/pruning/ 清理镜像 ...

    康怀帅
  • Docker 桌面版支持 kubernetes

    Docker for Mac v17.12 正式支持 k8s。 Docker for Windows v18.02-rc1 正式支持 k8s。 相关文章 Bet...

    康怀帅
  • 我是如何在四年时间里,从厨师转行为 Serverless 应用开发者

    我在高中时就喜欢烹饪和烘焙,用不同食材的搭配去做出美味的食物,就像个科学怪人。我的家乡在爱尔兰,我的第一份工作也在那里,这是我第一次真正在厨房为人们提供食物,当...

    Aceyclee
  • Docker容器学习梳理--基础知识(1)

    Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0...

    洗尽了浮华
  • 介绍一些比较方便好用的爬虫工具和服务

    在之前介绍过很多爬虫库的使用,其中大多数也是 Python 相关的,当然这些库很多都是给开发者来用的。但这对一个对爬虫没有什么开发经验的小白来说,还是有一定的上...

    崔庆才
  • nginx并发配置之worker_connections,worker_processes与 max clients

    原文:http://blog.51cto.com/liuqunying/1420556

    后端技术探索
  • 博弈论笔记--02--学会换位思考

    Player1:S[i]={T,B} Player2:S[i]={L,C,R} U1(T,C)=11 U2(T,C)=3

    Enterprise_
  • day108&day109部分-Linux安装和配置nginx

    少年包青菜
  • Kubernetes之上传文件报413 Request Entity Too Large

        问题是这样的,应用部署在k8s上,用ingress方式暴露出来,上传文件到应用时报"413 Request Entity Too Large",搜了很多...

    克虏伯

扫码关注云+社区

领取腾讯云代金券