docker2-docker存储持久化|数据管理

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

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化

查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。

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

镜像分层

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

Volume 提供独立于容器之外的持久化存储
容器中的改动 缺省是不会保存的,Volume可以提供容器之间的共享数据

第一种持久化方式 -v:

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

问题解决来源 https://stackoverflow.com/questions/38532483/where-is-var-lib-docker-on-mac-os-x

第二种持久 数据卷

ps:

当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

-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/88429114