docker 三种挂载文件路径方式
为何要为容器进行文件挂载
为了持久化docker容器产生的数据(数据文件/配置文件/日志文件), 通常会挂载(映射)产生数据的容器内路径到主机路径上.
用处:
- 不用进入容器内就能访问配置容器内数据
- 删除容器时能保留数据
3种挂载方式
- 指定路径挂载
- 具名挂载
- 匿名挂载
1.指定路径挂载
首先查看当前的数据卷和容器列表
当前只有1个运行中的容器和1个数据卷(volume)
[gateman@i-93f6y1io docker]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b82adf8f3f5 mysql:latest "docker-entrypoint.s…" 7 days ago Exited (0) 7 days ago mysql01
5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 12 days 0.0.0.0:3346->9000/tcp condescending_cartwright
[gateman@i-93f6y1io docker]$
[gateman@i-93f6y1io docker]$ docker volume ls
DRIVER VOLUME NAME
local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261
[gateman@i-93f6y1io docker]$
语法:
-v /主机路径:/容器内路径
例子 我们创建1个tomcat容器
docker run -d -p 3348:8080 -v /home/gateman/docker/webapps:/usr/local/tomcat/webapps --name tomcat_spe_mount tomcat
[gateman@i-93f6y1io docker]$ pwd
/home/gateman/docker
[gateman@i-93f6y1io docker]$ mkdir -p webapps
[gateman@i-93f6y1io docker]$ ls
run_portainer.sh scripts webapps
[gateman@i-93f6y1io docker]$ docker run -d -p 3348:8080 -v /home/gateman/docker/webapps:/usr/local/tomcat/webapps --name tomcat_spe_mount tomcat
052e6104aeaf65f56e53535d249d5417701560ce6332dbcc764dfb4cc6435bae
[gateman@i-93f6y1io docker]$
这是我们访问 tomcat主页,见到tomcat启动了, 但是什么也没有, 因为容器内的webapps是空的
通过查看容器信息, 我们可以看到一条挂载记录
[gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_spe_mount
[{bind /home/gateman/docker/webapps /usr/local/tomcat/webapps true rprivate}]
[gateman@i-93f6y1io docker]$
这时我们把一些东西webapps初始的管理项目copy 到挂载点 /home/gateman/docker/webapps 上
然后刷新tomcat主页, 能正常显示了
[gateman@i-93f6y1io docker]$ cp -a ~/docker/scripts/mount/webapps/* /home/gateman/docker/webapps/
[gateman@i-93f6y1io docker]$ docker exec -it tomcat_spe_mount /bin/bash
root@052e6104aeaf:/usr/local/tomcat# ls /usr/local/tomcat/webapps
ROOT docs examples host-manager manager
root@052e6104aeaf:/usr/local/tomcat# exit
exit
[gateman@i-93f6y1io docker]$
证明了挂载点有效的.
我们再查看下数据卷列表
[gateman@i-93f6y1io docker]$ docker volume ls
DRIVER VOLUME NAME
local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261
[gateman@i-93f6y1io docker]$
数据卷并没有增加
说明 指定路径挂载并不会创建数据卷(volume)
2.具名挂载
可以讲具名挂载和匿名挂载都不用指定主机的挂载路径, 由docker自己管理(通常在/var/lib/docker/volumn/ 下), 只需要指定容器里需要映射出来的路径。 而且会增加1个数据卷。
具名就是会给这个新增的数据卷添加1个名字。
匿名就是给这个数据卷产生1个随机token作为数据卷名字
语法
-v 数据卷名:/容器内路径
例子
我们创建多个tomcat 容器
[gateman@i-93f6y1io docker]$ docker run -d -p 3349:8080 -v vol_has_name_tomcat:/usr/local/tomcat/webapps --name tomcat_has_name_mount tomcat
d0bc64be6bdc9aedaec4bf22777eeea8a47106df90e05c929e31f540541f79df
[gateman@i-93f6y1io docker]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0bc64be6bdc tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:3349->8080/tcp tomcat_has_name_mount
052e6104aeaf tomcat "catalina.sh run" 15 minutes ago Up 15 minutes 0.0.0.0:3348->8080/tcp tomcat_spe_mount
5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 13 days 0.0.0.0:3346->9000/tcp condescending_cartwright
[gateman@i-93f6y1io docker]$ docker exec -it tomcat_has_name_mount /bin/bash
root@d0bc64be6bdc:/usr/local/tomcat# ls /usr/local/tomcat/webapps
root@d0bc64be6bdc:/usr/local/tomcat# exit
exit
可以见到1个新创建的容器。 这时访问这个tomcat, 也是没有主页的, 因为容器内webapps是空的
这时我们查看下这个容器的挂载信息
[gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_has_name_mount
[{volume vol_has_name_tomcat /var/lib/docker/volumes/vol_has_name_tomcat/_data /usr/local/tomcat/webapps local z true }]
[gateman@i-93f6y1io docker]$
可以很清晰见到, 1个volume被指定了, 名字就是我们命令中定义的。
挂载点是/var/lib/docker/volumes/vol_has_name_tomcat/_data
我们再查看下数据卷列表
[gateman@i-93f6y1io docker]$ docker volume ls
DRIVER VOLUME NAME
local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261
local vol_has_name_tomcat
[gateman@i-93f6y1io docker]$
1个新的数据卷被创建
我们把一些default东西copy到挂载点(要加sodu), 主页就出来了
[gateman@i-93f6y1io docker]$ sudo cp -a ~/docker/scripts/mount/webapps/* /var/lib/docker/volumes/vol_has_name_tomcat/_data/
[sudo] gateman 的密码:
[gateman@i-93f6y1io docker]$ docker exec -it tomcat_has_name_mount /bin/bash
root@d0bc64be6bdc:/usr/local/tomcat# ls /usr/local/tomcat/webapps
ROOT docs examples host-manager manager
root@d0bc64be6bdc:/usr/local/tomcat#
3.匿名挂载
语法
-v /容器内路径
不用指定数据卷名
例子
[gateman@i-93f6y1io docker]$ docker run -d -p 3350:8080 -v /usr/local/tomcat/webapps --name tomcat_ano_mount tomcat
132f575e0345ef5808e250c3b18741b294d4bb3e61a1ac88d8b6a9b4d2a76a79
[gateman@i-93f6y1io docker]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
132f575e0345 tomcat "catalina.sh run" 3 seconds ago Up 3 seconds 0.0.0.0:3350->8080/tcp tomcat_ano_mount
d0bc64be6bdc tomcat "catalina.sh run" 38 minutes ago Up 38 minutes 0.0.0.0:3349->8080/tcp tomcat_has_name_mount
052e6104aeaf tomcat "catalina.sh run" 53 minutes ago Up 53 minutes 0.0.0.0:3348->8080/tcp tomcat_spe_mount
5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 13 days 0.0.0.0:3346->9000/tcp condescending_cartwright
[gateman@i-93f6y1io docker]$ docker volume ls
DRIVER VOLUME NAME
local 5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb
local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261
local vol_has_name_tomcat
[gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_ano_mount
[{volume 5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb /var/lib/docker/volumes/5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb/_data /usr/local/tomcat/webapps local true }]
[gateman@i-93f6y1io docker]$
可以见到 1个新的volume 被创建, 而且名字是一堆无意义的字符
挂载点同样也是很冗长,
所以一般情况不建议用匿名挂载
docker 三种挂载文件路径方式相关推荐
- 文件的存取方式java_三种访问文件的方式
标准IO,带缓冲的标准IO,内存映射等在Java中的实现: 1 package com.mesopotamia.test; 2 3 import java.io.BufferedReader; ...
- java 输出文件到mac路径_Java 中几种获取文件路径的方式
原标题:Java 中几种获取文件路径的方式 1. 前言 Java开发中我们经常要获取文件的路径,比如读取配置文件等等.今天我们就关于文件的路径和如何读取文件简单地探讨一下. 2. 文件的路径 文件的路 ...
- zynq学习03 zynq中三种实现GPIO的方式
http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...
- CI框架的三种设置cookie的方式
[php] view plaincopyprint? //第一种设置cookie的方式:采用php原生态的方法设置的cookie的值 setcookie("user_id",$us ...
- java.io几种读写文件的方式
一.Java把这些不同来源和目标的数据都统一抽象为数据流. Java语言的输入输出功能是十分强大而灵活的. 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作 ...
- python打开一个文件-python下几种打开文件的方式
昨天看完了这本python进阶,感觉这本书对我启发很大,做了三张纸的笔记,方便我在遇到问题的时候翻阅,然后寻找可能的解决方案.作为一个使用Python一年的小白,虽然说不是小白,但是这一年来基本上是用 ...
- SSO单点登录三种情况的实现方式详解
SSO单点登录三种情况的实现方式详解 单点登录(SSO--Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子 ...
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...
- swift调用oc_OC与Swift混编,三种场景的实现方式
多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File 选择 Heade ...
最新文章
- 设计模式之享元模式学习笔记
- [云炬创业基础笔记]第十一章创业计划书测试14
- mysql explain中的type列含义和extra列的含义
- uestc summer training #2
- 数据库利器Navicat最全快捷键整理
- 构建第一个fabric网络
- ba网络c语言编程,如何用C语言程序构造随机网络和BA无尺度网络
- 超参数调整——网格搜索
- 一篇文章读懂拿了图灵奖和诺贝尔奖的概率图模型
- ACL(标准/扩展访问控制列表)
- 原 《老路用得上的商学课》86-90学习笔记
- prometheus Metric类型
- 电商收付通系列⑤,商户进件之二级商户进件申请
- 统计小写英文字母的个数 c语言,输入一行字符,统计英文字母,空格,和其他字符的个数...
- kubernetes kind类型之Deployment
- 童年经典,任天堂switch红白机游戏
- csp m2 HRZ学英语
- 三个路由器三个pc实现全网可达
- 微信小程序之二级联动下拉列表
- 阿里巴巴Java开发手册及Java代码规约扫描eclipse插件
热门文章
- 数据结构--队列(数组)的一种实现
- [Java基础] Properties类的基本操作和介绍
- 思想解读:TF-A(ATF)中栈指针和栈内存的设计思想解读
- [问答]-ARM文档中的†和‡的含义
- 【网络安全】如何搭建MySQL恶意服务器读取文件?
- 【网络安全】JAVA代码审计—— XXE外部实体注入
- 从一个被Tomcat拒绝的漏洞到特殊内存马
- 10.Windows线程切换_FS段寄存器
- 1.段描述符与段选择子
- Ksusha and Array (vector)