Docker——数据卷
docker数据卷是经过特殊设计的目录,可以绕过联合文件系统(ufs),为一个或者多个容器提供访问
数据卷 = 宿主机(你的服务器)和 容器 之间共享数据的文件夹它的作用:让容器里的数据永久保存,不会因为容器删除而丢失
1、为什么使用数据卷
容器默认是临时的:
- 你创建的 MySQL 容器,所有数据存在容器内部
- 一旦你删除容器
docker rm mysql,数据库里的所有数据全部清空,找不回来 - Nginx 容器的配置文件、网页文件,删容器也会丢
2、数据卷的特点
- 持久化:容器删除,数据不丢
- 共享:宿主机改文件,容器里同步生效
- 独立:数据和容器生命周期分离
- 高效:直接读写宿主机硬盘,速度快
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
更多推荐

所有评论(0)