前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 数据管理

Docker 数据管理

作者头像
康怀帅
发布2018-02-28 16:10:13
1.5K0
发布2018-02-28 16:10:13
举报
文章被收录于专栏:康怀帅的专栏康怀帅的专栏

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

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

类型

  • bind
  • volume
  • tmpfs

source

sourcesrc

destination

destinationdsttarget

volumes

创建 volume

代码语言:javascript
复制
$ docker volume create VOLUME_NAME

$ docker volume ls

$ docker volume rm VOLUME_NAME

$ docker run

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
$ docker service create -d \
  --replicas=4 \
  --name SERVICE_NAME \
  --mount source=VOLUME_NAME,target=/app \
  nginx:latest

readonly

代码语言:javascript
复制
$ 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 不会自动创建,并且会报错

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
--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

代码语言:javascript
复制
--mount type=tmpfs,destination=/app

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

注意事项

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

代码语言:javascript
复制
$ 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
# 说明没有复制容器中的原有文件,主机中的文件直接覆盖掉了容器中的原有文件
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类型
  • source
  • destination
  • volumes
    • 创建 volume
      • $ docker run
        • $ docker service
          • readonly
          • bind mounts
            • macOS
            • tmpfs
            • 注意事项
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档