docker容器数据卷

什么是容器数据卷

docker的理念回顾
将应用的环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器的删除,数据就会丢失!需求:数据可以持久化
在这里插入图片描述
总结就是:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷
方式一:直接命令挂载
docker run -it -v 主机目录:容器目录

#测试

[root@VM-0-14-centos /]# docker run -it -v /cy:/home centos /bin/bash
[root@VM-0-14-centos ~]# docker inspect a0140ed29df7

在这里插入图片描述
看到挂载信息表明这时已经挂在成功

使用数据卷技术实现mysql持久化

# 运行容器,需要做数据挂在! #安装启动mysql ,需要配置密码
#官方,docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 启动我们的mysql
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
[root@VM-0-14-centos ~]# docker run -d -p 39995:3306 -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=chenyu --name mysql905 mysql:5.7
# 查看是否挂载成功
[root@VM-0-14-centos ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED        STATUS        PORTS                                                    NAMES
f1bcaf11741a   mysql:5.7   "docker-entrypoint.s…"   20 hours ago   Up 20 hours   33060/tcp, 0.0.0.0:39995->3306/tcp, :::39995->3306/tcp   mysql905
7cad9c50012d   nginx       "/docker-entrypoint.…"   27 hours ago   Up 27 hours   0.0.0.0:39001->80/tcp, :::39001->80/tcp                  beautiful_mirzakhani
[root@VM-0-14-centos ~]# docker inspect f1bcaf11741a

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/mysql/conf",
                "Destination": "/etc/mysql/conf.d",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/mysql/data",
                "Destination": "/var/lib/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

# 出现这个时说明启动和挂载成功
# 启动之后,我们本地使用sqlyog来测试一下
# sqlyog-连接到服务器的39995 和容器内的3306映射,这个时候我们可以连接上了!
尝试远程连接,连接成功证明部署没问题

在这里插入图片描述

具名和匿名挂载

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

# 查看所有的volume的情况
[root@VM-0-14-centos conf]# docker volume ls
DRIVER    VOLUME NAME
local     2d511795d19c39f9f2a198367d1008a5d88f27327fdf0fba0bd6db7777c6ca7b
# 这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!

#具名挂载
[root@VM-0-14-centos conf]# docker run -d -P --name nginx01 -v juming-ngninx:/etc/nginx nginx
e99712faffa6a6f4c315e50bb14b1432067795b0b3c2b949ea2bfc8769dfc93c
[root@VM-0-14-centos conf]# docker volume ls
DRIVER    VOLUME NAME
local     juming-ngninx

# 通过 -v 卷名:容器内路径
# 查看一下这个卷

在这里插入图片描述
所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/

# docker工作目录
[root@VM-0-14-centos conf]# cd /var/lib/docker
[root@VM-0-14-centos docker]# ls
buildkit    image    overlay2  runtimes  tmp    volumes
containers  network  plugins   swarm     trust

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用具名挂载

# 如何确定具名挂载还是匿名挂载,还是指定路径挂载!
-v 容器内路径 		#匿名挂载
-v 卷名:容器内路径		#具名挂载
-v 宿主机路径:容器内路径		# 指定路径挂载 

扩展

# 通过 -v 容器内路径:ro  rw 改变读写权限
ro  readonly 只读
rw readwrite 可读可写
# 一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:rw nginx

# ro 只能通过宿2主机操作

初认Dockerfile
Dockerfile

# 创建一个dockerfile文件并输入一下内容, 文件的内容指令(大写)
FROM centos 

VOLUME ["volume01","volume02"]

CMD echo "-----end-----"
CMD /bin/bash

# 构造镜像
[root@VM-0-14-centos dockerfile]# docker build -f /home/dockerfile/dockerfile01 -t home/cnetos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in a8be2ce9428c
Removing intermediate container a8be2ce9428c
 ---> 64d48c3e3521
Step 3/4 : CMD echo "-----end-----"
 ---> Running in d035351bfa2d
Removing intermediate container d035351bfa2d
 ---> 094249c97e7c
Step 4/4 : CMD /bin/bash
 ---> Running in 57976fed6748
Removing intermediate container 57976fed6748
 ---> ad892d7da4f0
Successfully built ad892d7da4f0
Successfully tagged home/cnetos:1.0

# 启动镜像
[root@VM-0-14-centos dockerfile]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
home/cnetos   1.0       ad892d7da4f0   5 minutes ago   209MB
mysql         5.7       6c20ffa54f86   27 hours ago    448MB
redis         latest    aa4d65e670d6   3 weeks ago     105MB
nginx         latest    08b152afcfae   3 weeks ago     133MB
mysql         latest    c60d96bd2b77   3 weeks ago     514MB
hello-world   latest    d1165f221234   5 months ago    13.3kB
centos        latest    300e315adb2f   8 months ago    209MB
[root@VM-0-14-centos dockerfile]# ls
dockerfile01
[root@VM-0-14-centos dockerfile]# docker run -it ad892d7da4f0

# 查看挂载
[root@VM-0-14-centos home]# docker inspect f301b52470ec
      "Mounts": [
            {
                "Type": "volume",
                "Name": "e710d20341dfe981db3106dae45f1c7dd290c7e23b15166e2e57985e96698734",
                "Source": "/var/lib/docker/volumes/e710d20341dfe981db3106dae45f1c7dd290c7e23b15166e2e57985e96698734/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "a1ee72f4e26d4ab8576374d4ea62b0750b59e96b64b1e02dae876719930a0eb4",
                "Source": "/var/lib/docker/volumes/a1ee72f4e26d4ab8576374d4ea62b0750b59e96b64b1e02dae876719930a0eb4/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

在这里插入图片描述

# 检查挂载是否成功,容器里创建文件
[root@f301b52470ec volume01]# touch index.php

# 查看宿主机有无
[root@VM-0-14-centos volumes]# cd /var/lib/docker/volumes/e710d20341dfe981db3106dae45f1c7dd290c7e23b15166e2e57985e96698734/_data
[root@VM-0-14-centos _data]# ls
index.php
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值