- 在Dockerfile中,FROM ... AS ... 语法是多阶段构建(Multi-stage builds)的一个重要特性。
- FROM *** AS * 是Dockerfile中的一条指令,用于创建一个新的构建阶段。它的作用是将当前的构建环境切换到一个新的构建阶段,并将该阶段命名为*。
- 在Dockerfile中,每个指令都会创建一个新的构建阶段。FROM指令是创建构建阶段的第一个指令,它指定了构建阶段的基础镜像。
- 多阶段构建的主要优点是可以将构建过程分为多个阶段,每个阶段可以使用不同的基础镜像,并且可以选择性地将前一个阶段的文件复制到下一个阶段,这样可以显著减小最终镜像的大小,因为不需要的构建依赖和中间文件都可以被丢弃。
FROM python:3.13-bookworm-slim AS base
...
FROM base AS final
...
- 在Dockerfile中,ARG *** 是一个构建参数的定义,它定义了一个名为的参数,并将其默认值设置为。
- 构建参数是在构建镜像时可以被传递给Docker的变量。它们可以在Dockerfile中使用,并且可以在构建过程中被修改。
- 当执行
docker build
命令时,可以使用--build-arg 自定义参数名称=参数值
参数来传入具体的值。
ARG COMMIT_ID
ENV COMMIT_ID=${COMMIT_ID}
docker build --build-arg COMMIT_ID=123456 -t my-image .
- RUN adduser 命令是在Docker容器的文件系统中创建一个新用户。它在构建阶段中执行。 例如我们创建了一个名为appuser的系统用户,主要参数说明, 这个用户主要用于运行应用程序,遵循容器安全最佳实践,不需要设置密码因为这个用户仅用于运行应用,不需要交互式登录。
--disabled-password:禁用密码登录,因为容器中的用户通常不需要密码登录
--gecos "":设置用户信息为空
--home "/home/appuser":设置用户主目录
--shell "/sbin/nologin":设置用户的shell为nologin,表示该用户不能登录shell
--uid "${UID}":设置用户ID
RUN adduser \
--disabled-password \
--gecos "" \
--home "/home/appuser" \
--shell "/sbin/nologin" \
--uid "${UID}" \
appuser