- 什么叫做数据卷容器?
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,
称之为数据卷容器 。 - 下面我们基于之前创建的镜像kgf/centos去创建3个容器,名称分别为dc01,dc02和dc03,这三个
容器的关系是dc02和dc03都继承与dc01,下面我们通过实例操作试一下。
⑴创建dc01的容器,命令:docker run -it --name dc01 kgf/centos
上面的dataVolumeContainer2和dataVolumeContainer目录是之前创建kgf/centos镜像
时建立的据数卷。那么现在我们在dataVolumeContainer2中创建一个文件。
⑵创建dc01的容器,继承dc01容器
命令:docker run -it --name dc02 --volumes-from dc01 kgf/centos
⑶创建dc03的容器,继承dc01容器
命令:docker run -it --name dc03 --volumes-from dc01 kgf/centos
⑷下面我们分别查看dc01,dc02中的数据卷情况。
通过上面我们可以发现,我们创建的dc01,dc02和dc03它们之间的关联数据卷中的
数据是可以数据共享的,不管是哪个容器的数据发成了变化,那么其它的两个容器
的数据也将会发生同样的改变。 - 那么基于上面我们创建的dc01,dc02和dc033个容器,如果我们将dc01删除掉,再去
修改dc02,那么dc03会不会发生数据同步呢?能不能获取到dc02修改后的数据呢?
⑴首先删除掉dc01容器
由上图可以发现我们删除了dc01这个父容器后,对dc02和dc03的文件没有产生
影响,文件都还存在。
⑵我们在dc02上新增一个文件试试
⑶结论:
容器之间的配置信息的传递,数据卷的生命周期一直会持续到没有容器为止。
这就叫做容器卷传递共享(--volumes-from)
- 什么是Dockerfile?
Dockerfile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本。 - 构建Dockerfile的三步骤:
a:编写Dockerfile文件
b:docker build去执行文件
c:docker run去运行生产的镜像 - Dockerfile的构建过程解析
⑴DockerFile内容基础知识
a:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
b:指令按照从上到下,顺序执行
c:#表示注释
d:每条指令都会创建一个新的镜像层,并对镜像进行提交
⑵Docker执行Dockerfile的大致流程
a:dcoker从基础镜像运行一个容器
b:执行一条指令并对容器做出修改
c:执行类似docker commit的操作提交一个新的镜像层
d:docker再基于刚提交的镜像运行一个新容器
e:执行dockerfile中的下一条指令直到所有指令都执行完成
⑶dockerfile的体系结构(保留字指令)
①FROM:表示基础镜像,当前新镜像是基于哪个镜像的。
例如:FROM tomcat -----》就是基于tomcat作为基础镜像的
②MAINTAINER:表示镜像维护者的姓名和邮箱地址
例如:MAINTAINER The Centos Project <cloud-ops@centos.org>
③RUN:表示容器构建时需要运行的命令
④EXPOSE:表示构建的容器启动后对外暴露的端口号
例如:EXPOSE 6379
⑤WORKDIR:表示指定在容器创建后,终端默认登录进来的工作目录,一个落脚点
例如:WORKDIR /data 表示当我们进入容器后默认就在/data这个目录下
⑥ENV:用来在构建镜像过程中设置环境变量
例如:ENV MY_PATH /usr/mytest 表示我们设置一个环境变量名称为MY_PATH,
值为/usr/mytest,那么我们后面就可以引用这个环境变量。比如我们在设置
落脚点的时候,WORKDIR $MY_PATH,那么登录进来后直接就是在/usr/mytest
目录下。
⑦ADD: 将宿主机目录下的文件拷贝进镜像并且ADD命令会自动处理URL和解压tar压缩包
例如:ADD centos-7-docker.tar.xz /
⑧COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录
复制到新的一层镜像内的<目标路径>位置。
例如:COPY src dest 或者 COPY ["src","dest"]
⑨VOLUME:容器数据卷,用于数据保存和持久化工作
⑩CMD:
a:表示指定一个容器启动时要运行的命令
b:Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后
的参数替代。
ENTRYPOINT:表示指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,
都是在指定容器启动程序及参数。
ONBUILD:表示当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的
onbuild被触发。 - 基于上面保留字的案例
⑴Base镜像(scratch)
Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。
⑵自定义镜像mycentos
①我们现在可以看看我们从网上下载下载的centos镜像原本是什么样子的
②下面我们编写我们的Dockerfile文件
a:在/tmp/mydocker目录下创建Dockerfile文件
b:编写文件内容
c:使用dockerfile文件构建新的镜像
命令:docker build -f /tmp/mydocker/Dockerfile -t mycentos:1.1 .
d:下面我们运行新建的镜像
命令:docker run -it mycentos:1.1
e:使用docker history +镜像ID 查看镜像详细信息
- ONBUILD命令案例
⑴简介
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。
⑵简单案例:
docker数据卷容器以及Dockerfile学习
于 2018-11-03 16:27:21 首次发布