docker2-docker存储持久化

版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/82181629

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储
层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者
绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发
生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷
后,容器可以随意删除、重新 run ,数据却不会丢失

 

镜像分层

[[[[接docker1内容]]]]]docker每一行都产生一个新层(RO:可读,RW:可写)

Volume             提供独立于容器之外的持久化存储

容器中的改动 缺省是不会保存的,Volume可以提供容器之间的共享数据

第一种持久化方式:

docker run -d --name nginx -v /usr/share/nginx/html nginx

容器运行之后检查    nginx为容器名

docker inspect nginx

mac下不能打开这个位置(linux下可以正常打开)

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

问题解决来源:stack overflow[mac下docker数据在哪里?]

第二种持久  数据卷

ps:

-p   把容器80端口映射为宿主8888端口   

-v 把当前   $PWD/code   的目录  挂载到   容器内   /var/www/html

mkdir code
touch Dockerfile
docker build -t my-nginx .
docker run -d -p 8888:80 -v $PWD/code:/var/www/html my-nginx

mysql实例

docker run -p 3306:3306 --name mymysql-v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql-containername

在容器启动时  改变宿主机内文件内容 ,容器内容随之改变

第三种持久化方式

创建

unbuntu 为基础镜像,如果没有会从仓库下载,

mkdir data
docker create -v $PWD/data:/var/mydata --name data_container ubuntu

从另一个容器加载这个卷(ubuntu为基础镜像    -it)

docker run -it --volumes-from data_container ubuntu /bin/bash

猜你喜欢

转载自blog.csdn.net/qq_36762677/article/details/82181629
今日推荐