Dockerfile

一、dockerfile

1.通过dockerfile创建的都是镜像

2.创建镜像的方式:dockerfile为最基本的方式,最常用的方式

docker pull 拉取的是最基础的镜像,只有基础功能,没有定制化的功能

基于基础镜像,创建好了容器之后再容器内部进行定制化操作,然后导出成镜像,下一次继续使用

二、基于dockerfile创建:

1.联合文件系统:UnionFS 这是docker镜像的基础,镜像通过分层来进行集成,基于UnionFS可以制作各种具体的应用镜像。其特性:一次性同时的加载多个文件系统,但是从外边看只能看到一个文件系统也就是文件系统叠加

2.文件镜像加载的原理: 是由一层一层文件系统组成的分为rootfs和bootfs

rootfs: 根文件系统,包含了一个完整的文件系统(操作系统),包括了所有的文件和目录。以及相关的权限和用户等信息。运行容器时,整个的根文件系统就会整个被使用,作为应用的运行的环境。

bootfs:引导文件系统,启动根系统时需要加载的核心文件。

三、dockerfile定制化镜像:定制每一层需要添加的配置和文件,把每一层的修改,安装,构建和操作都写入到一个脚本,用脚本来进行创建镜像,这个脚本就是dockerfile。

1.dockerfile分为四个部分:

基础镜像消息(底层)

维护者消息(可有可无)

镜像的操作指令和相关配置

容器启动时执行的命令

2.dockerfile的命令:

FROM:永远是整个脚本第一个语法,作用就是指定定制镜像操作的基础系统。

MAINTAINER:维护者消息,可以不写,新版本用LABEL来代替。

RUN:在基础镜像上先运行的执行命令,然后把运行结果整合到新镜像当中,但是注意的是RUN就是一个镜像的分层,RUN越多分层就越多,镜像就越大,为了控制镜像的大小,多个RUN尽可能的写在一个RUN里面。

ENTRYPOINT:指定容器在启动时执行的命令或者参数

CMD:指定容器在启动时执行的命令或者参数

EXPOSE:指定容器对外暴漏的端口号

ENV:用来设置基础操作系统的环境变量,以便于RUN命令使用,或者是新镜像使用,就是给系统添加环境变量

ADD:可以支持URL从网络下载文件,也可以对压缩文件进行解压

COPY:只能复制本地文件(宿主机文件)到镜像的目标位置

VOLUME:创建一个容器内的挂载点,不是和宿主机进行挂载

USER:设置镜像运行时的用户

WOEKDIR:指定容器的工作目录,相当于到这个目录下做指定的操作

ONBUILD:指定一个镜像做为另一个镜像构建的基础时需要运行的命令

ARG:主要是用来传参,用户传递的参数,ENV是容器内部的参数

3.ENTRYPOINT与CMD区别:

ENTRYPOINT:有多个的情况下,只会运行最后一个

CMD:有多个的情况下,只会运行最后一个

如果二者同时存在,命令都会执行,ENTRYPOINT会覆盖CMD的命令,并且CMD会把参数传给ENTRYPOINT

做为容器启动时执行命令的语句,一般情况下二者是通用的,但是在传参的情况下需要加上CMD,如果没有特殊操作(传参的情况下),写一个CMD或者ENTRYPOINT即可,二者不要同时存在

CMD做为启动命令,运行容器时传了额外的参数,cmd会被覆盖,entrypoint不会被覆盖,容器运行指定的命令相当于给entrypoint传参

CMD展示

4.RUN在基础镜像运行然后把结果传给新镜像

优化RUN:&&:前一个指令成功才会执行下一个

优化也可以用分号:不管前面的成不成功后一个都会执行

优化也可以用 | |:前一个失败后一个才会执行,一般不用

反斜杠:把一个命令分成多个行,提高可读性

5.COPY和ADD

ADD:解压,.tr .tar.gz .zip;也可以根据URL下载;也可以复制,但是官方推荐使用copy,因为ADD不能复制压缩文件。

COPY:只能复制,复制本地文件到容器内

解压和复制必须要在dockerfile在同一目录下

四、工作目录和环境变量以及容器卷

1.工作目录:相当于切换到容器内的指定目录

WORKDIR工作目录

ENV环境变量

2.VOLUME:

3.yum安装订制一个nginx

相关推荐
天天进步20153 小时前
多线程与分布式:使用 Botasaurus 轻松构建大规模数据采集集群
分布式·爬虫
川西胖墩墩8 小时前
复杂任务的分布式智能解决方案
人工智能·分布式
2501_9418053110 小时前
使用Python和Go构建高性能分布式任务调度系统的实践分享
分布式·python·golang
徐先生 @_@|||11 小时前
数据分析体系全览导图综述
大数据·hadoop·分布式·数据分析
虹科网络安全12 小时前
艾体宝洞察 | 缓存策略深度解析:从内存缓存到 Redis 分布式缓存
redis·分布式·缓存
YE1234567_14 小时前
从底层零拷贝到分布式架构:深度剖析现代 C++ 构建超大规模高性能 AI 插件引擎的实战之道
c++·分布式·架构
笃行客从不躺平15 小时前
Seata + AT 模式 复习记录
java·分布式
像少年啦飞驰点、15 小时前
Java大厂面试真题:Spring Boot + Kafka + Redis 在电商场景下的实战应用
java·spring boot·redis·分布式·kafka·面试题·电商秒杀
徐先生 @_@|||16 小时前
基于Spark配置+缓存策略+Junpyter Notebook 实现Spark数据加速调试
大数据·分布式·缓存·spark
无心水16 小时前
【分布式利器:腾讯TSF】11、腾讯TSF微服务框架深度对比:全面解析TSF vs Spring Cloud vs Dubbo vs Service Mesh
分布式·spring cloud·微服务·dubbo·springcloud·service mesh·分布式利器