• 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 查看历史信息

     
  • 相关阅读:
    2020.11.9
    2020.11.6
    2020.11.5
    2020.11.2
    建站纪念
    退役记——CCC2020&CCO2020
    BZOJ2809&&LG1552 APIO2012派遣(线段树合并)
    BZOJ4668 冷战(LCT维护最小生成树)
    BZOJ3926&&lg3346 ZJOI诸神眷顾的幻想乡(广义后缀自动机)
    BZOJ4566&&lg3181 HAOI找相同字符(广义后缀自动机)
  • 原文地址:https://www.cnblogs.com/ZhaoLong-study/p/13587214.html
Copyright © 2020-2023  润新知