赞
踩
Docker学习笔记 —— Docker 介绍
Docker学习笔记 —— Docker 安装
Docker学习笔记 —— Docker 常用命令
Docker学习笔记 —— Docker 存储
Docker学习笔记 —— Docker 网络
Docker学习笔记 —— Dockerfile
- Docker 可以通过读取Docker文件中的说明自动生成镜像。
- Docker 是一个文本文档,其中包含用户可以在命令行上调用以组装镜像的所有命令,用户可以使用
docker build
创建一个连续执行多个命令行执行的自动构建;
docker build
命令从Dockerfile和上下文构建镜像,生成的上下文是可以指定为本地文件系统上的目录,还可以指定为Git存储库位置。构建上下文是递归处理的;构建是由Docker守护进程运行,而不是由CLI运行;
- 构建过程要做的第一件事是(递归处理)将整个上下文发送到守护进程,大多数情况下,最该从一个空目录作为上下文开始,并将Dockerfile 保存在该目录中,
不要使用根目录 / 作为 PATH 构建上下文,因为它会导致构建将硬盘驱动器的全部内容传输到Docker守护进程;
传统上,Dockerfile位于上下文的根目录中,也可以通过在 docker build中使用-f 来指向文件系统中任何位置的Dockerfile,还可以通过 -t来制定存储库和tag
;
环境变量(用ENV语句声明)也可以在某些指令中用作由 Dockerfile 解释的变量;
环境变量在Dockerfile中用$variable_name 或 ${variable_name} 表示
,大括号的语法通常用于解决变量名没有空格的问题如${variable}_name;
${variable_name}
还支持一下标准Bash修饰符:
${variable:-word},表示如果设置了变量,则结果将是该值,如果未设置,则结果将为 word
;${variable:+word},表示如果设置了变量,则机构将是该值,如果未设置,则结果将是空字符串
;
格式:
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
FROM 指令初始化一个新的构建阶段并为后续指令设置基础镜像。因此,有效的Dockerfile 必须以FROM指令开头(ARG可以先于FROM),镜像可以是任何有效的镜像,最好挑一些apline,slim之类的基础小镜像,scratch镜像是一个空镜像,常用于多阶段构建;
FROM可以在单个Dockerfile中多次出现,以创建多个镜像或将一个构建阶段用作另一个构建阶段的依赖项。只需要在每条新FROM指令之前几下commit输出的最后一个镜像ID。每个FROM指令都会清除以前的指令创建的任何状态;
可以通过添加
AS name
到FROM
指令来为新的构建阶段命名,这个名称可在后续FROM
和COPY --from=<name>
说明中用于引用此阶段构建的镜像;tag 和 digest 值是可选的,如果省略不写,默认使用 lastest ,如果找不到,将返回错误;
如何确定我需要什么要的基础镜像?
- Java应用当然是java基础镜像(SpringBoot应用)或者T omcat基础镜像(War应用)
- JS模块化应用一般用nodejs基础镜像
- 其他各种语言用自己的服务器或者基础环境镜像,如python、golang、java、php等
ARG version=3.13
#不可以引用多个
FROM alpine:$version
CMD ["/bin/sh","-c","echo 11111"]
格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
键值对结构,该指令向镜像添加元数据,标注镜像的一些说明信息,LABEL值中包含空格可以使用引号、\ 来处理;
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
格式:
MAINTAINER <name>
MAINTAINER指令设置生成图像的作者字段,已弃用,用 LABEL 代替;
格式:
RUN <command>
- shell形式,命令在 shell 中运行,默认
/bin/sh -c
在 Linux 或cmd /S /C
Windows 上;- shell形式,/bin/sh -c 的方式;
RUN ["executable", "param1", "param2"]
exec形式,不调用命令shell,不会进行shell处理
例如:RUN[“echo”,"$HOME"]不会对变量 $HOME进行替换,如果想要shell处理,那么:
- 使用shell形式;
- 要么直接执行shell,例如
RUN["sh","-c","echo $HOME"]
;RUN命令将在当前图层之上的新层中执行任何命令并提交结果,生成的提交镜像将用于 Dockerfile的下一步;
分层运行 RUN 指令并生成提交符合Docker的核心概念,在Docker中,提交很便宜,可以源代码管理一样从镜像历史中的任何点创建容器;
exec形式可以避免破坏shell字符串,并使用不包含指定shell可执行文件的基本映像运行RUN命令。
可以使用SHELL命令更改shell形式的默认shell。 在shell形式中,您可以使用\(反斜杠)将一条 RUN指令继续到下一行;
#指定构建参数【构建时】
ARG version=3.13
#不可以引用多个
FROM alpine:$version
#给镜像加元数据信息
LABEL maintainer
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。