docker镜像原理
联合文件系统:UnionFS
略 ...
镜像commit
提交容器副本使之成为新的镜像
docker commit
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名字:[标签名]
容器数据卷
在容器停止时,将容器需要的数据,保存到主机目录中的概念
主要进行数据共享,数据持久化工作.
例如: 可以将 mysql 的 配置文件:my.cnf 映射到 宿主机的目录.之后. 可以在宿主机修改,
docker 会将修改 同步到 容器内的mysql 的 my.cnf配置文件
俩种方式: 命令添加,DockerFile 编写
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v/myData:/etc/mysql mysql
查看数据卷是否挂在成功
docker inspect 容器ID
我们在容器中修改创建的一切行行为都会反映到宿主机中
我们在宿主机的修改 也会同步到 容器内. 就算容器已经停止,再次启动时会 进行同步
带权限
docker run -it -v /myData:/conMyData:ro 镜像ID
容器数据卷的数据只支持宿主机查看修改
DockerFile添加数据卷
这里没有接触到DockerFile的编写. 这里简单介绍一下
这里使用DockerFile添加数据卷,不能指定宿主机映射目录
编写DockerFile
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumetainer2"]
CMD echo "finished,------success"
CMD /bin/bash
build DockerFile
docker build -f mycentos -t 命名空间 .
-f: 指docker file 在哪里
-t 生成的镜像名字
. 指当前目录
使用
docker run -it /bin/bash
因为运行并没有指定 数据卷映射目录. docker 自动在宿主机默认了数据卷的目录
不能写错误
在数据卷内,不能建立文件或编译文件
遇到不能写错误,在 run 最后添加 --privikeged=true 参数即可
数据卷容器
命名的容器挂在数据卷. 其他的容器通过挂在这个 容器,实现数据共享. 成为数据卷容器
--volumes-from
案例
1. 启动父容器
docker run -it --name doc1 mycentos
touch 01.txt
2. 容器实例2 继承容器1,来自 mycentos 镜像
docker run -it --name doc2 --volumes-from doc1 mycentos
3. 运行第三个容器
docker run -it doc3 --volumes-from doc1 mycentos
图片是 命令执行流程
删除测试
删除 doc1 容器. doc2 和 doc3 的数据卷数据还在. 而且数据还可以共享.
在运行 doc4 容器. 之后将 doc3 删除. doc4 还会存在. 数据卷共享功能还能继续使用