Dockerfile 自定义镜像

Dockerfile 简介

Dockerfile 是一个文本文件,里面包含组装新镜像时用到的基础镜像和各种指令。

Dockerfile 中以 # 号开头的行表示注释。

docker build 命令可根据 Dockerfile 来构建新镜像。

# 根据当前目录中的 Dockerfile 创建 image ,并给镜像命名(包括 tag)
docker build -t test:1.0 .

image 镜像

镜像是分层结构,Dockerfile 中的每条指令都会创建一个新的层次结构 layer,大大提升了镜像的可塑性和可重用性。

  • baseImage:基础镜像,包含基本的系统函数库、环境变量、文件系统等底层支持。
  • entrypoint:入口,是镜像中应用程序启动的命令。
  • 其它:在 baseImage 基础上添加依赖、安装程序、完成整个应用程序的安装与配置。

Dockerfile 指令

详情可查看官方文档 https://docs.docker.com/engine/reference/builder/

FROM

语法:FROM <image>

FROM alpine:3.16

指定构建新镜像的基础镜像(基础镜像、父镜像),一般是操作系统或其他基础镜像。

如果本地没有该基础镜像,就会从 Docker 的远程仓库 pull。

FROM 必须是 Dockerfile 中非注释行的第一个指令。

FROM 可以在一个 Dockerfile 中出现多次。

如果 FROM 语句没有指定基础镜像的 tag 标签,则默认使用 latest 标签。

MAINTAINER

语法:MAINTAINER <name>

指定镜像的维护者信息。

ENV

语法: ENV <name> <value>

定义环境变量。可在后面使用,在容器运行时保留。

# 定义环境变量 $MYSQL_ROOT_PASSWORD 的值为 123456
ENV MYSQL_ROOT_PASSWORD=123456

WORKDIR

语法:WORKDIR <dirname>

设置工作目录。它是 RUN、CMD、ENTRYPOINT、ADD、COPY 的当前工作目录。

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 最终路径是/a/b/c

WORKDIR 指令可以在 ENV 设置变量之后调用环境变量。

# 最终路径是 /path/$DIRNAME
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME

ADD

语法:ADD <src> <dest>

将宿主机的文件拷贝到新镜像的目录中。

可以是文件或者目录。如果是文件,表示拷贝文件本身;如果是目录,只会拷贝该目录中的所有文件(不包括目录本身)。(支持相对路径、远程 URL,支持 Go 的正则模糊匹配)

必须是绝对路径,如果不存在,就会自动创建。

# 将 Dockerfile 文件所在目录中的所有文件,拷贝至 /app 目录
ADD . /app

COPY

COPY 的用法与 ADD 相同,但 COPY 不支持远程的 URL。

RUN

语法:RUN <cmd>

指定构建新镜像时运行的 shell 命令。一般是安装过程的命令。

每条 RUN 指令将在当前镜像基础上执行指定的命令,并提交为新的镜像,后续的 RUN 都以之前 RUN 提交后的镜像为基础。

镜像是分层的,可以基于镜像的任何一个历史提交点来创建新的镜像。

RUN 产生的缓存在下一次构建镜像时默认不会失效,会被重用,但可以通过 --no-cache 选项禁用缓存。

CMD

语法:CMD <cmd>

指定新镜像的容器启动时默认运行的命令。

CMD 命令如果有多个,只有最后一个会生效。

CMD 的作用是在启动容器时提供一个默认的命令执行。

如果用户启动容器时指定了运行的命令,则会覆盖掉 CMD 指定的命令。

注意:CMD 在启动容器时执行,build 时不执行;而 RUN 只在 build 时执行,用于镜像的构建过程。

EXPOSE

语法:EXPOSE <port> [<port>...]

指定镜像的容器实例监听(对外服务)的端口,可指定多个端口,是给镜像使用者看的。

# 指定镜像的容器实例监听的端口为 80
EXPOSE 80

VOLUME

语法:VOLUME <dir>

创建一个可以从宿主机或其他容器挂载的挂载点。

ENTRYPOINT

ENTRYPOINT java -jar my.jar

镜像的入口,一般是应用程序启动的命令和参数,容器运行时自动执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值