docker Volume

对于docker来讲,作为容器运行的底层引擎,在组织及运行容器时每个容器内只运行一个程序及子程序。对于这个容器来讲,启动时依赖于 底层镜像联合挂载启动而成。 底层能够存储此类分层构建并联合挂载镜像的文件系统。最上层构建读写层。对于此读写层来说。所有对容器的操作都保存在最上层之上。而下层内容的操作需要使用写时复制。 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层,如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即 写时复制(COW)机制。此机制对IO较高的应用在实现持久化存储时,势必对在底层应用数据存储时性能要求较高。要想绕过使用限制,可以使用存储卷机制。 Why Data Volume? 宿主机的主机文件系统直接与容器内部的文件系统之上的某一访问路径建立绑定关系。 在宿主机上目录和容器内文件系统建立绑定关系的目录相对于容器来讲被称为volume。容器内所有有效数据都是保存在存储卷,从而脱离容器自身文件系统。当容器关闭并删除时,只要不删除与宿主机与之绑定的存储目录,就能实现数据脱离容器的生命周期而持久化。docker的存储卷默认情况下使用其所在宿主机之上的本地文件系统目录的。 关闭并重启容器,其数据不受影响;但删除Docker容器,则其更改将会全部丢失 存在的问题 存储于联合文件系统中,不易于宿主机访问; 容器间数据共享不便 删除容器其数据会丢失 解决方案:“卷(volume)” “卷”是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某目录“绑定(关联)” 在docker中如果需要动刀存储卷时,不必要手动创建,Volume于容器初始化之时即会创建,由base image提供的卷中的数据会于此期间完成复制 Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之时既不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作; Data volumes ·卷为docker提供了独立于容器的数据管理机制 ·可以把“镜像”想像成静态文件,例如“程序”,把卷类比为动态内容,例如“数据 “;于是,镜像可以重用,而卷可以共享; ·卷实现了“程序(镜像)”和“数据(卷)”分离,以及“程序(镜像)”和“制作镜像的主机 “分离,用户制作镜像时无须再考虑镜像运行的容器所在的主机的环境; Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同; Bind mount volume 绑定挂载卷 在宿主机指定一个特定路径,在容器内指定一个特定路径,二者已知路径建立关联关系。 a volume that points to a user-specified location on the host file system Docker-managed volume docker管理卷 指定容器内的挂载点,与之关联的是宿主机的目录由docker daemon引擎自行创建空目录,或者使用已存在目录与存储卷路径建立关联关系。 the Docker daemon creates managed volumes in a portion of the host’s file system that’s owned by Docker 在容器中使用Volumes 为docker run命令使用一v选项即可使用Volume...

 ·  · 

docker-compose使用

Compose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用 什么镜像、数据卷、网络、映射端口等;然后一条命令管理所有服务,比如启动、停止、重启等。 1、Linux安装Compose 参考网址:Releases · docker/compose · GitHub 下载二进制文件 bash 1 2 3 curl -L \ https://github.com/docker/compose/releases/download/1.22.0/docker-compose-\ `uname -s`-`uname -m` -o /usr/local/bin/docker-compose 对二进制文件添加可执行权限 bash 1 chmod +x /usr/local/bin/docker-compose 测试安装 docker-compose –version 也可以使用pip工具安装:pip install docker-compose 2、使用compose 参考文档:Docker Compose | Docker Documentation compose语法详解:Compose file version 3 reference | Docker Documentation Docker compose file 中文参考文档 - CSDN博客 2.1 Compose常用命令选项 参数 介绍 build 构建或修改Dockerfile后重建服务 config 验证和查看compose文件语法 -q,只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 --services,打印服务名,一行一个 create down 停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除 容器 网络。 logs 打印compose service日志输出。 ps 打印compose进程,-q只打印pid 更多参数参考:Docker-compose命令详解 - CSDN博客...

 ·  · 

docker-compose示例

使用docker-compose构建LNMP环境。 编写Dockerfile 这里采用的是先将nginx php打包为rpm包,然后做成镜像。与直接在容器里编译安装同理的。 nginx Dockerfile bash 1 2 3 4 5 6 7 8 FROM centos MAINTAINER lc RUN yum install -y gcc gcc-c++ openssl-devel make pcre-devel ADD nginx-1.13.9-1.el7.centos.x86_64.rpm /tmp/ RUN cd /tmp/ && rpm -ivh nginx-1.13.9-1.el7.centos.x86_64.rpm ADD nginx.conf /etc/nginx/ EXPOSE 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"] php Dockerfile bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 FROM centos MAINTAINER LC RUN curl -o /etc/yum....

 ·  · 

Dockerfile使用示例

一、使用前提 通用镜像未必与应用程序和配置是符合我们需要的。 1.1 常见镜像制作方式 常见制作镜像方式有两种 基于容器 基于镜像制作:编辑一个Dockerfile,而后根据此文件制作; 二、Dockerfile概述 Dockerfile只是构建Docker镜像的源代码,docker可以通过读取Dockerfile中的指令自动构建图像。Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。用户可以使用 docker build 创建连续执行多个命令行指令的自动构建。 2.1 Dockerfile的工作模式 基于Dockerfile制作镜像时,需在专用目录放置Dockerfile文件,并且文件首字母必须大写。基于Dockerfile中打包的文件必须奇基于工作目录往下走的路径。在打包镜像时,.dockeringore 文件本身与所有包含在 .dockeringore 文件中的路径,都不被打包进去。在Dockerfile制作环境为底层镜像启动容器时所能够提供的环境。 2.2 环境变量替换 制作镜像中还可以使用环境变量。环境变量(使用ENV语句声明)也可以在某些指令中使用,因为Dockerfile环境变量在 Dockerfile 中以 $variable_name 或${variable_name}标记。 语法还支持一些标准`bash修饰符 ${variable:-word} 表示如果设置了变量,那么结果将是该值。如果未设置变量,那么word将是结果。 ${variable+word} 表示如果设置了变量,则word将是结果,否则结果为空字符串。 三、Dockerfile指令说明 特别说明:Dockerfile中每一条指令都会生成一个新的镜像层。 FROM FROM指令(最重要的一个),必须为Dockerfile文件开篇的第一个非注释行,用于为镜像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指定的镜像文件,在其不存在时,则会从 Docker Hub Registry 上拉取所需的镜像文件。如果找不到指定的镜像文件,docker build 会返回一个错误信息 Syntax: sh 1 FROM repository[:tag] sh 1 FROM registry/repository[:tag] bash 1 FROM resository@[digest] #←相同名称时,可以使用resository@镜像hush码指定镜像。 参数 说明- reposotiry 某一个镜像的仓库,如redis镜像仓库。 registry docker镜像仓库,如docker hub,docker registry包含很多reposotiry,如nginx php tomcat等。不指定registry,默认从docker hub下载。 tag image的标签,为可选项,省略时默认为latest。 MAINTANIER(depreacted) MAINTANIER(depreacted)用于让Dockerfile制作者提供本人的详细信息。Dockerfile并不限制MAINTAINER指令可在出现的位置,但推荐将其放置于FROM指令之后。...

 ·  · 

Docker跨宿主机网络通信

Docker Overlay Network Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。 因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。 要想使用Docker原生Overlay网络,需要满足下列任意条件 Docker 运行在Swarm 使用键值存储的Docker主机集群 使用键值存储搭建Docker主机集群 使用键值存储的Docker主机集群,需满足下列条件: 集群中主机连接到键值存储,Docker支持 Consul、Etcd和Zookeeper 集群中主机运行一个Docker守护进程 集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员 集群中linux主机内核版本在3.12+,支持VXLAN数据包处理,否则可能无法通行 部署docker内置的OverLAY网络 环境准备说明 host ip- node01 10.0.0.15 node02 10.0.0.16 安装Consul 下载地址:Download Consul 启动命令 bash 1 2 3 4 5 6 7 8 consul agent -server -bootstrap -ui -data-dir /data/docker/consul \ -client=10.0.0.16 -bind=10.0.0.16 docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h consul progrium/consul -server -bootstrap -ui-dir /ui #-ui : consul 的管理界面 #-data-dir : 数据存储 配置docker链接consul bash 1 2 3 4 5 ExecStart=/usr/bin/dockerd \ -H tcp://0....

 ·  ·