Docker 容器数据卷

Posted CSR-kkk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 容器数据卷相关的知识,希望对你有一定的参考价值。

文章目录

容器数据卷

docker 理念回顾

将应用和环境打包成一个镜像

问题:数据在容器中,当容器被删除,数据则丢失。需求:数据可持久化
容器间数据共享,docker 容器中产生的数据,同步到本地

目录挂载,将容器的目录,挂载到Linux上。

容器的持久化和同步操作,容器间可以数据共享




使用数据卷

方式一:使用命令挂载 -v

docker run -it -v 主机目录:容器目录 

[root@localhost home]# docker run -it -v /home/ceshi:/home centos /bin/bash

# 通过inspect 查看
[root@localhost home]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
50986da06020   centos    "/bin/bash"   About a minute ago   Up About a minute             keen_bassi
[root@localhost home]# docker inspect 50986da06020


同步测试1.在容器内创建test.java ,宿主机中也同步创建

同步测试2.
1.停止容器,2.宿主机修改文件,3.启动容器,4.查看容器内数据是否同步

好处
修改操作在本地即可进行,容器内自动同步



方式二:数据卷容器

多个mysql 同步数据

通过 --volumes-from

容器之间配置信息的传递,数据卷容器生命周期一直持续到没有容器使用为止

一旦持久化到了本地,本地的数据是不会删除的



实战:安装MySQL

# 获取镜像
[root@localhost ceshi]# docker pull mysql:5.7

# 运行容器,需要数据挂载
# 安装启动mysql 需要配置密码!!(注意点)

# 官方测试
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 启动mysql
-d 	后台运行
-p	端口映射
-v	卷挂载
-e	环境配置
--name	容器名
[root@localhost ceshi]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

# 启动成功后,本地使用 sqlyog 连接测试一下
# sqlyog --h -u -p 连接到服务器的3310 和容器内的3306 映射

# 本地测试创建一个数据库,查看映射路径是否ok

假设将容器删除,但是挂载到本地的数据卷依旧没有丢失,实现了容器数据的持久化功能




具名和匿名挂载

# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有 volume 的情况
[root@localhost data]# docker volume ls
local     8ed9ee3888e06181c32f582170cefb6c0b46b202a1e0808a5e216cfcdd60af38
local     a20baa18b5413402fcc9efc99e36331c8476b2d459d9ce5964df8aa348cc9465

# 上面这种就是匿名挂载, -v 只写了容器内的路径,没有写容器外的路径


# 具名挂载
[root@localhost data]# docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx:latest 
7df820e4078fb33e83241e2886b54bdaa09c533fb8eda69242a66451a5306368
[root@localhost data]# docker volume ls
DRIVER    VOLUME NAME
local     8ed9ee3888e06181c32f582170cefb6c0b46b202a1e0808a5e216cfcdd60af38
local     a20baa18b5413402fcc9efc99e36331c8476b2d459d9ce5964df8aa348cc9465
local     ceb7a42986331355c34f24e2b8289ea8c38be3369b50cd9af9eab7b7d3f7490b
local     jenkins_local
local     juming-nginx

# 通过 -v 卷名:容器内路径

# 查看一下这个卷


所有的docker 容器内的卷,没有指定目录的情况下,都是在 /var/lib/docker/volumes/xxx/_data

如何确定是具名挂载还是匿名挂载,还是指定路径挂载

-v 容器内路径			# 匿名挂载
-v 卷名:容器内路径	# 具名挂载
-v /宿主机路径:容器内路径	# 指定路径挂载



拓展

# 通过 -v 容器内路径:ro rw 改变读写权限
ro	readonly # 只读
rw	readwrite # 可读可写

# 一旦设置容器权限,容器对挂载出来的内容就有限定了
docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

# ro 这个路径只能通过宿主机操作,容器内部无法操作



以上是关于Docker 容器数据卷的主要内容,如果未能解决你的问题,请参考以下文章

docker数据卷容器

Docker 数据卷

docker数据卷容器

Docker之七:Docker数据卷管理

06-Docker-容器数据卷

运维实战 容器部分 Docker数据卷