《Docker从入门到跑路》之存储卷介绍
默认情况下,容器会随着用户删除而消失,包括容器里面的数据。如果我们要对容器里面的数据进行长久保存,就不得不引用存储卷的概念。
在容器中管理数据持久化主要有两种方式:
1、数据卷(data volumes)
2、挂载目录(Bind volumes)
数据卷
数据卷是一个可供一个或多个容器使用的共同目录,它提供很多有用的特性:
1、数据卷可以在容器之间共享和重用;
2、对数据卷的修改会立马生效;
3、对数据卷的更新不会影响镜像;
4、数据卷默认会一直存在,即使容器被删除;
注意:数据卷的使用类似于Linux下对目录进行mount,镜像中被指定的挂载点中的文件会被隐藏,显示的是我们挂载的数据卷。
数据卷的常用命令是docker volume命令,常规用法如下:
# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
创建数据卷:
docker volume create my_volume
查看数据卷:
# docker volume ls
DRIVER VOLUME NAME
local 7a9cbb48630c66180ba226974aa9307a502ce4c99648be48e1a0cfcbe4573854
local 861cb1d1c824570a426a6b2599357b6d66818cd98a36010857cb7d753312d11d
local my_volume
local mydata
local nginx_volume
local vol_simple
local wpdata
查看数据卷的详细信息:
# docker volume inspect my_volume
[
{
"CreatedAt": "2019-07-28T13:01:27+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my_volume/_data",
"Name": "my_volume",
"Options": {},
"Scope": "local"
}
]
启动一个容器挂载数据卷,挂载数据卷的方法有两种:
1、用-v或者--volume;
# docker run -it --rm --name my_app -v my_volume:/data/apps busybox
2、用--mount;
# docker run -it --rm --name my_app --mount source=my_volume,target=/data/apps busybox
容器启动后可以查看容器信息,就可以看到具体的挂载信息:
# docker inspect my_app
......
"Mounts": [
{
"Type": "volume",
"Name": "my_volume",
"Source": "/var/lib/docker/volumes/my_volume/_data",
"Destination": "/data/apps",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
......
删除数据卷:
# docker volume rm my_volume
数据卷是用来持久化容器数据的,它独立于容器的生命周期,如果需要删除容器的同时也移除数据卷,可以使用docker rm -v命令。
如果要清理一些无主的数据卷,可以使用下面命令:
# docker volume prune
挂载目录
挂载主机目录和挂载数据卷的方式一样,只是在指定需要挂载的目录是一个全路径目录,比如:
# docker run -it --rm --name my_app -v /tmp/my_app:/data/apps busybox
# docker run -it --rm --name my_app --mount type=bind,source=/tmp/my_app,target=/data/apps busybox
从上面知道用-v和--mount都可以进行挂载。如果使用-v来挂载目录,如果本地/tmp/my_app存在,则直接将这个目录挂载到容器上,里面如果有文件等,就可以在容器中直接进行查看。如果本地没有这个目录,则在启动容器的过程中自动创建这个目录。如果使用--mount来挂载目录,如果本地目录不存在,就会报错,比如:
# docker run -it --rm --name my_app --mount type=bind,source=/tmp/my_app/web/data,target=/data/apps busybox
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /tmp/my_app/web/data.
See 'docker run --help'.
默认挂载到容器中的目录,docker对其是有读写权限的,用户可以增加readonly参数使其只有只读权限。
# docker run -it --rm --name my_app --mount type=bind,source=/tmp/my_app,target=/data/apps,readonly busybox
/ # cd /data/apps/
/data/apps # ls
/data/apps # touch 1.txt
touch: 1.txt: Read-only file system
不仅可以挂载目录,还可以挂载单个文件,如下:
# docker run -it --rm --name my_app --mount type=bind,source=/$HOME/.bash_history,target=/data/apps/history busybox
# docker run -it --rm --name my_app -v /$HOME/.bash_history:/data/apps/history busybox
如果是跨主机使用,可以通过共享存储,比如NFS之类的。这样我们只要挂载NFS的目录,所有的读写操作其他主机也可见。
除了使用上面这两种挂载之外,还可以使用现有容器的挂载,通过--volumes-from命令就可以直接使用其他容器的挂载,比如:
# docker run -it --rm --name my_app -v /$HOME/.bash_history:/data/apps/history busybox
# docker run -it --rm --name new_app --volumes-from my_app busybox
这样,my_app和new_app使用的就是同一个挂载卷了。
《Docker从入门到跑路》之存储卷介绍的更多相关文章
- 《Docker从入门到跑路》之网络模型介绍
Bridge模式 当我们安装完docker后,启动Docker daemon,就会在主机上看到一个docker0的网桥,默认在此主机上启动的容器都会连接到这个网桥上.虚拟网桥的工作方式和物理交换机的工 ...
- 《Docker从入门到跑路》之Dockerfile基本操作
一.简介 Dockerfile是一个文本文件,里面包含一条条指令,每一条指令就是一层镜像.一般情况下,Dockerfile分为4个部分: 基础镜像 维护者信息 镜像操作指令 容器启动时执行命令 例如: ...
- 《Docker从入门到跑路》之镜像和容器的基本操作
一.获取镜像 官方提供了一个公共镜像仓库Docker Hub,默认是从这上面获取镜像的. 搜素镜像使用docker search 命令: # docker search --help Usage: d ...
- 《Docker从入门到跑路》之简介
什么是Docker Docker,中文翻译是"码头工人".根据官方的定义,Docker是以Docker容器为资源分割和调度的基本单元,封装了整个软件运行的环境,为开发者和系统管理员 ...
- 《Docker从入门到跑路》之基本用法介绍
Docker是一种轻量级的虚拟化技术,它具备传统虚拟机无法比拟的优势,它更简易的安装和使用方式.更快的速度.服务集成和开源流程自动化. Docker的安装 安装Docker的基本要素:1.Docker ...
- 《Docker从入门到跑路》之多阶段构建
多阶段构建就是在一个Dokcerfile中定义多个FROM,每个FROM都可以使用不同的基础镜像,并表示开始一个新的构建阶段,我们可以很方便的将一个阶段的文件复制到另外一个阶段中,在最终的阶段保存你需 ...
- 反手来个K8S入门到跑路
layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...
- Spring全家桶系列–[SpringBoot入门到跑路]
//本文作者:cuifuan Spring全家桶————[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么 ...
- TiDB入门(四):从入门到“跑路”
前言 前面三章基本把 TiDB 的环境弄好了,也做了一下简单测试,有兴趣的同学可以看一下: TiDB 入门(一):TiDB 简介 TiDB 入门(二):虚拟机搭建 TiDB-Ansible 部署方案 ...
随机推荐
- thymeleaf的特殊属性赋值
在用thymeleaf时,遇到特殊属性不知道该怎么解决如下: 问题1:循环时,遇到特殊的属性,不知道怎么赋值 如:cate-id="" ,fid=""; 使用t ...
- AJ学IOS(40)UI之核心动画_抖动效果_CAKeyframeAnimation
AJ分享,必须精品 效果: 效果一: 效果二: 代码: // // NYViewController.m // 图片抖动 // // Created by apple on 15-5-8. // Co ...
- Daily Scrum 12/25/2015
Process: Zhaoyang: Implement the Alex 50M model in the Caffe framework. Yandong: The Azure Back end ...
- [YII2] COOKIE的操作使用
PHPcookie的设置 setcookie('username',$data['username'],time()+3600*24*7); YII2cookie的设置 $cookies = Yii: ...
- Springboot:员工管理之查询员工列表(十(6))
构建员工controller com\springboot\controller\EmployeeController.java package com.springboot.controller; ...
- Ipython入门小教程
学习<利用python进行数据分析>第三章 IPython:一种交互式计算和开发环境的笔记,共享给大家,同时为自己作为备忘用. 安装ipython用pip即可.ps.博主用的是win7系统 ...
- 记使用STL与unique_ptr造成的事故-段子类比
最近由于业务需要在写内存池子时遇到了一个doule-free的问题.折腾半个晚上以为自己的眼睛花了.开始以为是编译器有问题(我也是够自信的),但是在windows下使用qtcreator vs2017 ...
- thinkphp5.1+ 使用 Redis 缓存
修改 config/cache.php 将其配置成多个缓存类型,示例 <?php // +---------------------------------------------------- ...
- NGINX反向代理,后端服务器获取真实IP
一般使用中间件做一个反向代理后,后端的web服务器是无法获取到真实的IP地址. 但是生产上,这又是不允许的,那么怎么解决? 1.在NGINX反向代理服务器上进行修改 2.修改后端web服务器配置文件 ...
- 从一个数对列中找出素数对用于RAS加密的C++程序
#include <iostream> #include <cmath> using namespace std; const int n = 10000; int isPri ...