数据卷:
1、将宿主机目录挂载到容器目录
数据卷的特点:
01、在容器启动初始化时,如果容器使用的宿主机挂载点有数据,这些数据就会拷贝到容器中
02、数据卷可以在容器直接共享和重用
03、可以直接对数据卷里的内容进行修改
04、数据卷的变化不会影响镜像的更新
05、卷会一直存在,即使挂载数据卷的容器已经删除
示例:
1-1、创建一个web01的容器,挂载宿主机根目录下的/container_data/web到容器目录的data下
docker run -itd --name web01 -v /container_data/web:/data Ubuntu
1-2、创建一个web02的容器,挂载宿主机根目录下的/container_data/web到容器目录到data下
docker run -itd --name web02 -v /container_data/web:/data Ubuntu
1-3、在宿主机被挂载目录下创建一个文件,在容器内查看,修改后再次查看
echo hello >/container_data/web/index.php
docker exec web01 ls /data/
docker exec web02 ls /data/
echo 123123 >>/cotainer_data/web/index.php
docker exec web01 ls /data/
docker exec web02 ls /data/
2、容器数据卷(把一个容器作为数据卷挂载到其他容器共享)
2-1、创建一个名为data的数据卷容器、创建一个web01的容器,并挂在容器数据卷data
docker run -itd -v /data --name data ubuntu
docker run -itd --name web01 --volumes-from data ubuntu
2-2、在数据卷容器data中添加文件、查看数据卷中是否成功添加文件、查看web01中挂在的数据、再创建容器挂在容器数据卷、查看容器web02的数据。
docker exec data touch /data/index.php
docker exec data ls /data/
docker exec data ls /data/
docker run -itd --name web02 -volumes-from data ubuntu
docker exec web02 ls /data/
4、管理应用程序数据
4-1:
1> : -Volume 管理数据卷:(可以多个容器共享一个数据卷)
docker volume create nginx-vloume
docker volume ls (查看数据卷)
docker volume inspect nginx-volume (查看数据卷想详细信息)
docker volume --help
2>用数据卷创建一个容器
docker run -itd --name nginx1 -p88:80 --mount src=nginx-volume,dst=/var/www/html richarvey/nginx-php-fpm
docker volume inspect nginx-volume
ls /var/lib/docker/volumes/nginx-volume/_data (查看数据卷内到内容)
3>不指定数据卷:(匿名卷)
docker run -itd --name nginx1 -p88:80 --mount src=,dst=/var/www/html richarvey/nginx-php-fpm
4>清理:
docker container stop nginx
docker container rm nginx1
docker volume rm nginx-volume
5>如果没有指定数据卷(匿名卷),系统自动创建。建议使用--mount参数,更通用
4-2: bind mount
1>用卷创建一个容器
docker run -itd --name=nginx11 --mount type=bind,src=/www/html,dst=/var/www/html richarvey/nginx-php-fpm
docker run -itd --name=nginx12 -v /www/html/:/var/www/html richarvey/nginx-php-fpm
2>验证绑定:
docker inspect nginx11
3>清理:
docker container stop nginx11
docker container rm nginx11
4>注意:
a、如果源文件/目录不存在,不会自动创建,抛出error
b、如果挂载目标在容器中是一个非空目录,则改目录现有文件回被隐藏