将数据从宿主机到容器的三种方式:
,volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)保存数据的最佳方式
,bind mounts 将宿主机上的任意位置的文件或者目录挂在到容器 (--mount type=bind,src=源目录,dst=目标目录)
,tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用
tmpfs,同时避免写入容器可写层提高性能。 =====================Volume================================
方式一:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9ba6a9cecc6 nginx "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:->/tcp nginx01
root@bogon: ~ ::
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hctest/nginx latest 881bd08c0b08 days ago 109MB
nginx latest 881bd08c0b08 days ago 109MB
centos 1e1148e4cc2c months ago 202MB
java d23bdf5b1b1b years ago 643MB
root@bogon: ~ ::
$ docker volume ls
DRIVER VOLUME NAME
root@bogon: ~ ::
$ docker volume create nginx-vol
inx-vol
▽oot@bogon: ~ ::
$ docker volume ls
DRIVER VOLUME NAME
local nginx-vol
root@bogon: ~ ::
$ docker run -itd --name nginx02 -p : -h nginx01 -v nginx-vol:/usr/share/nginx/html nginx
6e5a0cf4451cb71a78e41d7dcfd2a60181208d7b6ca6f4c05d16434dcc674ba7
root@bogon: ~ ::
$ docker volume inspect nginx-vol
[
{
"CreatedAt": "2019-03-13T14:25:04+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
root@bogon: ~ ::
$ cd /var/lib/docker/volumes/nginx-vol/_data
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ ls
50x.html index.html
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ vim index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p> <p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ echo "aa" >index.html
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e5a0cf4451c nginx "nginx -g 'daemon of…" minutes ago Up minutes 0.0.0.0:->/tcp nginx02
c9ba6a9cecc6 nginx "nginx -g 'daemon of…" hours ago Up hours 0.0.0.0:->/tcp nginx01
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ curl 127.0.0.1:
aa
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$
方式二:
$ docker run -itd -p : --mount src=nginx-vol2,dst=/usr/share/nginx/html --name nginx03 nginx
6254f743f799b52e82516767989e995d08601383188d0e4fbda07cbea3ca858f
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ docker volume inspect nginx-vol2
[
{
"CreatedAt": "2019-03-13T14:38:32+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx-vol2/_data",
"Name": "nginx-vol2",
"Options": null,
"Scope": "local"
}
]
root@bogon: /var/lib/docker/volumes/nginx-vol/_data ::
$ 注意:
,如果没指定卷,自动创建
,建议使用--mount,比较通用 =====================Bind Mounts================================ root@bogon: /data/www ::
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@bogon: /data/www ::
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hctest/nginx latest 881bd08c0b08 days ago 109MB
nginx latest 881bd08c0b08 days ago 109MB
centos 1e1148e4cc2c months ago 202MB
java d23bdf5b1b1b years ago 643MB
root@bogon: /data/www ::
$ mkdir /data/www -p
root@bogon: /data/www ::
$ cat /data/www/index.html
sadasdad
root@bogon: /data/www ::
$ docker run -itd --name nginx01 -p : --mount type=bind,src=/data/www,dst=/usr/share/nginx/html nginx
c9ba6a9cecc6bb8b241a15841fe1889f56a9c92e315017eb6c68fb0ef0c5bff4
root@bogon: /data/www ::
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9ba6a9cecc6 nginx "nginx -g 'daemon of…" seconds ago Up seconds 0.0.0.0:->/tcp nginx01
root@bogon: /data/www ::
$ docker exec -it c9ba6a9cecc6 bash
root@c9ba6a9cecc6:/# cat /usr/share/nginx/html/index.html
sadasdad
root@c9ba6a9cecc6:/#
注意:
,如果源文件目录没有存在(也就是src),不会自动创建,会抛出一个错误
,如果挂载目标容器中为非空目录,则该目录源文件会被隐藏。 volume
总结:
,多个运行的容器之间共享数据,因为挂载点如果一样存储是一样的
,当容器停止或者删除,该卷依然存在,数据不会丢失
,多个容器可以同时挂载相同的卷
,当明确删除卷时,卷才会被删除
,将容器数据存储在远程主机上或者其他存储
,将数据从一台docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/) Bind Mounts
总结:
,从主机共享配置文件到容器,默认情况下,挂载主机/etc/resolv.conf到每个容器,提供dns解析
,在docker主机上开发环境和容器之间共享源代码,例如,可以将maven tag目录挂在到容器中,每次在docker主机上构建maven项目时,容器都可以访问构建的项目包
,当docker主机的文件或者目录结构保证与容器所需的绑定挂在一致时 区别:
volume 是docker的宿主机文件系统一部分,只有docker可以进行更改,其他进程不能修改
bind mounts 是挂载在宿主机文件系统的任意位置,除了docker所有进程都可以进行修改、

`docker数据持久化volume和bind mounts两种方式的更多相关文章

  1. scrapy数据存储在mysql数据库的两种方式

    方法一:同步操作 1.pipelines.py文件(处理数据的python文件) import pymysql class LvyouPipeline(object): def __init__(se ...

  2. 在javaScript中把非数值类型的数据自动转换为数值类型的两种方式

    一.使用Number()函数. 二.使用parseInt()/parseFloat()函数. 详情: 一.使用Number()函数将非数值类型的数据自动的转化为数组类型 Number()函数可以将任何 ...

  3. 定义一个Map集合,key和value不规定类型,任意放入数据,用keySet()和 entrySet()两种方式遍历出Map集合的数据

    package com.lanxi.demo1_1_1; import java.util.HashMap; import java.util.Iterator; import java.util.M ...

  4. Python开发【笔记】:pymsyql 插入一条数据同时获取新插数据的自增id的两种方式

    一.通过cursor.lastrowid import pymysql.cursors # Connect to the database connection = pymysql.connect(h ...

  5. ORACLE导入大量数据的两种方式比较

    不管是开发还是测试,工作中经常需要去批量新增测试数据,但是大量数据的新增速度有时候让我们苦不堪言,下面通过两种方式完成oracle数据的批量新增,比较两种方式的效率. 第一种方式:采用工具导入sql文 ...

  6. 制作Docker镜像的两种方式

    此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...

  7. Express全系列教程之(四):获取Post参数的两种方式

    一.关于POST请求 post方法作为http请求很重要的一部分,几乎所有的网站都有用到它,与get不同,post请求更像是在服务器上做修改操作,它一般用于数据资源的更新.相比于get请求,post所 ...

  8. 使用GoldenGate初始化的两种方式

    在使用OGG开始增量数据的实时复制之前,一般需要对当前的存量数据进行初始化,如果是同构数据库,则可以使用数据库自带的工具完成,比如Oracle DB中的rman, expdp/impdp等. 其实og ...

  9. docker数据持久化/共享---volume,bind-mount,tmpfs-mount

    一.将Docker数据挂载到容器 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供 ...

随机推荐

  1. @codeforces - 1214G@ Feeling Good

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n*m 的 01 矩阵 A,一开始所有格子都为 0. ...

  2. jQuery Css类

    通过 jQuery,可以很容易地对 CSS 元素进行操作 jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法.我们将学习下面这些: addClass() - 向被选元素添加一个 ...

  3. MySQL_分库分表

    分库分表 数据切分 通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果.数据的切分同时还能够提高系统的总体可用性,由于单台设备Crash ...

  4. git 本地仓库操作

    一.git对象模型和存储 二.常用命令 1)git checkout branch 切换分支 假设现在有两个分支,master和dev分支 i dev分支上没有readme.txt 在master分支 ...

  5. 一些关于中国剩余定理的数论题(POJ 2891/HDU 3579/HDU 1573/HDU 1930)

    2891 -- Strange Way to Express Integers import java.math.BigInteger; import java.util.Scanner; publi ...

  6. PHP中 spl_autoload_register() 函数用法

    这篇文章主要介绍了PHP中spl_autoload_register()函数用法,结合实例形式分析了__autoload函数及spl_autoload_register函数的相关使用技巧,需要的朋友可 ...

  7. jq杂项方法/工具方法----isArray()

    https://www.cnblogs.com/sandraryan/ $.isArray()函数用于判断指定参数是否是一个数组.返回布尔值. <!DOCTYPE html> <ht ...

  8. 【转载】Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  9. SQL 常见出现错误(附件、保存表、脱机、自增序列号 )

    一.问题如图所示: 当填了某些数据,按“保存”时出现这个问题怎么解决? 1.打开“工具”-“选项”-“Designers” , 2.选择如下去勾: 二.当附加数据库的时候出现如下错误: 在附件文件上选 ...

  10. webpack学习(三)配置loader

    首先搞清楚两个问题: 1 什么是loader? 2 为啥要用各种loader 答: loader 就是各种打包规则,为什么要用是显而易见的,因为webpack还没智能到给它什么文件都能打包,对于js文 ...