Docker_容器数据卷

docker将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的,容器之间希望可以共享数据

Docker容器产生的数据,如果不通过docker commit 生成新的镜像,使得数据作为镜像一部分保存下来,当容器停止或者删除之后,数据自然就没有了

为了能够能够在Docker容器中保存数据,使用

作用

  • 容器持久化
  • 容器间继承和共享数据

目录或者文件,存在于一个或者多个容器中,由docker挂载到容器

不属于UnionFS,因此可以绕过UnionFS  提供一些用于持久存储和共享数据的特性

卷的设计目标就是数据持久化,完全独立于容器的生存周期,docker不会在容器删除时删除其挂载的数据卷

特点

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

数据卷操作

docker run -it -v /mydataVolume:/dataVolumeContainer centos
docker run -it -v 宿主机目录:容器内目录 容器ID或容器名称
docker run -it -v 宿主机目录:容器内目录:ro 容器ID或容器名称  只读

 目录会在宿主机和容器内自动创建

实现了宿主机和容器内数据的共享

容器退出后,对应宿主机目录内部的数据修改后,再次开启容器,对应的目录中的数据也发生了变化,容器停止退出后,主机修改后数据依然同步

Value指令

Value [容器目录1, 容器目录2, ...]

由于宿主机的目录依赖于特定的宿主机,并不能保证所有宿主机上都存在这样的特定目录

出于可移植和分享的考虑,使用 -v 主机目录: 容器目录 指令不能够直接在dockerfile中实现,只能在docker命令中

  1. 宿主机上建立目录
  2. 在dockerfile中使用Volume指令来给镜像添加一个或多个数据卷
  3. File构建
  4. build后生成镜像
  5. run容器

Build 生成镜像

Docker build -f  FIle文件  -t 创建的容器名 目录
docker build -f /mydocker/Dockerfile  -t zl/centos .

数据容器卷

命令的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享

挂载数据卷的容器成为“数据容器卷”

容器间传递共享---volume-from

docker run -it --name dc02 --volumes-from dc01  zl/centos
  • dc01 数据容器卷
  • dc02 挂载dc01容器,继承dc01的数据卷和数据
  • dc01也共享了dc02创建的数据

数据共享

  1. 容器之间的配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

Docker file

用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本

创建流程 编写-构建-执行

  1. 手动编写一个dockerfile必须符合file的规范,关键字必须大写
  2. docker build -t 新的镜像:tag
  3. docker run 运行

基础知识

  1. 每条保留字指令都必须大写后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. # 表示注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

执行流程

  1. Docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似commit的操作提交一个新的镜像层
  4. docker再基于刚才提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条执行知道所有执行都执行完成

关系

Dockerfile, Docker镜像,Docker 容器代表软件的三个阶段

  • Dockerfile 软件的原材料,面向开发
  • Docker Image:软件的交付品,交付标准
  • Docker Container:软件的运行状态, 部署和运维

Docker File 保留字指令

  • From 基础镜像,当前编写的镜像基于哪个镜像
  • Maintainer:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令
  • EXPOSE: 当前容器对外暴露的端口
  • WOEKDIR: 指定在创建容器后,终端默认登陆的进来的工作目录,一个落脚点
  • ENV:用来在构建镜像过程中设置环境变量,  环境变量可以在后续的任何RUN指令中使用
  • ADD:拷贝+解压缩;将宿主机目录下的文件拷贝进镜像且ADD命令自动处理URL和加压Tar压缩包
  • COPY:类似ADD,拷贝文件和目录到镜像中,将从构建上下文目录中<源文件>的文件/目录复制到新的一层的镜像内的<目标路径>位置
    • CPOY SRC DEST
    • CPOT ["SCR", "DEST"]
  • VOLUMN:容器数据卷,用户数据保存和持久化
  • CMD: 指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但是只有最后一个生效,CMD会被Docker run 之后的参数替换
  • ENTERPOINT:指定一个容器启动时要运行的命令,Docker run 的参数不会覆盖,会追加,docker run之后的参数会被做当参数转递给ENTERPRPOINT,之后形成新的命令组合
  • ONBUIDL:触发器,当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

https://github.com/nextcloud/docker/blob/ce0bb40cd97da98b6d0f89089b8b1d1a8d0bb17b/15.0-rc/apache/Dockerfile

Base 镜像

Base镜像 scratch : Docker Hub 中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

Docker history 镜像ID 查看历史信息

 
原文地址:https://www.cnblogs.com/ZhaoLong-study/p/13587214.html