【Docker】Docker进阶--容器数据卷

本文详细介绍了Docker容器数据卷的使用,包括数据卷的好处、通过命令行挂载数据卷的方式,以及如何实现MySQL数据的持久化。还探讨了匿名挂载与具名挂载的区别,并讲解了在Dockerfile中定义数据卷的方法,以确保数据的安全与便捷管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器数据卷

(一)什么是容器数据卷

1、容器卷好处

以后修改只需要在本地修改即可,容器内会自动同步

(二)挂载方式一:使用命令来挂载 -v

docker run -it -v [宿主机目录]:[容器目录] [镜像名字] /bin/bash

1、启动并进入容器

#启动并进入容器
root@ubuntu-xenial:/home/wqx# docker run -it -v /home/ceshi:/home/ centos /bin/bash

#查看本机home目录,已经存在了ceshi目录,说明挂载成功了

2、查看宿主机home目录,已经有了/ceshi目录,说明挂载成功了

root@ubuntu-xenial:/home# ll
total 28
drwxr-xr-x  7 root    root    4096 Aug 25 02:11 ./
drwxr-xr-x 26 root    root    4096 Aug 24 02:34 ../
drwxr-xr-x  2 root    root    4096 Aug 25 02:11 ceshi/
drwxr-xr-x  3 userftp userftp 4096 Aug 17 07:33 userftp/
drwxr-xr-x  4 vagrant vagrant 4096 Aug 25 02:11 vagrant/
drwxr-xr-x  3 root    root    4096 Aug 24 07:50 wqx/

3、查看容器信息 docker inspect 0380f85ec7bb

root@ubuntu-xenial:/home# docker inspect 0380f85ec7bb
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",      #主机内地址
                "Destination": "/home",             #docker容器内的地址
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

4、测试

在宿主机/home/ceshi目录下增加一个文件

#在宿主机/home/ceshi目录下增加一个文件
root@ubuntu-xenial:/home/ceshi# touch wqx.php
root@ubuntu-xenial:/home/ceshi# ll
total 8
drwxr-xr-x 2 root root 4096 Aug 25 02:19 ./
drwxr-xr-x 7 root root 4096 Aug 25 02:11 ../
-rw-r--r-- 1 root root    0 Aug 25 02:19 wqx.php

然后在容器内/home目录下查看,也已经出现了同样的一个文件。

[root@0380f85ec7bb home]# ls
wqx.php
[root@0380f85ec7bb home]# 

5、Mysql数据持久化

(1)获取镜像

docker pull mysql:5.7

(2)运行容器,并做数据挂载

官方命令:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

#启动我们自己的mysql
-d                  # 后台运行
-p                  # 端口映射
-v                  # 卷挂载
-e                  # 环境配置
--name              # 容器名字
root@ubuntu-xenial:/home/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连接容器中的mysql,测试成功,添加一个test数据库,在主机的/home/mysql/data目录下,可以看到已经有test信息

即使将容器删除,主机存放的数据还是存在,就可以实现Mysql的数据持久化了。

6、匿名挂载和具名挂载

(1)匿名挂载

docker run -d -v [容器内路径]

(2)具名挂载

docker run -d -v [卷名]:[容器内路径]

(3)查看卷(volume)信息

docker volume inspect [卷名]

所有的docker容器内的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes/**/_data目录下。
通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的是具名挂载

(4)拓展
  • ro readonly,只读
  • rw readwrite,可读可写
docker run -d -P --name nginx -v wqx-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx -v wqx-nginx:/etc/nginx:rw nginx

一旦设置了容器权限,容器对我们挂载出来的内容就有限定了。如果设置了ro权限,就说明这个路径只能通过宿主机来操作,容器内部是无法操作的。

(三)挂载方式二:Dockerfile

Dockerfile就是用来构建dockr镜像的构建文件。
简单写一个dockerfile脚本。

FROM centos
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash

里面每一个命令,就是镜像的一层。
通过dockerfile启动容器 docker build -f /home/docker-test-volume/dockerfile -t wqx/centos:1.0 .

root@ubuntu-xenial:/home/docker-test-volume# docker build -f /home/docker-test-volume/dockerfile -t wqx/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in e8f889920880
Removing intermediate container e8f889920880
 ---> 51b9e3840f47
Step 3/4 : CMD echo "---end---"
 ---> Running in cabe2101c3b5
Removing intermediate container cabe2101c3b5
 ---> e262b693a79a
Step 4/4 : CMD /bin/bash
 ---> Running in c69bc9ca79ae
Removing intermediate container c69bc9ca79ae
 ---> 68a74b5c7007
Successfully built 68a74b5c7007
Successfully tagged wqx/centos:1.0
root@ubuntu-xenial:/home/docker-test-volume# 

执行完成后,查看镜像

root@ubuntu-xenial:/home/docker-test-volume# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
wqx/centos    1.0       68a74b5c7007   2 minutes ago   209MB

启动自己的镜像
docker run -it wqx/centos /bin/bash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值