docker数据卷是经过特殊设计的目录,可以绕过联合文件系统(ufs),为一个或者多个容器提供访问

数据卷 = 宿主机(你的服务器)和 容器 之间共享数据的文件夹它的作用:让容器里的数据永久保存,不会因为容器删除而丢失

1、为什么使用数据卷

容器默认是临时的

  1. 你创建的 MySQL 容器,所有数据存在容器内部
  2. 一旦你删除容器 docker rm mysql,数据库里的所有数据全部清空,找不回来
  3. Nginx 容器的配置文件、网页文件,删容器也会丢

2、数据卷的特点

  1. 持久化:容器删除,数据不丢
  2. 共享:宿主机改文件,容器里同步生效
  3. 独立:数据和容器生命周期分离
  4. 高效:直接读写宿主机硬盘,速度快

3、最常用的数据卷

(1)命名数据卷

        Docker 自动管理文件夹,你不用管路径。       

(2)绑定挂载

        手动指定宿主机的文件夹映射到容器,适合Nginx,配置文件修改。

        ps:当你使用 手动映射(-v 宿主机目录:容器目录)时:宿主机的目录 会完全覆盖、遮挡 容器内原本的目录!

4、使用方式

[root@Anolis2 local]# docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Password123 -v mysql_data:/var/lib/mysql --restart=always mysql
66abb7c7ca4bc39cf697bac5f273f3866850d3ec765b2f73800873d6f268c1ff
 命名数据卷:mysql_data(宿主机) 映射 /var/lib/mysql(容器内MySQL数据目录)

[root@Anolis2 ~]# docker run -d --name nginx -p 80:80 -v /docker/nginx/html:/usr/share/nginx/html -v /docker/nginx/conf:/etc/nginx --restart=always nginx
d69f5c58197cb94bd373dfd873579bef881e1e4d0c79945ed2a758795c9a0c3e
挂载自定义目录

[root@Anolis2 ~]# curl 192.168.137.141:80
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.29.6</center>
</body>
</html>

[root@Anolis2 ~]# echo '111' > /docker/nginx/html/index.html
[root@Anolis2 ~]#
[root@Anolis2 ~]# curl 192.168.137.141:80
111
 

关闭所有容器

[root@Anolis2 ~]# docker ps -a | grep -v 'CONTAINER' |awk '{print $1}' |xargs docker rm -f
fb5105572092
66abb7c7ca4b
ea1bf2e74505
b39226bd2e46
 

描述nginx容器的元数据信息

[root@Anolis2 ~]# docker inspect nginx

查看卷

实现容器之间共享数据

[root@Anolis2 ~]# docker volume ls
DRIVER    VOLUME NAME
local     09a216255a85275c7de9b4d22f6ab6212ea1400347475623eec8ddcdd548c0c6
local     mysql_data
 

1.创建数据卷容器

[root@docker ~]# docker run -it -d -v /dbdata --name dbdata centos6 /bin/bash

bash-4.1# ls

bin dbdata etc lib media opt root selinux sys usr

boot dev home lib64 mnt proc sbin srv tmp var

[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

a8e8ca62ac4e centos6:latest "/bin/bash" 36 seconds ago Exited (0) 1 seconds ago dbdata

2.使用数据卷容器

[root@docker ~]# docker run -it -d --volumes-from dbdata --name web1 centos6 /bin/bash

bash-4.1# ls

bin dbdata etc lib media opt root selinux sys usr

boot dev home lib64 mnt proc sbin srv tmp var

[root@docker ~]# docker run -it -d --volumes-from dbdata --name web2 centos6 /bin/bash

bash-4.1# ls

bin dbdata etc lib media opt root selinux sys usr

boot dev home lib64 mnt proc sbin srv tmp var

bash-4.1# echo test > dbdata/index.html

bash-4.1# cat dbdata/index.html

test

可以有多个卷映射

可以映射配置文件

[root@localhost ~]# docker run --name web3 -v /mnt/default.conf:/etc/nginx/conf.d/default.conf -v /webroot:/usr/share/nginx/html -d nginx

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐