前述
JAVAEE Hello.java--->Hello.class
.class 是对 .java一种码集的描述
Docker images--->DockerFile
DockerFile 是对 images一种云码集的描述
DockerFile是镜像的一种描述,类似于我们.class 是对 .JAVA的一种描述。
DockerFile
概述:
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤:
1:编写Dockerfile文件
2:Docker bulid 构建
3:Docker run 运行
为什么要用DockerFile
因为:
1:处于可移植和分享的考虑,用 -v 主机目录:容器目录 这种方法不能够直接在DockerFile中实现。
2:由于宿主机目录是依赖于特定的宿主机,并不能够保证在所有的宿主机上都存在这样的特定目录。
数据卷容器
概述:
命名的容器挂载数据卷,其它容器通过这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
也就是说数据卷当作一个移动盘,而这个移动盘叫做数据卷容器。
特点:
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
容器之间实现数据共享
关键字:--volumes-from 被指向的镜像名
DockerFile构建过程解析
Dockerfile内容基础知识:
1:每条保留字指令都必须为大写且后面要跟随至少一个参数
也就是指令后面必须有内容,否则会报类似Java中空指针异常,报出Docker语法格式错误
2:指令按照从上至下顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交。
Docker执行Dockerfile的流程:
1:Docker从基础镜像中运行一个容器
2:执行一条指令并对容器作出修改
3:执行类似 Docker commit的操作提交一个新的镜像层
4:Docker再基于刚提交的镜像运行一个新容器
5:执行 Dockerfile 中下一个指令,直到所有指令都执行完毕
小结:
从应用软件的角度来看,Dockerfile,Docker镜像与Docker容器分别代表软件的三个不同阶段。
1:Dockerfile 是软件的原材料
2:Docker 镜像是软件的交付品
3:Docker 容器则可以认为是软件的运行态。
Docker是面向开发,Docker 镜像成为了交付的标准,Docker容器则涉及到部署与运维,三者缺一不可,合力充当Docker体系的基石。
1:Dockerfile,需要定义一个Dockerfile,Dockerfile 定义了进程需要的一切东西。
Dockerfile涉及的内容包含执行代码/文件和环境变量 依赖包 运行时环境 动态链接库 操作系统的发行版,以及服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace的权限控制 )等等。
2:Docker 镜像,在 Dockerfile定义一个文件之后,Docker bulid 时会产生一个Docker 镜像,当运行 Docker 镜像时,会真正开始提供服务。
3:Docker 容器,容器是直接提供服务的。
DockerFile体系结构(保留字指令)
FROM
---基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER
---镜像维护者的姓名和邮箱地址
RUN
---容器构建时需要运行的命令,也就是在构建中需要做的一些额外的命令。
EXPOSE
---当前容器对外暴露出的端口
WORKDIR
---指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点。
---若没有指定,则落到根目录。
ENV
---用来在构建镜像过程中设置环境变量。
ADD
---将宿主机目录下的文件拷贝进镜像
---ADD命令会自动处理URL和解压 tar压缩包
COPY
---类似 ADD,拷贝文件和目录到镜像中。
---将从构建上下文目录中<源路径>的文件 /目录复制到新的一层镜像内的<目标路径>位置
---语法格式:
语法格式1:COPY 源路径 目标路径
语法格式2:COPY[ "源路径","目标路径"]
VOLUME
---容器数据卷,用于数据保存和持久化工作。
---VOLUME["容器已存在的文件路径1","容器已存在的文件路径2","容器已存在的文件路径3"]
---当某个镜像内使用了 VOLUME指令,则在运行立刻在这个容器建立两个容器卷
注意:
只要宿主机和容器之间的挂载成功,两者之间的数据即同步。
容器停止退出后,主机修改后的数据依然会同步到容器中。
CMD
---指定一个容器启动时要运行的命令
---Dockerfile 中可以有多个 CMD指令,但只有最后一个生效,CMD 会被 Docker run 之后的参数替代。
---语法格式:
shell 格式:CMD <命令>
exec 格式:CMD [ "可执行文件","参数1","参数2".... ]
参数列表格式:CMD [ "参数1","参数2"....]
参数列表格式,需要在 指定了 ENTRYPOINT 指令后,用CMD 指定具体的参数。
ENTRYPOINT
---指定一个容器启动时要运行的命令
---ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数。
---CMD 会被 Docker run之后的参数替换。而ENTRYPOINT 则为 追加方式
---docker run 之后的参数会被当作参数传递给 NETRYPOINT ,之后形成新的命令组合
ONBUILD
---当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbild 被触发。
---也就是说,父镜像打算如果有人继承自它之后做某事情,则可以用这个。也就是一个被继承的触发器。
跳转门:
Docker入门第二章:https://blog.csdn.net/weixin_41123719/article/details/84729067
Docker入门第二章:https://blog.csdn.net/weixin_41123719/article/details/84729206
Docker入门第三章:https://blog.csdn.net/weixin_41123719/article/details/84726840
Docker入门第四章:https://blog.csdn.net/weixin_41123719/article/details/84726869
Docker入门第五章:https://blog.csdn.net/weixin_41123719/article/details/84726953
Docker入门第六章:https://blog.csdn.net/weixin_41123719/article/details/84727051