docker教程(3)--volume
来源:互联网 发布:淘宝闺蜜投诉入口 编辑:程序博客网 时间:2024/05/29 11:03
- volume概念
- volume的创建
- 从容器中挂在volume
- 从宿主机中挂在volume
- 通过容器创建volume
- 使用Dockfile创建volume
volume概念
Docker 的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有制度层,并在最上层加一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:
- 容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便的对容器中的文件进行访问
- 多个容器之间的数据无法共享
- 当删除容器时,容器产生的数据将会丢失
为了解决这些问题,Docker引入了数据卷(volume)机制。volume是存在一个或多个容器中的特定文件或文件夹,这个目录能独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久提供一下遍历。
- volume 在容器创建时就初始化,在容器运行时就可以使用其中的文件
- volume 能在不同的容器之间共享和重要
- volume 中的数据操作会马上生效
- volume 中的数据操作会影响到镜像本身
- volume 的生存周期独立于容器的生存周期,及时删除容器,volume仍然会存在,没有任何容器使用volume也不会被Docker删除
总的来说,volume的存在就是将容器和容器产生的数据进行分离,提供独立于容器之外的持久化存储
volume的创建
从容器中挂在volume
docker run -d --name nginx_volume -v /usr/share/nginx/html nginx
参数解析:
--name nginx_vlolume
指定容器的名称
-v /usr/share/nginx/html nginx
指定容器的挂载目录使用
docker inspect nginx_volume
命令查看容器配置,在输出的内容中找到以下内容:"Mounts": [ { "Type": "volume", "Name": "ec6b1159bad6e3ad2fd48479ae4e732a011da93f7691d72158d82e07c8f433fb", "Source": "/var/lib/docker/volumes/ec6b1159bad6e3ad2fd48479ae4e732a011da93f7691d72158d82e07c8f433fb/_data", "Destination": "/usr/share/nginx/html", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
其中:Source,指的是容器的挂在点,而Destination指的是数据卷的物理文件地址,及宿主机中的文件地址。
但是当我们在控制台查看Destination文件时,却提示如下:
产生此问题的原因是,docker并不是直接运行在mac系统中,在两者之间还存在一个虚拟层,所以我们需要进入到虚拟层中才能查看:screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
,
然后输入:ls /var/lib/docker/volumes/ec6b1159bad6e3ad2fd48479ae4e732a011da93f7691d72158d82e07c8f433fb/_data
,即可查看,如下图:
如果是linux系统,则不会产生此问题,直接查看即可。
- 我们可以改动index.html文件,如
echo "volume data changed!" > index.html
打开一个新的窗口,输入命令:docker exec -it nginx_volume /bin/bash
,即可进入容器的交互模式,
查看我们刚刚修改过的文件内容:cat /usr/share/nginx/html/index.html
,输出:volume data changed!
从宿主机中挂在volume
docker run -p 8080:80 -v $PWD/code:/usr/share/nginx/html -d nginx
该命令是将宿主机的当前目录下的code目录挂载到容器中的/usr/share/nginx/html目录,
其中code目录下有存在一个index.html文件,其内容是<html> <h1>Hello Docker</h1></html>
使用浏览器访问即可看到结果也是 Hello Docker,并不是nginx的默认页面。
使用此种方式可以将nginx的docker容器作为一个静态服务器来使用。
通过容器创建volume
首先创建数据容器卷:
mkdir -p data #在当前目录下创建data目录docker create -v $PWD/data:/var/mydata --name data_container ubuntu
使用该数据卷容器运行容器:
docker run -it --volumes-from data_container ubuntu /bin/bash
进入到容器中,执行
mount
,会有如下输出:打开 /var/mydata/目录,并任意创建一个文件,如
cd /var/mydata/ && touch whatever.txt
然后执行
exit
退出当前目录,到宿主机的$PWD/data目录下,即可看到在容器中创建的whatever.txt文件
使用Dockfile创建volume
参考:http://blog.csdn.net/dream_broken/article/details/52314993
- docker教程(3)--volume
- 深入理解 Docker Volume
- Docker中的Volume
- Docker数据管理:Named volume
- docker命令之volume
- docker volume源码分析
- docker共享volume
- Docker CLI操作volume
- Docker volume分析
- 什么是Docker Volume?
- Docker volume 挂载卷
- docker managed volume
- docker卷(Volume)
- docker的volume管理
- 深入理解Docker Volume
- 深入理解Docker Volume(一)
- 深入理解Docker Volume(二)
- docker 逻辑卷(volume)编
- 【Scikit-Learn 中文文档】内核近似
- Vanilla RNN是什么,它背后又隐藏了什么?
- Mahmoud and a Triangle (CodeForces
- PostgreSQL for Data Architects.pdf 英文原版 免费下载
- scala语言基础学习
- docker教程(3)--volume
- 【Scikit-Learn 中文文档】成对的矩阵, 类别和核函数
- poj1907 nim博弈
- nginx配置说明
- leeetcode-40. Combination Sum II
- 简单的vim配置
- java复制文件夹中的所有文件和文件夹到另一个文件夹中
- Android项目亮点
- LeetCode 27.Remove Element