Docker_03_Dockerfile

@

Dockerfile

DockerFile:基于DSL(Domain Specific Language)语法,构建Docker镜像

1)本质:通过脚本定义文件和docker bulid命令构建镜像;

2)文件中一行一个命令(每个命令代表一层镜像);

3)文件中的各种命令都必须是大写的


通过Dockerfile上传镜像流程:

1)编写DockerFile文件;

2)使用Docker build使脚本文件生成镜像;

3)使用Docker run运行镜像;

4)使用Docker push 发布镜像(公有或私有)

Dockerfile构建

Dockerfile和docker bulid构建镜像流程:

1)创建用于存储Dockerfile文件的目录(每个Dockerfile独占一个目录);

2)在创建目录下,创建并编写Dockerfile文件;

3)编写完成并保存后,通过docker build构建镜像;


构建环境(Build environment):存储Dockerfile的目录;

1)构建时,会将构建上下文中和该构建上下文中的文档上传到Docker守护进程

//也可成为上下文(context)或构建上下文(Build context)


DockerFile编写:

1)每个指令都必须是大写字母

2)执行顺序是从上到下

3)每一个指令都会提交一个新的镜像层

4)“#”代表注释


Dockerfile中所含指令

指令 含义
FROM 指定基础镜像 必须是DockerFile中第一个指令
LABEL 镜像添加元数据 常用于指定镜像的作者、版本和简介等信息
USER 指定运行容器时的用户/用户组 RUN、CMD、ENTRYPOINT也默认使用该用户
WORKDIR 指定镜像的内部登入/工作目录(可多次使用)
EXPOSE 声明容器暴露的端口,但并不会暴露该端口 若运行时使用随机暴露端口,自动暴露EXPOSE指定端口
ARG 设置镜像编译时的环境变量
ENV 设置镜像运行的环境变量
ADD 编译镜像时从主机/远端拷贝资源到镜像中
COPY 编译镜像只能从主机拷贝资源到镜像中
RUN 编译镜像时运行的脚本/命令 (默认使用/bin/sh -c执行)
VOLUME 指定容器挂载的数据卷
ONBUILD 镜像添加触发器
CMD 以替代形式指定容器启动时运行的命令
ENTRYPOINT 以追加形式设置容器启动时运行的命令

(1)FROM格式:FROM 镜像名

1)Dockerfile从FROM语句开始运行,且FROM可出现多次

2)“scratch”是一个空白镜像(Docker Hub上大部分镜像都从该镜像开始)


(2)LABEL格式:LABEL 元数据1=值1 元数据N=值N

1)建议所有的元数据放到一条LABEL指令中,防止创建过多镜像层


(3)USER格式:USER 用户名:用户组

1)可仅指定用户名/用户组,且用户名/用户组可使用名称或UID形式表示;

2)若没有USER指令,默认以root身份运行

3)可被“docker run -u 用户名:用户组”命令所替代


(4)WORKDIR格式:WORKDIR 目录路径

1)RUN、CMD、ENTRYPOINT、COPY、ADD指令都在该目录下执行

2)可被“docker run -w 路径”命令替代


(5)EXPOSE格式:EXPOSE 端口号


(6)ARG格式1:ARG 变量名

ARG格式2:ARG 变量名=变量值

1)格式2为变量名指定了默认变量值

//若构建时不为变量指定值,则使用默认值


(7)ENV格式:ENV 变量名 变量值

ENV格式2:ENV 变量名1=变量值1 变量名N=变量值N

1)创建多个变量时,变量名和变量值使用“=”连接(多个变量之间空格分隔);

2)调用生成的变量只需在变量名在添加“$”(创建时不需);

3)在变量前添加“\”代表转义


(8)ADD格式:ADD 源文档路径 目的路径

1)源文件路径必须是构建目录下的文件,也可以是URL

2)目的路径为容器内部路径,若不存在,则会自动创建该路径

//且创建的文档默认权威为0755,UID和GID都是0

3)目标路径以“/”结尾代表源文档是目录(反之是文件)

4)若源文档是压缩文档,在传递过程中会自动解压

//若目的路径下有同名文档,则不会覆盖同名文档


(9)COPY格式:COPY 源文档路径 目的路径

1)源文档路径必须是构建目录下的文件

2)目的路径为容器内部路径,若不存在,则会自动创建该路径

//且创建的文档默认权威为0755,UID和GID都是0

3)若源文档是压缩文档,则在传递过程中保持不变


(10)RUN格式1:RUN 命令和参数

RUN格式2:RUN [“命令”,“参数1”,“参数N”]

1)若在不支持Sheel的系统中运行RUN指令,则需通过数组格式(格式2)


(11)VOLUME格式:VOLUME [“容器内部挂载点1” “容器内部挂载点N”]


(12)ONBUILD格式1:ONBUILD 其他指令

1)其他指令不可以是:FROM 、LABEL和ONBULID;

2)ONBUILD指令添加的指令,默认跟在FROM之后执行;

3)ONBUILD触发器会按照父镜像中指定的顺序执行,且只能被继承一次

//其他Dockerfile中的指令均可调用


(13)CMD格式:CMD [“命令”,“参数1”,“参数N”]

1)可被docker run命令中指定的启动命令替代

2)Dockerfile中仅能存在一个CMD指令(若有多个,则只有最后一个生效)

3)CMD也可用来仅传递参数


(14)ENTRYPOINT格式:ENTRYPOINT [“命令”,“参数1”,“参数N”]

1)ENTRYPOINT命令不能被docker run命令指定的启动命令所覆盖,而docker
run命令指定的命令所指定的任何参数,都被当作参数传递给ENTRYPOINT指定的命令

2)docker run --entrypoint运行格式则可覆盖ENTRYPOINT指令

3)可组合使用CMD和ENTRYPOINT指令,生成带有参数的命令

4)Dockerfile中仅能存在一个(若有多个,则只有最后一个生效)


如:运行nginx镜像,若不指定运行方式,守护进程默认以后台方式运行

1)配置Dockerfile文件
在这里插入图片描述
2)若docker run -it 镜像名 -g “daemon off”,则Nginx守护进程需在前台运行

3)若docker run -it 镜像名,则以/usr/sbin/nginx -h方式启动Nginx

不同处 COPY ADD
当资源为压缩包时 将压缩包放到容器 解压后放到容器
是否可从链接地址获取资源

Dockerfile运行流程:

1)从FROM指定的镜像,运行一个基础容器;

2)执行一条指令(对容器做出修改);

3)执行类似docker commit命令的操作(提交一个新的镜像层);

4)运行添加新镜像层的容器,并执行下一条指令;

5)重复3)和4)步骤,直至指令执行完

//若执行过程中部分指令出错,导致不能正常结束,但仍可得到一个镜像,该镜像不会拥有出错指令后续部分的配置


如:编写具有网络工具的Centos镜像
在这里插入图片描述

build

build命令:通过DockerFile构建镜像

指令格式:docker build 选项 保存路径

选项 含义
-t 指定名称和标签(NAME:TAG)
--no-cache 关闭构建缓存
--build-arg 变量名=变量值 给ARG指令指定的变量赋值

1)指定名称时,可同时声明该镜像属于的仓库“仓库名/镜像名:TAG”,若不指定标签,则默认指定为“lastest”

2)保存路径必须是构建目录;

3)构建缓存:在构建过程中单个镜像提交成功的记录将被记录下,当再次构建该镜像时,仅会从修改镜像位置开始构建


如:编写Dockerfile,并通过build命令创建该镜像

a)编写Dockerfile
在这里插入图片描述

b)使用该脚本建立镜像
在这里插入图片描述

c)查看创建的镜像和数据卷
在这里插入图片描述


history命令:列出指定镜像的构建过程

指令格式:docker history 镜像ID

1)本质是:查看对应的DockerFile执行流程

2)若使用镜像名,则默认列出的是最新版创建历史

如:列出mwl_centos镜像的创建历史
在这里插入图片描述

//每一行都代表组成镜像的单层镜像的构建成功

posted @ 2022-02-11 12:56  爱和可乐的w  阅读(121)  评论(0编辑  收藏  举报