docker持久化

补充一点点删除容器知识,规范:
先将容器stop停止:
docker stop 容器id(dsdsa12131)
然后再执行删除容器的命令:
docker rm 容器id

Docker 支持的三种数据挂载方式

volume:docker管理宿主机文件系统的一部分(只能存放在docker区域中,有限制)
bind mounts:可以存储在宿主机系统的任意位置
tmpfs mounts:挂载存储在宿主机系统的内存中,不会写入宿主机的文件系统(linux内存中)

volume(普通数据卷)

1.创建volume数据卷:
docker volume create for_nginx
for_nginx:数据卷的名称
2.查看volume数据卷
docker volume ls
3.启动容器并指定数据卷:
docker run -d -p 80:80 --mount type=volume,source=for_nginx,target=/usr/share/nginx/html nginx
--mount type:挂载类型
source:挂载的卷的名称
target:挂载的目标位置
nginx:镜像的名称
上面没有解释的指令在前面的docker相关文章中介绍过了,这里就不一一介绍了
4.查看容器的具体信息
docker inspect 容器id
找到mount查看我们刚刚做的配置
5.输入命令:echo "hello world " > hello.html
echo "":代表保存双引号中的内容

hello.html:代表创建hello.html文件
6.在浏览器中输入
http://****:port/hello.html
***:代表你当前的linux的ip地址
port:代表你的nginx对外暴露的端口号

bind mounts(绑定数据卷)

1.讲宿主机/opt目录挂载到容器内:
docker run -d -p 80:80 --mount type=bind,source=/test,target=/usr/share/nginx/html nginx
这些命令之前都说过了,请看之前的文章内容
2.进入容器查看nginx默认html页面
docker exec -it dfewewadsad121 /bin/bash
发现并没有nginx默认的index.html和50.html,但浏览器可以正常显示Welcome to nginx!
注意:如果你使用bind mounts挂载宿主机目录到一个容器中的非空目录,那么此容器中的非空目录中的文件会被隐藏,容器访问这个目录中时能够访问到的文件均来自于宿主机目录

tmpfs mounts(临时数据卷)

1.创建临时数据卷命令
docker run -d -p 80:80 --mount type=tmpfs,target=/usr/nginx/html nginx

总结:三种存储方式使用场景

volume:多个运行容器间共享数据
当docker 主机不确保具有给定的目录或文件
备份,恢复,或将数据从一个docker主机迁移到另一个docker主机时

bind mount:
主机与容器共享配置文件(docker默认情况下通过这种方式为容器提供dns解析,通过将/etc/resolv.conf挂载到容器中)
共享源代码或build artifacts(比如将maven的target/目录挂载到容器中,每次在docker主机中build maven工程时,容器能够访问到那些rebuilt artifacts)
当docker主机中的文件或目录结构和容器需要的一致时

tmpfs mount:
既不是将数据存于主机,又不想存于容器中时(这可以是出于安全的考虑,或当应用需要写大量非持久性的状态数据时为了保护容器的性能)

posted @ 2022-01-04 21:26  rookiexwang  阅读(67)  评论(0编辑  收藏  举报